feat: save the date tracking
This commit is contained in:
@@ -16,6 +16,7 @@ export interface InvitationListItem {
|
||||
contactPhone: string | null
|
||||
maxPartySize: number
|
||||
allowMemberEdits: boolean
|
||||
saveTheDateSentAt: Date | null
|
||||
membersCount: number
|
||||
attendingCount: number
|
||||
pendingCount: number
|
||||
@@ -138,6 +139,58 @@ export async function deleteInvitationGroup(
|
||||
})
|
||||
}
|
||||
|
||||
export async function updateSaveTheDateSent({
|
||||
invitationId,
|
||||
sent,
|
||||
adminEmail,
|
||||
}: {
|
||||
invitationId: string
|
||||
sent: boolean
|
||||
adminEmail: string
|
||||
}) {
|
||||
return db.transaction().execute(async (trx) => {
|
||||
const invitation = await trx
|
||||
.selectFrom("invitations")
|
||||
.select(["id", "display_name", "save_the_date_sent_at"])
|
||||
.where("id", "=", invitationId)
|
||||
.executeTakeFirst()
|
||||
|
||||
if (!invitation) return null
|
||||
|
||||
const previousSent = invitation.save_the_date_sent_at !== null
|
||||
const saveTheDateSentAt = sent ? new Date() : null
|
||||
|
||||
const updated = await trx
|
||||
.updateTable("invitations")
|
||||
.set({
|
||||
save_the_date_sent_at: saveTheDateSentAt,
|
||||
updated_at: new Date(),
|
||||
})
|
||||
.where("id", "=", invitationId)
|
||||
.returning(["id", "save_the_date_sent_at"])
|
||||
.executeTakeFirst()
|
||||
|
||||
if (!updated) return null
|
||||
|
||||
await trx
|
||||
.insertInto("admin_audit_events")
|
||||
.values({
|
||||
admin_email: adminEmail,
|
||||
action: sent ? "save_the_date.marked_sent" : "save_the_date.marked_unsent",
|
||||
target_type: "invitation",
|
||||
target_id: invitationId,
|
||||
metadata: {
|
||||
displayName: invitation.display_name,
|
||||
previousSent,
|
||||
newSent: sent,
|
||||
},
|
||||
})
|
||||
.execute()
|
||||
|
||||
return updated
|
||||
})
|
||||
}
|
||||
|
||||
export async function listInvitations(): Promise<InvitationListItem[]> {
|
||||
const invitations = await db
|
||||
.selectFrom("invitations")
|
||||
@@ -179,6 +232,7 @@ export async function listInvitations(): Promise<InvitationListItem[]> {
|
||||
contactPhone: invitation.contact_phone,
|
||||
maxPartySize: invitation.max_party_size,
|
||||
allowMemberEdits: invitation.allow_member_edits,
|
||||
saveTheDateSentAt: invitation.save_the_date_sent_at,
|
||||
membersCount: invitationMembers.length,
|
||||
attendingCount: invitationMembers.filter((member) => member.attending === true).length,
|
||||
pendingCount: invitationMembers.filter((member) => member.attending === null).length,
|
||||
|
||||
Reference in New Issue
Block a user