feat: 新增创作中心(/studio),支持数据概览、内容管理、草稿箱、写文章
- 新增 StudioController,依赖 studioUseCase 接口,遵循 ISP 接口隔离 - PostRepo 新增 FindByUserIDAndStatus 方法,按用户+状态分页查询 - PostService 新增 ListByUser、GetOverview 及 StudioOverview 统计 - /studio 页面路由(概览/管理/草稿箱/写文章/数据分析)+ /api/studio API - 复用 Vditor 编辑器,studio-editor.js 对接 /api/studio/posts 端点 - 新增 studio.css(B站风格三栏布局+统计卡片+状态筛选tabs) - 模板引擎注册 add/subtract 函数,分页模板中直接使用
This commit is contained in:
@ -58,4 +58,17 @@ func setupAPIRoutes(r *gin.Engine, cfg *config.Config, d *dependencies) {
|
||||
postsAPI.POST("/:id/submit", d.postCtrl.Submit)
|
||||
postsAPI.POST("/upload-image", d.postCtrl.UploadImage)
|
||||
}
|
||||
|
||||
// --- 创作中心 API(需登录) ---
|
||||
studioAPI := r.Group("/api/studio")
|
||||
studioAPI.Use(d.authMdw.Required())
|
||||
studioAPI.Use(middleware.CSRF(cfg))
|
||||
{
|
||||
studioAPI.GET("/overview", d.studioCtrl.OverviewAPI)
|
||||
studioAPI.GET("/posts", d.studioCtrl.ListPostsAPI)
|
||||
studioAPI.POST("/posts", d.studioCtrl.Create)
|
||||
studioAPI.PUT("/posts/:id", d.studioCtrl.Update)
|
||||
studioAPI.DELETE("/posts/:id", d.studioCtrl.Delete)
|
||||
studioAPI.POST("/posts/:id/submit", d.studioCtrl.Submit)
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@ type dependencies struct {
|
||||
messageCtrl *controller.MessageController
|
||||
postCtrl *controller.PostController
|
||||
spaceCtrl *controller.SpaceController
|
||||
studioCtrl *controller.StudioController
|
||||
adminPostCtrl *adminCtrl.AdminPostController
|
||||
adminCtrl *adminCtrl.AdminController
|
||||
auditCtrl *adminCtrl.AuditController
|
||||
|
||||
@ -35,6 +35,7 @@ func buildDeps(db *gorm.DB, cfg *config.Config, siteSettings *config.SiteSetting
|
||||
shortcodeSvc := service.NewShortcodeService()
|
||||
postCtrl := controller.NewPostController(postService, shortcodeSvc)
|
||||
adminPostCtrl := adminCtrl.NewAdminPostController(postService)
|
||||
studioCtrl := controller.NewStudioController(postService)
|
||||
|
||||
// 用户空间
|
||||
spaceService := service.NewSpaceService(userRepo, postRepo)
|
||||
@ -43,6 +44,7 @@ func buildDeps(db *gorm.DB, cfg *config.Config, siteSettings *config.SiteSetting
|
||||
return &dependencies{
|
||||
authCtrl: authCtrl, authMdw: authMdw, settingsCtrl: settingsCtrl,
|
||||
messageCtrl: messageController, postCtrl: postCtrl, spaceCtrl: spaceCtrl,
|
||||
studioCtrl: studioCtrl,
|
||||
adminPostCtrl: adminPostCtrl,
|
||||
adminCtrl: adminController, auditCtrl: auditController,
|
||||
siteSettingCtrl: siteSettingController, tokenCtrl: authCtrl,
|
||||
|
||||
@ -43,6 +43,17 @@ func setupFrontendRoutes(r *gin.Engine, cfg *config.Config, d *dependencies) {
|
||||
pages.GET("/posts/new", d.authMdw.Required(), d.postCtrl.NewPage)
|
||||
pages.GET("/posts/:id", d.postCtrl.ShowPage)
|
||||
pages.GET("/posts/:id/edit", d.authMdw.Required(), d.postCtrl.EditPage)
|
||||
|
||||
// 创作中心(需登录)
|
||||
studioPages := pages.Group("/studio")
|
||||
studioPages.Use(d.authMdw.Required())
|
||||
{
|
||||
studioPages.GET("", d.studioCtrl.OverviewPage)
|
||||
studioPages.GET("/posts", d.studioCtrl.PostsPage)
|
||||
studioPages.GET("/drafts", d.studioCtrl.DraftsPage)
|
||||
studioPages.GET("/write", d.studioCtrl.WritePage)
|
||||
studioPages.GET("/analytics", d.studioCtrl.AnalyticsPage)
|
||||
}
|
||||
}
|
||||
|
||||
// 认证页面(已登录自动跳走)
|
||||
|
||||
Reference in New Issue
Block a user