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", DeleteDocBatch). AddTags("文档管理"). SetSummary("批量-文件删除"). AddJWTSecurity(JWTRequired). SetJSONRequestBody(schema.DocsBatchDelete{}). AddJSONResponse(200, schema.DocBatchResults{}).OK() app.Post("/docs/batch/update", UpdateDocBatch). 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.String(), ObjectName: objectName, }) }