Files
2026-09-21 16:44:09 +08:00

28 lines
1.3 KiB
Go

package creator
import "context"
func (s *Store) UpsertCompetitor(ctx context.Context, input CompetitorInput) (Competitor, error) {
input, err := normalizeCompetitorInput(input)
if err != nil {
return Competitor{}, err
}
id := newID("competitor")
var returnedID string
if err := s.db.QueryRowContext(ctx, `
INSERT INTO creator_competitor (id, platform, platform_account_key, unique_id, nickname, avatar_url, homepage_url, tags, next_sync_at)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, now())
ON CONFLICT (platform, platform_account_key) DO UPDATE SET
unique_id = CASE WHEN EXCLUDED.unique_id = '' THEN creator_competitor.unique_id ELSE EXCLUDED.unique_id END,
nickname = CASE WHEN EXCLUDED.nickname = '' THEN creator_competitor.nickname ELSE EXCLUDED.nickname END,
avatar_url = CASE WHEN EXCLUDED.avatar_url = '' THEN creator_competitor.avatar_url ELSE EXCLUDED.avatar_url END,
homepage_url = EXCLUDED.homepage_url,
tags = CASE WHEN cardinality(EXCLUDED.tags) = 0 THEN creator_competitor.tags ELSE EXCLUDED.tags END,
updated_at = now()
RETURNING id`, id, input.Platform, input.PlatformAccountKey, input.UniqueID, input.Nickname,
input.AvatarURL, input.HomepageURL, input.Tags).Scan(&returnedID); err != nil {
return Competitor{}, databaseError(err)
}
return s.GetCompetitor(ctx, returnedID)
}