Basic setup for R2 verification presigning
This commit is contained in:
@@ -14,8 +14,6 @@ export const VerificationStatusSchema = t.Union([
|
||||
]);
|
||||
export type VerificationStatus = Static<typeof VerificationStatusSchema>;
|
||||
|
||||
const REQUIRED_MEDIA_ACTIVITIES = Object.values(Activity);
|
||||
|
||||
const MEDIA_KEY_COLUMN = {
|
||||
[Activity.BackSquat]: "media_key_back_squat",
|
||||
[Activity.Deadlift]: "media_key_deadlift",
|
||||
@@ -33,21 +31,24 @@ const ALLOWED_FROM = {
|
||||
} satisfies Record<string, VerificationStatus[]>;
|
||||
|
||||
export class VerificationsService {
|
||||
static readonly REQUIRED_MEDIA_ACTIVITIES = Object.values(Activity);
|
||||
static readonly ALLOWED_MEDIA_RE = /^(video\/(mp4|quicktime|webm)|image\/(png|jpeg))$/;
|
||||
|
||||
static missingActivityMediaKeys(verification: Pick<Selectable<DB["verifications"]>, (typeof MEDIA_KEY_COLUMN)[Activity]>) {
|
||||
return REQUIRED_MEDIA_ACTIVITIES.filter((activity) => !verification[MEDIA_KEY_COLUMN[activity]]);
|
||||
return VerificationsService.REQUIRED_MEDIA_ACTIVITIES.filter((activity) => !verification[MEDIA_KEY_COLUMN[activity]]);
|
||||
}
|
||||
|
||||
async create(assessmentId: string, activityMediaKeys: ActivityMediaKeys) {
|
||||
async create(assessmentId: string, activityMediaKeys?: ActivityMediaKeys) {
|
||||
return await db.insertInto("verifications")
|
||||
.values({
|
||||
assessment_id: assessmentId,
|
||||
status: "draft" satisfies VerificationStatus,
|
||||
media_key_back_squat: activityMediaKeys[Activity.BackSquat] ?? null,
|
||||
media_key_deadlift: activityMediaKeys[Activity.Deadlift] ?? null,
|
||||
media_key_bench_press: activityMediaKeys[Activity.BenchPress] ?? null,
|
||||
media_key_broad_jump: activityMediaKeys[Activity.BroadJump] ?? null,
|
||||
media_key_run: activityMediaKeys[Activity.Run] ?? null,
|
||||
media_key_cone_drill: activityMediaKeys[Activity.ConeDrill] ?? null,
|
||||
media_key_back_squat: activityMediaKeys?.[Activity.BackSquat] ?? null,
|
||||
media_key_deadlift: activityMediaKeys?.[Activity.Deadlift] ?? null,
|
||||
media_key_bench_press: activityMediaKeys?.[Activity.BenchPress] ?? null,
|
||||
media_key_broad_jump: activityMediaKeys?.[Activity.BroadJump] ?? null,
|
||||
media_key_run: activityMediaKeys?.[Activity.Run] ?? null,
|
||||
media_key_cone_drill: activityMediaKeys?.[Activity.ConeDrill] ?? null,
|
||||
})
|
||||
.onConflict((oc) => oc.column("assessment_id").doNothing())
|
||||
.returning(["id", "status"])
|
||||
@@ -109,7 +110,7 @@ export class VerificationsService {
|
||||
.where("id", "=", id)
|
||||
.where("status", "in", ALLOWED_FROM.submit)
|
||||
.where((eb) => eb.and(
|
||||
REQUIRED_MEDIA_ACTIVITIES.map((activity) => eb(MEDIA_KEY_COLUMN[activity], "is not", null))
|
||||
VerificationsService.REQUIRED_MEDIA_ACTIVITIES.map((activity) => eb(MEDIA_KEY_COLUMN[activity], "is not", null))
|
||||
))
|
||||
.set({ status: "submitted" satisfies VerificationStatus, submitted_at: new Date() })
|
||||
.returning(["id", "status"])
|
||||
|
||||
Reference in New Issue
Block a user