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) }