Skip to content

Commit 7ab9e8b

Browse files
authored
Mutation to approve gifted tickets (#200)
1 parent 6e2fffe commit 7ab9e8b

4 files changed

Lines changed: 47 additions & 0 deletions

File tree

src/datasources/db/userTickets.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { createdAndUpdatedAtFields } from "./shared";
1313
export const userTicketsApprovalStatusEnum = [
1414
"approved",
1515
"pending",
16+
"gifted",
1617
"not_required",
1718
"rejected",
1819
"cancelled",

src/generated/schema.gql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,7 @@ type Ticket {
793793
enum TicketApprovalStatus {
794794
approved
795795
cancelled
796+
gifted
796797
not_required
797798
pending
798799
rejected

src/generated/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,7 @@ export type Ticket = {
814814
export enum TicketApprovalStatus {
815815
Approved = "approved",
816816
Cancelled = "cancelled",
817+
Gifted = "gifted",
817818
NotRequired = "not_required",
818819
Pending = "pending",
819820
Rejected = "rejected",

src/schema/userTickets/mutations.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,3 +532,47 @@ builder.mutationFields((t) => ({
532532
},
533533
}),
534534
}));
535+
536+
builder.mutationField("acceptGiftedTicket", (t) =>
537+
t.field({
538+
type: UserTicketRef,
539+
args: {
540+
userTicketId: t.arg.string({
541+
required: true,
542+
}),
543+
},
544+
authz: {
545+
rules: ["IsAuthenticated"],
546+
},
547+
resolve: async (root, { userTicketId }, { DB, USER }) => {
548+
if (!USER) {
549+
throw new GraphQLError("User not found");
550+
}
551+
552+
// find the ticket for the user
553+
const ticket = await DB.query.userTicketsSchema.findFirst({
554+
where: (t, { eq, and }) =>
555+
and(
556+
eq(t.id, userTicketId),
557+
eq(t.approvalStatus, "gifted"),
558+
eq(t.userId, USER.id),
559+
),
560+
});
561+
562+
if (!ticket) {
563+
throw new GraphQLError("Could not find ticket to accept");
564+
}
565+
566+
const updatedTicket = (
567+
await DB.update(userTicketsSchema)
568+
.set({
569+
approvalStatus: "approved",
570+
})
571+
.where(eq(userTicketsSchema.id, userTicketId))
572+
.returning()
573+
)?.[0];
574+
575+
return selectUserTicketsSchema.parse(updatedTicket);
576+
},
577+
}),
578+
);

0 commit comments

Comments
 (0)