package http import ( "time" "quyun/app/models" "quyun/app/requests" "quyun/database/schemas/public/model" "quyun/providers/wepay" "github.com/gofiber/fiber/v3" "github.com/gofiber/fiber/v3/log" "github.com/pkg/errors" ) type ListQuery struct { Keyword *string `query:"keyword"` } // @provider type posts struct { wepay *wepay.Client } // List posts // @Router /posts [get] // @Bind pagination query // @Bind query query func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *ListQuery) (*requests.Pager, error) { cond := models.Posts.BuildConditionWithKey(query.Keyword) return models.Posts.List(ctx.Context(), pagination, cond) } // Show // @Router /show/:id [get] // @Bind id path func (ctl *posts) Show(ctx fiber.Ctx, id int64) (*model.Posts, error) { return models.Posts.GetByID(ctx.Context(), id) } // Mine posts // @Router /mine [get] // @Bind pagination query // @Bind query query func (ctl *posts) Mine(ctx fiber.Ctx, pagination *requests.Pagination, query *ListQuery) (*requests.Pager, error) { log.Infof("Fetching posts for user with pagination: %+v and keyword: %v", pagination, query.Keyword) return models.Users.PostList(ctx.Context(), 1, pagination, query.Keyword) } // Buy // @Router /buy/:id [get] // @Bind id path func (ctl *posts) Buy(ctx fiber.Ctx, id int64) (*string, error) { var userId int64 = 1 user, err := models.Users.GetByID(ctx.Context(), userId) if err != nil { return nil, errors.Wrapf(err, " failed to get user: %d", userId) } post, err := models.Posts.GetByID(ctx.Context(), id) if err != nil { return nil, errors.Wrapf(err, " failed to get post: %d", id) } // create order order, err := models.Orders.Create(ctx.Context(), userId, post.ID) if err != nil { return nil, errors.Wrap(err, "订单创建失败") } body := ctl.wepay. BodyMap(). Expire(30 * time.Minute). Description(post.Title). OutTradeNo(order.OrderNo). Payer(user.OpenID) prePayResp, err := ctl.wepay.V3TransactionJsapi(ctx.Context(), body) if err != nil { log.Errorf("wepay.V3TransactionJsapi err: %v", err) return nil, errors.Wrap(err, "微信支付失败") } return &prePayResp.Response.PrepayId, nil }