feat(smoke): 添加个性化戒烟计划生成功能 (Issue #46)

- 新增 Model 层: SmokeQuitPlan, SmokeQuitPlanDay 结构体
- 新增 Service 层: GenerateQuitPlan, GetActivePlan, GetPlanDays, ResetPlan
- 新增 Handler 层: POST /generate, GET /, GET /days, POST /reset
- 集成 AI 生成 30 天个性化戒烟减量方案
- 支持重置计划功能
This commit is contained in:
hello-dd-code
2026-03-13 14:58:42 +08:00
parent a46b51cd58
commit 93bcc6c787
6 changed files with 948 additions and 3 deletions
+2 -1
View File
@@ -26,6 +26,7 @@ func Register(
authHandler *authhandler.AuthHandler,
videoHandler *rmhandler.VideoHandler,
smokeHandler *smokehandler.SmokeHandler,
quitPlanHandler *smokehandler.QuitPlanHandler,
redeemCodeHandler *membershiphandler.RedeemCodeHandler,
uploadHandler *qiniuhandler.UploadHandler,
oaOAuthHandler *oahandler.OAuthHandler,
@@ -62,7 +63,7 @@ func Register(
registerCommonRoutes(protected, uploadHandler)
registerRemoveWatermarkRoutes(api, protected, videoHandler)
registerMembershipRoutes(protected, redeemCodeHandler)
registerSmokeRoutes(protected, smokeHandler)
registerSmokeRoutes(protected, smokeHandler, quitPlanHandler)
}
registerMarketingRoutes(api, protected, adminToken, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler)
+8 -2
View File
@@ -6,7 +6,7 @@ import (
smokehandler "wx_service/internal/smoke/handler"
)
func registerSmokeRoutes(protected *gin.RouterGroup, smokeHandler *smokehandler.SmokeHandler) {
func registerSmokeRoutes(protected *gin.RouterGroup, smokeHandler *smokehandler.SmokeHandler, quitPlanHandler *smokehandler.QuitPlanHandler) {
// 戒烟/抽烟记录(与 video 去水印功能在路由前缀上区分开)
smoke := protected.Group("/smoke")
{
@@ -16,7 +16,7 @@ func registerSmokeRoutes(protected *gin.RouterGroup, smokeHandler *smokehandler.
smoke.GET("/profile", smokeHandler.GetProfile)
smoke.POST("/profile", smokeHandler.UpsertProfile)
// 不使用 AI 时的默认下次抽烟时间建议(阶梯式延时)
// 不使用 AI 时的默认"下次抽烟时间"建议(阶梯式延时)
smoke.GET("/next_smoke_time", smokeHandler.GetNextSmokeTime)
smoke.GET("/dashboard", smokeHandler.Dashboard)
@@ -41,5 +41,11 @@ func registerSmokeRoutes(protected *gin.RouterGroup, smokeHandler *smokehandler.
smoke.POST("/share", smokeHandler.CreateShare)
smoke.GET("/share/:token", smokeHandler.GetShareView)
smoke.POST("/share/:token/revoke", smokeHandler.RevokeShare)
// 个性化戒烟计划(30天减量方案)
smoke.POST("/quit-plan/generate", quitPlanHandler.GenerateQuitPlan)
smoke.GET("/quit-plan", quitPlanHandler.GetQuitPlan)
smoke.GET("/quit-plan/days", quitPlanHandler.GetQuitPlanDays)
smoke.POST("/quit-plan/reset", quitPlanHandler.ResetQuitPlan)
}
}