diff --git a/app/components/ui/FlagSvg.tsx b/app/components/ui/FlagSvg.tsx index d47b92b..59ad8a9 100644 --- a/app/components/ui/FlagSvg.tsx +++ b/app/components/ui/FlagSvg.tsx @@ -1,5 +1,4 @@ import { cn } from "~/lib/utils"; -import { getDisplayFlagConfig } from "~/lib/avatar-data"; import type { FlagConfig } from "~/lib/flag-types"; interface FlagSvgProps { @@ -10,12 +9,11 @@ interface FlagSvgProps { } function colorAt(colors: string[], index: number): string { - return colors[index % colors.length] ?? "#adf661"; + return colors[index % colors.length]!; } export function FlagSvg({ config, size = 48, className, title }: FlagSvgProps) { - const safeConfig = getDisplayFlagConfig(`${config.pattern}:${config.colors.join("-")}`, config); - const colors = safeConfig.colors; + const colors = config.colors; const c0 = colorAt(colors, 0); const c1 = colorAt(colors, 1); const c2 = colorAt(colors, 2); @@ -30,28 +28,28 @@ export function FlagSvg({ config, size = 48, className, title }: FlagSvgProps) { className={cn("block shrink-0 overflow-hidden", className)} > {title ? {title} : null} - {safeConfig.pattern === "triband-h" && ( + {config.pattern === "triband-h" && ( <> )} - {safeConfig.pattern === "triband-v" && ( + {config.pattern === "triband-v" && ( <> )} - {safeConfig.pattern === "diagonal" && ( + {config.pattern === "diagonal" && ( <> )} - {safeConfig.pattern === "nordic-cross" && ( + {config.pattern === "nordic-cross" && ( <> @@ -60,7 +58,7 @@ export function FlagSvg({ config, size = 48, className, title }: FlagSvgProps) { )} - {safeConfig.pattern === "cross" && ( + {config.pattern === "cross" && ( <> @@ -69,28 +67,28 @@ export function FlagSvg({ config, size = 48, className, title }: FlagSvgProps) { )} - {safeConfig.pattern === "canton" && ( + {config.pattern === "canton" && ( <> )} - {safeConfig.pattern === "triangle" && ( + {config.pattern === "triangle" && ( <> )} - {safeConfig.pattern === "chevron" && ( + {config.pattern === "chevron" && ( <> )} - {safeConfig.pattern === "quartered" && ( + {config.pattern === "quartered" && ( <> @@ -98,21 +96,21 @@ export function FlagSvg({ config, size = 48, className, title }: FlagSvgProps) { )} - {safeConfig.pattern === "bordered" && ( + {config.pattern === "bordered" && ( <> )} - {safeConfig.pattern === "circle" && ( + {config.pattern === "circle" && ( <> )} - {safeConfig.pattern === "star" && ( + {config.pattern === "star" && ( <> { + await db + .update(schema.users) + .set({ flagConfig: generateFlagConfig(user.id) }) + .where(eq(schema.users.id, user.id)); + }, + }, update: { before: async (data) => { const incomingImage = diff --git a/app/models/team.ts b/app/models/team.ts index 3e5cf0e..122f6e2 100644 --- a/app/models/team.ts +++ b/app/models/team.ts @@ -1,19 +1,28 @@ import { eq, and, isNull } from "drizzle-orm"; import { database } from "~/database/context"; import * as schema from "~/database/schema"; +import { generateFlagConfig } from "~/lib/flag-generator"; export type Team = typeof schema.teams.$inferSelect; export type NewTeam = typeof schema.teams.$inferInsert; export async function createTeam(data: NewTeam): Promise { const db = database(); - const [team] = await db.insert(schema.teams).values(data).returning(); + const id = data.id ?? crypto.randomUUID(); + const [team] = await db + .insert(schema.teams) + .values({ ...data, id, flagConfig: data.flagConfig ?? generateFlagConfig(id) }) + .returning(); return team; } export async function createManyTeams(teams: NewTeam[]): Promise { const db = database(); - return await db.insert(schema.teams).values(teams).returning(); + const withFlags = teams.map((team) => { + const id = team.id ?? crypto.randomUUID(); + return { ...team, id, flagConfig: team.flagConfig ?? generateFlagConfig(id) }; + }); + return await db.insert(schema.teams).values(withFlags).returning(); } export async function findTeamById(id: string): Promise { diff --git a/app/models/user.ts b/app/models/user.ts index 238c593..81d616f 100644 --- a/app/models/user.ts +++ b/app/models/user.ts @@ -1,6 +1,7 @@ import { eq, inArray, and } from "drizzle-orm"; import { database } from "~/database/context"; import * as schema from "~/database/schema"; +import { generateFlagConfig } from "~/lib/flag-generator"; export type User = typeof schema.users.$inferSelect; export type NewUser = typeof schema.users.$inferInsert; @@ -13,7 +14,11 @@ export function getUserDisplayName( export async function createUser(data: NewUser): Promise { const db = database(); - const [user] = await db.insert(schema.users).values(data).returning(); + const id = data.id ?? crypto.randomUUID(); + const [user] = await db + .insert(schema.users) + .values({ ...data, id, flagConfig: data.flagConfig ?? generateFlagConfig(id) }) + .returning(); return user; }