208 lines
5.0 KiB
Go
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"})
|
|
}
|