feat(expiry): 完成 #25 用户设置接口实现

This commit is contained in:
root
2026-03-04 17:12:36 +08:00
parent 6bee50c170
commit cc16b342d7
5 changed files with 161 additions and 1 deletions
+49
View File
@@ -217,3 +217,52 @@ func (r *Repository) UpdateStatus(id, userID uint, status string) error {
}
return nil
}
// GetSettings 查询用户提醒设置。
func (r *Repository) GetSettings(userID uint) (*ExpiryUserSettings, error) {
var settings ExpiryUserSettings
err := r.db.Where("user_id = ?", userID).First(&settings).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, fmt.Errorf("find expiry settings: %w", err)
}
return &settings, nil
}
// UpdateSettings 更新用户提醒设置(不存在则创建)。
func (r *Repository) UpdateSettings(userID uint, remindDays []int) (*ExpiryUserSettings, error) {
settings, err := r.GetSettings(userID)
if err != nil {
return nil, err
}
if settings == nil {
settings = &ExpiryUserSettings{
UserID: userID,
RemindDays: copyIntSlice(remindDays),
}
if err := r.db.Create(settings).Error; err != nil {
return nil, fmt.Errorf("create expiry settings: %w", err)
}
return settings, nil
}
settings.RemindDays = copyIntSlice(remindDays)
if err := r.db.Model(&ExpiryUserSettings{}).
Where("user_id = ?", userID).
Update("remind_days", settings.RemindDays).Error; err != nil {
return nil, fmt.Errorf("update expiry settings: %w", err)
}
return settings, nil
}
func copyIntSlice(values []int) []int {
if len(values) == 0 {
return nil
}
copied := make([]int, len(values))
copy(copied, values)
return copied
}