TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1'use server';23import { revalidatePath } from 'next/cache';4import { eq } from '@/lib/db';5import { db, users } from '@/lib/db';6import { requireUser } from '@/lib/auth/session';7import type { ActionState } from '@/lib/auth/state';8import { storeUpload } from './uploads';910export async function uploadAvatarAction(_prev: ActionState, formData: FormData): Promise<ActionState> {11 const u = await requireUser('/account/settings');12 const file = formData.get('file');13 if (!(file instanceof File)) return { ok: false, error: 'Choose an image.' };14 const res = await storeUpload(u.id, 'avatar', file);15 if ('error' in res) return { ok: false, error: res.error };16 await db().update(users).set({ avatarUrl: res.url }).where(eq(users.id, u.id));17 revalidatePath('/account/settings');18 return { ok: true, message: 'Avatar updated.', data: { url: res.url } };19}20