feat: 收藏夹系统 + Studio 趋势图 + 通知偏好设置
- 新增收藏夹系统 (Folder/FolderItem 模型、CRUD API、前端管理页) - 新增文章详情页收藏按钮 (书签图标、ToggleFavorite 一键收藏) - 新增 Studio 趋势图 (赋能值/评论/点赞/收藏 4 线图, 7d/30d/90d) - 新增通知偏好设置页 (评论/回复/点赞/关注 4 类开关) - 后端通知列表支持按偏好过滤 (排除已关闭的通知类型) - 下载 Chart.js 到本地静态资源 (static/js/chart.umd.min.js) - 补充收藏夹卡片、开关滑块、趋势图网格等 CSS 样式
This commit is contained in:
@ -25,6 +25,9 @@ func setupAPIRoutes(r *gin.Engine, cfg *config.Config, d *dependencies) {
|
||||
settingsAPI.DELETE("/sessions/:sid", d.settingsCtrl.DestroySession)
|
||||
settingsAPI.POST("/sessions/destroy-others", d.settingsCtrl.DestroyOtherSessions)
|
||||
settingsAPI.PUT("/sessions/:sid/remark", d.settingsCtrl.UpdateSessionRemark)
|
||||
// 通知偏好
|
||||
settingsAPI.GET("/notify-prefs", d.settingsCtrl.GetNotifyPrefs)
|
||||
settingsAPI.PUT("/notify-prefs", d.settingsCtrl.UpdateNotifyPref)
|
||||
}
|
||||
|
||||
// --- 消息中心 API(需登录) ---
|
||||
@ -145,4 +148,38 @@ func setupAPIRoutes(r *gin.Engine, cfg *config.Config, d *dependencies) {
|
||||
{
|
||||
followAPI.POST("/follow", d.followCtrl.Toggle)
|
||||
}
|
||||
|
||||
// --- 收藏夹 API ---
|
||||
// 公开:文章收藏状态(未登录返回 false)
|
||||
r.GET("/api/posts/:id/folder-status", d.favoriteCtrl.GetPostStatus)
|
||||
// 公开:查看公开收藏夹内容
|
||||
r.GET("/api/folders/:id/posts", d.favoriteCtrl.ListFolderItems)
|
||||
// 需登录:收藏操作
|
||||
folderAPI := r.Group("/api/folders")
|
||||
folderAPI.Use(d.authMdw.Required())
|
||||
folderAPI.Use(d.authMdw.BannedWriteGuard())
|
||||
folderAPI.Use(middleware.CSRF(cfg))
|
||||
{
|
||||
folderAPI.GET("", d.favoriteCtrl.ListFolders)
|
||||
folderAPI.POST("", d.favoriteCtrl.CreateFolder)
|
||||
folderAPI.PUT("/:id", d.favoriteCtrl.UpdateFolder)
|
||||
folderAPI.DELETE("/:id", d.favoriteCtrl.DeleteFolder)
|
||||
folderAPI.POST("/:id/posts", d.favoriteCtrl.AddToFolder)
|
||||
folderAPI.DELETE("/:id/posts/:postId", d.favoriteCtrl.RemoveFromFolder)
|
||||
}
|
||||
// 需登录:切换收藏(Toggle)
|
||||
favToggleAPI := r.Group("/api/posts/:id")
|
||||
favToggleAPI.Use(d.authMdw.Required())
|
||||
favToggleAPI.Use(d.authMdw.BannedWriteGuard())
|
||||
favToggleAPI.Use(middleware.CSRF(cfg))
|
||||
{
|
||||
favToggleAPI.POST("/favorite", d.favoriteCtrl.ToggleFavorite)
|
||||
}
|
||||
|
||||
// --- Studio 趋势 API(需登录) ---
|
||||
trendsAPI := r.Group("/api/studio")
|
||||
trendsAPI.Use(d.authMdw.Required())
|
||||
{
|
||||
trendsAPI.GET("/trends", d.studioCtrl.TrendsAPI)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user