feat: 添加举报功能支持
Some checks failed
Build Backend / build (push) Failing after 5m19s
Build Backend / build-docker (push) Has been skipped

- 新增 Report 数据模型、DTO、Repository、Service 层
- 实现用户端举报 API (POST /api/v1/reports)
- 实现管理端举报管理 API (列表、详情、处理、批量处理)
- 添加举报自动隐藏机制(达到阈值自动隐藏内容)
- 集成系统通知(举报处理结果通知)
- 更新路由和 Wire 依赖注入配置

Made-with: Cursor
This commit is contained in:
lafay
2026-03-29 20:18:36 +08:00
parent 2205b8ad04
commit 5f7b02ee8e
16 changed files with 1426 additions and 0 deletions

View File

@@ -35,6 +35,8 @@ type Router struct {
qrcodeHandler *handler.QRCodeHandler
materialHandler *handler.MaterialHandler
callHandler *handler.CallHandler
reportHandler *handler.ReportHandler
adminReportHandler *handler.AdminReportHandler
wsHandler *handler.WSHandler
logService *service.LogService
jwtService *service.JWTService
@@ -67,6 +69,8 @@ func New(
qrcodeHandler *handler.QRCodeHandler,
materialHandler *handler.MaterialHandler,
callHandler *handler.CallHandler,
reportHandler *handler.ReportHandler,
adminReportHandler *handler.AdminReportHandler,
logService *service.LogService,
activityService service.UserActivityService,
casbinService service.CasbinService,
@@ -102,6 +106,8 @@ func New(
qrcodeHandler: qrcodeHandler,
materialHandler: materialHandler,
callHandler: callHandler,
reportHandler: reportHandler,
adminReportHandler: adminReportHandler,
logService: logService,
jwtService: jwtService,
casbinService: casbinService,
@@ -356,6 +362,15 @@ func (r *Router) setupRoutes() {
messages.POST("/delete_msg", r.messageHandler.HandleDeleteMsg)
}
// 举报路由
if r.reportHandler != nil {
reports := v1.Group("/reports")
reports.Use(authMiddleware)
{
reports.POST("", r.reportHandler.Create)
}
}
// 通知路由
notifications := v1.Group("/notifications")
{
@@ -557,6 +572,14 @@ func (r *Router) setupRoutes() {
admin.PUT("/materials/:id", r.materialHandler.AdminUpdateMaterial)
admin.DELETE("/materials/:id", r.materialHandler.AdminDeleteMaterial)
}
// 举报管理
if r.adminReportHandler != nil {
admin.GET("/reports", r.adminReportHandler.List)
admin.GET("/reports/:id", r.adminReportHandler.Detail)
admin.PUT("/reports/:id/handle", r.adminReportHandler.Handle)
admin.POST("/reports/batch-handle", r.adminReportHandler.BatchHandle)
}
}
}
}