feat(expiry): 完成 #25 用户设置接口实现
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user