47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { db } from "@/lib/db/client"
|
|
import type { PhotoUpload } from "@/lib/db/types"
|
|
|
|
export async function getPhotoUploadByInvitationId(
|
|
invitationId: string,
|
|
): Promise<PhotoUpload | null> {
|
|
return (
|
|
(await db
|
|
.selectFrom("photo_uploads")
|
|
.selectAll()
|
|
.where("invitation_id", "=", invitationId)
|
|
.executeTakeFirst()) ?? null
|
|
)
|
|
}
|
|
|
|
export async function upsertPhotoUpload(input: {
|
|
invitationId: string
|
|
bucket: string
|
|
objectKey: string
|
|
originalFilename: string
|
|
contentType: string
|
|
sizeBytes: number
|
|
}) {
|
|
return db
|
|
.insertInto("photo_uploads")
|
|
.values({
|
|
invitation_id: input.invitationId,
|
|
bucket: input.bucket,
|
|
object_key: input.objectKey,
|
|
original_filename: input.originalFilename,
|
|
content_type: input.contentType,
|
|
size_bytes: input.sizeBytes,
|
|
})
|
|
.onConflict((oc) =>
|
|
oc.column("invitation_id").doUpdateSet({
|
|
bucket: input.bucket,
|
|
object_key: input.objectKey,
|
|
original_filename: input.originalFilename,
|
|
content_type: input.contentType,
|
|
size_bytes: input.sizeBytes,
|
|
updated_at: new Date(),
|
|
}),
|
|
)
|
|
.returningAll()
|
|
.executeTakeFirstOrThrow()
|
|
}
|