Files
quyun-v2/backend/app/http/api/controller.go
2025-12-15 17:55:32 +08:00

208 lines
5.0 KiB
Go

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"})
}