feat: add frpc

This commit is contained in:
yanghao05
2025-04-25 16:47:17 +08:00
parent 75865ae19a
commit b35abb2090
4 changed files with 24 additions and 6 deletions

View File

@@ -80,6 +80,7 @@ func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Li
}
type PostItem struct {
Bought bool `json:"bought"`
Title string `json:"title"`
Description string `json:"description"`
Content string `json:"content"`
@@ -94,7 +95,8 @@ type PostItem struct {
// Show
// @Router /api/posts/:id [get]
// @Bind id path
func (ctl *posts) Show(ctx fiber.Ctx, id int64) (*PostItem, error) {
// @Bind user local
func (ctl *posts) Show(ctx fiber.Ctx, id int64, user *model.Users) (*PostItem, error) {
log.Infof("Fetching post with ID: %d", id)
post, err := models.Posts.GetByID(ctx.Context(), id)
if err != nil {
@@ -102,6 +104,11 @@ func (ctl *posts) Show(ctx fiber.Ctx, id int64) (*PostItem, error) {
return nil, err
}
bought, err := models.Users.HasBought(ctx.Context(), user.ID, post.ID)
if err != nil {
return nil, err
}
medias, err := models.Posts.GetMediaByIds(ctx.Context(), post.HeadImages.Data)
if err != nil {
return nil, err
@@ -125,6 +132,7 @@ func (ctl *posts) Show(ctx fiber.Ctx, id int64) (*PostItem, error) {
Likes: post.Likes,
Tags: post.Tags.Data,
HeadImages: mediaUrls,
Bought: bought,
}, nil
}

View File

@@ -58,9 +58,10 @@ func (r *Routes) Register(router fiber.Router) {
Local[*model.Users]("user"),
))
router.Get("/api/posts/:id", DataFunc1(
router.Get("/api/posts/:id", DataFunc2(
r.posts.Show,
PathParam[int64]("id"),
Local[*model.Users]("user"),
))
router.Get("/api/posts/:id/play", DataFunc2(

9
backend/frpc.toml Normal file
View File

@@ -0,0 +1,9 @@
serverAddr = "39.105.111.158"
serverPort = 1422
[[proxies]]
name = "test-http"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8088
remotePort = 1423

View File

@@ -120,14 +120,14 @@ onUnmounted(() => {
<div class="animate-spin rounded-full h-8 w-8 border-4 border-gray-200 border-t-blue-600"></div>
</div>
<div v-if="article && !article.purchased"
<div v-if="article && !article.bought"
class="fixed bottom-0 left-0 right-0 bg-white border-t border-gray-200 p-4">
<div class="flex items-center justify-between max-w-md mx-auto">
<div class="text-red-600 font-bold text-xl">
¥{{ article.price }}
<div class="text-orange-600 font-bold text-xl">
¥{{ (article.price / 100).toFixed(2) }}
</div>
<button @click="handleBuy" :disabled="buying"
class="bg-blue-600 text-white px-8 py-3 rounded-full hover:bg-blue-700 active:bg-blue-800 transition-colors disabled:opacity-50">
class="bg-orange-600 text-white px-8 py-3 rounded-full hover:bg-orange-500 active:bg-orange-600 transition-colors disabled:opacity-50">
<span v-if="buying">处理中...</span>
<span v-else>立即购买</span>
</button>