Implement basic verifications API endpoints
This commit is contained in:
@@ -1,10 +1,26 @@
|
||||
import { Activity, type ActivityVideoUrls } from "@blade-and-brawn/domain";
|
||||
import { Activity, type ActivityVerifications, type ActivityVideoUrls } from "@blade-and-brawn/domain";
|
||||
import type { Static } from "@sinclair/typebox";
|
||||
import { t } from "elysia";
|
||||
import { db } from "../database/db";
|
||||
|
||||
export type VerificationStatus = "request" | "in_review" | "action_required" | "completed";
|
||||
export const VerificationStatusSchema = t.Union([
|
||||
t.Literal("request"),
|
||||
t.Literal("in_review"),
|
||||
t.Literal("action_requested"),
|
||||
t.Literal("completed"),
|
||||
]);
|
||||
export type VerificationStatus = Static<typeof VerificationStatusSchema>;
|
||||
|
||||
export class VerificationsService {
|
||||
async request(assessmentId: string, activityVideoUrls: ActivityVideoUrls) {
|
||||
async request(assessmentId: string, accountId: string, activityVideoUrls: ActivityVideoUrls) {
|
||||
// Only the owning account may request verification of their own assessment.
|
||||
const assessment = await db.selectFrom("assessments")
|
||||
.select("id")
|
||||
.where("id", "=", assessmentId)
|
||||
.where("account_id", "=", accountId)
|
||||
.executeTakeFirst();
|
||||
if (!assessment) return undefined;
|
||||
|
||||
return await db.insertInto("verifications")
|
||||
.values({
|
||||
assessment_id: assessmentId,
|
||||
@@ -58,4 +74,39 @@ export class VerificationsService {
|
||||
.$if(opt.offset !== undefined, (qb) => qb.offset(opt.offset!))
|
||||
.execute();
|
||||
}
|
||||
|
||||
async requestAction(id: string, reviewerNotes: string | null, activityVerifications: ActivityVerifications) {
|
||||
const result = await db.updateTable("verifications")
|
||||
.where("id", "=", id)
|
||||
.set({
|
||||
status: "action_requested" satisfies VerificationStatus,
|
||||
reviewer_notes: reviewerNotes,
|
||||
verf_back_squat: activityVerifications[Activity.BackSquat] ?? null,
|
||||
verf_deadlift: activityVerifications[Activity.Deadlift] ?? null,
|
||||
verf_bench_press: activityVerifications[Activity.BenchPress] ?? null,
|
||||
verf_broad_jump: activityVerifications[Activity.BroadJump] ?? null,
|
||||
verf_run: activityVerifications[Activity.Run] ?? null,
|
||||
verf_cone_drill: activityVerifications[Activity.ConeDrill] ?? null,
|
||||
})
|
||||
.executeTakeFirst();
|
||||
return result.numUpdatedRows > 0n;
|
||||
}
|
||||
|
||||
async complete(id: string, completedBy: string, activityVerifications: ActivityVerifications) {
|
||||
const result = await db.updateTable("verifications")
|
||||
.where("id", "=", id)
|
||||
.set({
|
||||
status: "completed" satisfies VerificationStatus,
|
||||
completed_at: new Date(),
|
||||
completed_by: completedBy,
|
||||
verf_back_squat: activityVerifications[Activity.BackSquat] ?? null,
|
||||
verf_deadlift: activityVerifications[Activity.Deadlift] ?? null,
|
||||
verf_bench_press: activityVerifications[Activity.BenchPress] ?? null,
|
||||
verf_broad_jump: activityVerifications[Activity.BroadJump] ?? null,
|
||||
verf_run: activityVerifications[Activity.Run] ?? null,
|
||||
verf_cone_drill: activityVerifications[Activity.ConeDrill] ?? null,
|
||||
})
|
||||
.executeTakeFirst();
|
||||
return result.numUpdatedRows > 0n;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user