139 lines
3.8 KiB
Go

package router
import (
"octopus/internal/schema"
"octopus/internal/service"
"github.com/gofiber/fiber/v2"
"github.com/neo-f/soda"
)
func RegisterDocRouter(app *soda.Soda) {
app.Get("/docs", ListDocs).
AddTags("文档管理").
SetSummary("获取文档列表").
AddJWTSecurity(JWTRequired).
SetParameters(schema.ListDocQuery{}).
AddJSONResponse(200, schema.DocList{}).OK()
app.Post("/docs", CreateDoc).
AddTags("文档管理").
SetSummary("新建文档").
AddJWTSecurity(JWTRequired).
SetJSONRequestBody(schema.CreateDoc{}).
AddJSONResponse(200, schema.Doc{}).OK()
app.Put("/docs/:id", UpdateDoc).
AddTags("文档管理").
SetSummary("更新文档").
AddJWTSecurity(JWTRequired).
SetParameters(schema.DocID{}).
SetJSONRequestBody(schema.UpdateDoc{}).
AddJSONResponse(200, schema.Doc{}).OK()
app.Delete("/docs/:id", DeleteDoc).
AddTags("文档管理").
SetSummary("获取文档列表").
AddJWTSecurity(JWTRequired).
SetParameters(schema.DocID{}).
AddJSONResponse(200, nil).OK()
app.Post("/docs/batch/delete", DeleteDoc).
AddTags("文档管理").
SetSummary("批量-文件删除").
AddJWTSecurity(JWTRequired).
SetJSONRequestBody(schema.DocsBatchDelete{}).
AddJSONResponse(200, schema.DocBatchResults{}).OK()
app.Post("/docs/batch/update", UpdateDoc).
AddTags("文档管理").
SetSummary("批量-文件更新").
AddJWTSecurity(JWTRequired).
SetJSONRequestBody(schema.DocsBatchUpdate{}).
AddJSONResponse(200, schema.DocBatchResults{}).OK()
// get presigned url for tmp file upload
app.Get("/docs/upload-url", CreateUploadURL).
AddTags("文档管理").
SetSummary("获取临时上传文件用的预签名URL").
AddJWTSecurity(JWTRequired).
SetParameters(schema.CreateUploadURL{}).
AddJSONResponse(200, schema.UploadURL{}).OK()
}
func ListDocs(c *fiber.Ctx) error {
auth := getAuth(c)
params := c.Locals(soda.KeyParameter).(*schema.ListDocQuery)
docs, total, err := service.ListDocs(c.UserContext(), auth, params)
if err != nil {
return err
}
docSchemas := make([]*schema.Doc, 0, len(docs))
for _, doc := range docs {
docSchemas = append(docSchemas, doc.ToSchema(c.UserContext()))
}
return c.JSON(schema.DocList{Items: docSchemas, Total: total})
}
func CreateDoc(c *fiber.Ctx) error {
auth := getAuth(c)
body := c.Locals(soda.KeyRequestBody).(*schema.CreateDoc)
doc, err := service.CreateDoc(c.UserContext(), auth, body)
if err != nil {
return err
}
return c.JSON(doc.ToSchema(c.UserContext()))
}
func UpdateDoc(c *fiber.Ctx) error {
auth := getAuth(c)
params := c.Locals(soda.KeyParameter).(*schema.DocID)
body := c.Locals(soda.KeyRequestBody).(*schema.UpdateDoc)
ctx := c.UserContext()
doc, err := service.UpdateDoc(ctx, auth, params.ID, body)
if err != nil {
return err
}
return c.JSON(doc.ToSchema(ctx))
}
func DeleteDoc(c *fiber.Ctx) error {
auth := getAuth(c)
params := c.Locals(soda.KeyParameter).(*schema.DocID)
ctx := c.UserContext()
if err := service.DeleteDoc(ctx, auth, params.ID); err != nil {
return err
}
return c.JSON(nil)
}
func DeleteDocBatch(c *fiber.Ctx) error {
auth := getAuth(c)
body := c.Locals(soda.KeyRequestBody).(*schema.DocsBatchDelete)
ctx := c.UserContext()
resp := service.DeleteDocBatch(ctx, auth, body)
return c.JSON(resp)
}
func UpdateDocBatch(c *fiber.Ctx) error {
auth := getAuth(c)
body := c.Locals(soda.KeyRequestBody).(*schema.DocsBatchUpdate)
ctx := c.UserContext()
resp := service.UpdateDocBatch(ctx, auth, body)
return c.JSON(resp)
}
func CreateUploadURL(c *fiber.Ctx) error {
auth := getAuth(c)
params := c.Locals(soda.KeyParameter).(*schema.CreateUploadURL)
ctx := c.UserContext()
u, objectName, err := service.CreateUploadURL(ctx, auth, params)
if err != nil {
return err
}
return c.JSON(schema.UploadURL{
URL: *u,
ObjectName: objectName,
})
}