Added Sign In with Apple

This commit is contained in:
George Powell
2026-02-13 00:57:44 -05:00
parent a12c7d011a
commit ac6ec051d4
14 changed files with 658 additions and 48 deletions

View File

@@ -101,6 +101,7 @@ export async function createUser(anonymousId: string, email: string, passwordHas
id: anonymousId, // Use anonymousId as the user ID to preserve stats
email,
passwordHash,
appleId: null,
firstName: firstName || null,
lastName: lastName || null,
isPrivate: false
@@ -113,3 +114,48 @@ export async function getUserByEmail(email: string) {
const [user] = await db.select().from(table.user).where(eq(table.user.email, email));
return user || null;
}
export async function getUserByAppleId(appleId: string) {
const [user] = await db.select().from(table.user).where(eq(table.user.appleId, appleId));
return user || null;
}
export async function migrateAnonymousStats(anonymousId: string | undefined, userId: string) {
if (!anonymousId || anonymousId === userId) return;
try {
const { dailyCompletions } = await import('$lib/server/db/schema');
const anonCompletions = await db
.select()
.from(dailyCompletions)
.where(eq(dailyCompletions.anonymousId, anonymousId));
const userCompletions = await db
.select()
.from(dailyCompletions)
.where(eq(dailyCompletions.anonymousId, userId));
const userDates = new Set(userCompletions.map((c) => c.date));
let migrated = 0;
let skipped = 0;
for (const completion of anonCompletions) {
if (!userDates.has(completion.date)) {
await db
.update(dailyCompletions)
.set({ anonymousId: userId })
.where(eq(dailyCompletions.id, completion.id));
migrated++;
} else {
await db.delete(dailyCompletions).where(eq(dailyCompletions.id, completion.id));
skipped++;
}
}
console.log(`Migration complete: ${migrated} moved, ${skipped} duplicates removed`);
} catch (error) {
console.error('Error migrating anonymous stats:', error);
}
}