feat(marketing): user profile update, ad placement management, logo limits

- Add PUT /auth/profile endpoint for nickname and avatar updates
- Add ad_placements table and CRUD admin API for managing ad units
- Add GET /marketing/ad-config public API for mini-program to fetch ad config
- Reduce logo limit from 10 to 3 per user, add 2MB file size validation

Made-with: Cursor
This commit is contained in:
nepiedg
2026-04-04 04:02:06 +08:00
parent b4170b4863
commit 1c0aeb152a
11 changed files with 347 additions and 7 deletions
@@ -192,6 +192,31 @@ func (s *AuthService) DevLogin(ctx context.Context, miniProgramID uint) (*LoginR
}, nil
}
// UpdateProfile 更新用户昵称和头像。
func (s *AuthService) UpdateProfile(ctx context.Context, userID uint, nickname, avatarURL string) (*model.User, error) {
tx := s.db.WithContext(ctx)
var user model.User
if err := tx.First(&user, userID).Error; err != nil {
return nil, fmt.Errorf("find user: %w", err)
}
updates := map[string]interface{}{}
if nickname != "" {
updates["nick_name"] = nickname
user.NickName = nickname
}
if avatarURL != "" {
updates["avatar_url"] = avatarURL
user.AvatarURL = avatarURL
}
if len(updates) > 0 {
if err := tx.Model(&user).Updates(updates).Error; err != nil {
return nil, fmt.Errorf("update profile: %w", err)
}
}
return &user, nil
}
func (s *AuthService) getSmokeMode(ctx context.Context, uid int) (string, error) {
var profile smokemodel.SmokeUserProfile
err := s.db.WithContext(ctx).