feat: 戒烟成就、梦想图标预设、打卡统计与依赖注入调整

- 成就系统、连续打卡天数计算、管理后台成就 CRUD
- 梦想目标图标预设 DreamPreset 与用户端 dream-presets 接口
- 管理后台梦想图标 CRUD;戒烟打卡 summary 修正
- 忽略根目录编译产物 /api

Made-with: Cursor
This commit is contained in:
nepiedg
2026-04-04 14:55:50 +08:00
parent 1c0aeb152a
commit fd097729d7
20 changed files with 849 additions and 12 deletions
+16 -10
View File
@@ -27,6 +27,8 @@ type upsertSmokeProfileRequest struct {
SleepTime *string `json:"sleep_time"`
QuitDate *string `json:"quit_date"`
AchievementThemeID *uint `json:"achievement_theme_id"`
}
func (h *SmokeHandler) GetProfile(c *gin.Context) {
@@ -95,17 +97,21 @@ func (h *SmokeHandler) UpsertProfile(c *gin.Context) {
}
}
achievementThemeIDProvided := req.AchievementThemeID != nil
view, err := h.smokeProfileService.Upsert(c.Request.Context(), int(user.ID), smokeservice.UpsertSmokeProfileRequest{
BaselineCigsPerDay: req.BaselineCigsPerDay,
SmokingYears: req.SmokingYears,
PackPriceCent: req.PackPriceCent,
Mode: req.Mode,
SmokeMotivations: req.SmokeMotivations,
QuitMotivations: req.QuitMotivations,
WakeUpTime: req.WakeUpTime,
SleepTime: req.SleepTime,
QuitDateProvided: quitDateProvided,
QuitDate: quitDate,
BaselineCigsPerDay: req.BaselineCigsPerDay,
SmokingYears: req.SmokingYears,
PackPriceCent: req.PackPriceCent,
Mode: req.Mode,
SmokeMotivations: req.SmokeMotivations,
QuitMotivations: req.QuitMotivations,
WakeUpTime: req.WakeUpTime,
SleepTime: req.SleepTime,
QuitDateProvided: quitDateProvided,
QuitDate: quitDate,
AchievementThemeIDProvided: achievementThemeIDProvided,
AchievementThemeID: req.AchievementThemeID,
})
if err != nil {
if errors.Is(err, smokeservice.ErrSmokeProfileInvalidTime) {