package api import ( "strconv" "strings" "quyun/v2/app/errorx" "quyun/v2/app/tenancy" "github.com/gofiber/fiber/v3" ) // @provider type ApiController struct{} type PostsQuery struct { Page int `query:"page"` Limit int `query:"limit"` Keyword string `query:"keyword"` } type UpdateUsernameReq struct { Username string `json:"username"` } // WeChatOAuthStart // // @Router /v1/auth/wechat [get] func (a *ApiController) WeChatOAuthStart(ctx fiber.Ctx) error { return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "wechat oauth: /auth/wechat"}) } // WeChatOAuthCallback // // @Router /v1/auth/login [get] func (a *ApiController) WeChatOAuthCallback(ctx fiber.Ctx) error { return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "wechat oauth: /auth/login"}) } // ListPosts // // @Router /v1/posts [get] // @Bind query query func (a *ApiController) ListPosts(ctx fiber.Ctx, query *PostsQuery) error { page := 1 limit := 10 if query != nil { if query.Page > 0 { page = query.Page } if query.Limit > 0 { limit = query.Limit } } return ctx.JSON(fiber.Map{ "items": []any{}, "total": 0, "page": page, "limit": limit, }) } // ShowPost // // @Router /v1/posts/:id/show [get] // @Bind id path func (a *ApiController) ShowPost(ctx fiber.Ctx, id int) error { if id <= 0 { return errorx.ErrInvalidParameter.WithMsg("invalid id") } return fiber.ErrNotFound } // PlayPost // // @Router /v1/posts/:id/play [get] // @Bind id path func (a *ApiController) PlayPost(ctx fiber.Ctx, id int) error { if id <= 0 { return errorx.ErrInvalidParameter.WithMsg("invalid id") } return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "post play"}) } // MinePosts // // @Router /v1/posts/mine [get] // @Bind query query func (a *ApiController) MinePosts(ctx fiber.Ctx, query *PostsQuery) error { page := 1 limit := 10 if query != nil { if query.Page > 0 { page = query.Page } if query.Limit > 0 { limit = query.Limit } } return ctx.JSON(fiber.Map{ "items": []any{}, "total": 0, "page": page, "limit": limit, }) } // BuyPost // // @Router /v1/posts/:id/buy [post] // @Bind id path func (a *ApiController) BuyPost(ctx fiber.Ctx, id int) error { if id <= 0 { return errorx.ErrInvalidParameter.WithMsg("invalid id") } return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "post buy"}) } // UserProfile // // @Router /v1/users/profile [get] func (a *ApiController) UserProfile(ctx fiber.Ctx) error { tenantCode := ctx.Locals(tenancy.LocalTenantCode) return ctx.JSON(fiber.Map{ "id": 0, "created_at": "1970-01-01T00:00:00Z", "username": "", "avatar": "", "balance": 0, "tenant": tenantCode, }) } // UpdateUsername // // @Router /v1/users/username [put] // @Bind req body func (a *ApiController) UpdateUsername(ctx fiber.Ctx, req *UpdateUsernameReq) error { if req == nil { return errorx.ErrInvalidJSON } name := strings.TrimSpace(req.Username) if name == "" { return errorx.ErrDataValidationFail.WithMsg("username required") } if len([]rune(name)) > 12 { return errorx.ErrDataValidationFail.WithMsg("username too long") } return ctx.JSON(fiber.Map{"ok": true}) } // WechatJSSDK // // @Router /v1/wechats/js-sdk [get] func (a *ApiController) WechatJSSDK(ctx fiber.Ctx) error { return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "wechat js-sdk"}) } // AdminAuth (stub) // // @Router /v1/admin/auth [post] func (a *ApiController) AdminAuth(ctx fiber.Ctx) error { return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "admin auth"}) } // AdminStatistics (stub) // // @Router /v1/admin/statistics [get] func (a *ApiController) AdminStatistics(ctx fiber.Ctx) error { return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "admin statistics"}) } // AdminOrders (stub) // // @Router /v1/admin/orders [get] func (a *ApiController) AdminOrders(ctx fiber.Ctx) error { return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "admin orders list"}) } // AdminOrderRefund (stub) // // @Router /v1/admin/orders/:id/refund [post] // @Bind id path func (a *ApiController) AdminOrderRefund(ctx fiber.Ctx, id int) error { if id <= 0 { return errorx.ErrInvalidParameter.WithMsg("invalid id") } return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "admin orders refund"}) } // AdminMedias (stub) // // @Router /v1/admin/medias [get] func (a *ApiController) AdminMedias(ctx fiber.Ctx) error { return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "admin medias list"}) } // AdminMediaShow (stub) // // @Router /v1/admin/medias/:id [get] func (a *ApiController) AdminMediaShow(ctx fiber.Ctx) error { _, err := strconv.ParseInt(ctx.Params("id"), 10, 64) if err != nil { return errorx.ErrInvalidParameter.WithMsg("invalid id") } return ctx.Status(fiber.StatusNotImplemented).JSON(fiber.Map{"ok": false, "todo": "admin medias show"}) }