UserRepository
app/features/user-page/UserRepository.server.ts- Tables
- ArtArtUserMetadataBanLogBuildCalendarEventCalendarEventDateCalendarEventResultPlayerCalendarEventResultTeamModNotePlusTierTeamTeamMemberTeamMemberWithSecondaryTournamentTournamentDivisionTierTournamentResultTournamentTeamUnvalidatedUserSubmittedImageUserUserFriendCodeUserResultHighlightUserSearchUserSubmittedImageUserWeaponPoolUserWidgetVideoMatchVideoMatchPlayer
- Calls
- ArtRepositoryBadgeRepositoryBuildRepositoryFriendRepositoryLeaderboardRepositoryLFGRepositoryLiveStreamRepositoryMatchProfileRepositorySkillRepositoryTeamRepositoryXRankPlacementRepositoryTournamentOrganizationRepositoryTournamentTeamRepositoryTrophyRepositoryVodRepository
- Imports
- no other modules
- Used by
- 15 loaders18 actions7 routes2 modules3 routines3 scripts12 other
Types
export interface ResultsFilters { showHighlightsOnly?: boolean; tournamentName?: string; teamName?: string; mateUserId?: number; minTier?: TournamentTierNumber; maxTier?: TournamentTierNumber; maxPlacement?: number; fromYear?: number; toYear?: number; source?: ResultSource; minParticipantCount?: number; }
export type UpdatePatronDataArgs = Array< Pick<Tables["User"], "discordId" | "patronTier" | "patronStartedAt"> >;
Functions & values
export function findIdByIdentifier(identifier: string)
Identity of the user a /u/:identifier page is about, incl. what their canonical page URL needs.
export function findPageUserByIdentifier(identifier: string)
Country codes of the given users keyed by user id, users without a country set absent.
export async function findCountriesByUserIds(userIds: number[])
Discord ids of the given users keyed by user id. Not for public responses.
export async function findDiscordIdsByUserIds(userIds: number[])
Plus tiers of the given users keyed by user id, users without a tier absent.
export async function findPlusTiersByUserIds(userIds: number[])
export async function findBuildFieldsByUserId(userId: number)
export function findLayoutDataById(userId: number, loggedInUserId?: number)
export async function findProfileByUserId(userId: number)
export async function upsertWidgets( userId: number, widgets: Array<Tables["UserWidget"]["widget"]>, )
export async function findStoredWidgetsByUserId( userId: number, ): Promise<Array<Tables["UserWidget"]["widget"]>>
export async function findWidgetsByUserId( userId: number, ): Promise<LoadedWidget[]>
export function findByCustomUrl(customUrl: string)
export function findByFriendCode(friendCode: string)
export async function findUsernameById(id: number)
export async function findLeanById(id: number)
export function findModInfoById(id: number)
Patrons for the footer marquee, reshuffled each UTC day and slimmed to the fields the chip renders.
export async function findAllPatronsForFooter()
export function findAllPlusServerMembers()
export async function findResultsByUserId( userId: number, { limit, offset, ...filters }: ResultsFilters & { limit?: number; offset?: number; } = {}, )
export async function countResultsByUserId( userId: number, filters: ResultsFilters = {}, )
export async function hasHighlightedResultsByUserId(userId: number)
export async function findResultPlacementsByUserId(userId: number)
export async function search({ query, limit, }: { query: string; limit: number; })
export function searchExact(args: { id?: number; discordId?: string; customUrl?: string; })
export async function findCurrentFriendCodeByUserId(userId: number)
All friend codes a user has ever submitted.
export async function findFriendCodesByUserId(userId: number)
Drops the cached friend codes, for when the table was written to behind this module's back.
export function clearFriendCodesCache()
export async function findInGameNameByUserId(userId: number)
export async function findPatronStartedAtByUserId(userId: number)
Division and season of the last LUTI the user placed in, null when they never have.
export async function findDivByUserId(userId: number)
export async function findJoinOrderByUserId(userId: number)
export async function findCommissionsByUserId(userId: number)
Inserts or updates the user by Discord id. The avatar is stored separately via {@link replaceSyncedAvatar}.
export function upsert( args: Pick< TablesInsertable["User"], | "discordId" | "discordName" | "discordUniqueName" | "twitch" | "youtubeId" | "youtubeName" | "bsky" >, )
Points the user's synced avatar at a newly stored image file (null = no avatar) and deletes the previous image row. Returns the previous file name so its files can be deleted from storage.
export function replaceSyncedAvatar({ userId, discordAvatar, fileName, }: { userId: number; /** Hash of the Discord avatar the file was copied from. */ discordAvatar: string | null; fileName: string | null; })
Bulk-sets each user's latest LUTI division. Used by the ComputeLutiDivs routine.
export function updateManyDivs( updates: Array<{ userId: number; div: string; divSeason: number | null }>, )
export function updateOwnPreferences(newPreferences: UserPreferences)
export function updateOwnResultHighlights(args: UpdateResultHighlightsArgs)
export function updateOwnBuildSorting(buildSorting: BuildSort[] | null)
export function updatePatronData(users: UpdatePatronDataArgs)
export async function anyUserPrefersNoScreen( userIds: number[], ): Promise<boolean>
export async function findSocialLinksByUserId(userId: number)
Users whose connected Twitch login or YouTube channel id is among the given ones.
export function findIdsByStreamAccounts({ twitchNames, youtubeIds, }: { twitchNames: string[]; youtubeIds: string[]; })