Skip to content

Commit d3086f0

Browse files
authored
reusable user ticket addon status constants (#300)
1 parent b5f88da commit d3086f0

18 files changed

Lines changed: 208 additions & 428 deletions

File tree

src/datasources/db/userTickets.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ export type UserTicketApprovalStatus =
3131

3232
export const userTicketsRedemptionStatusEnum = ["redeemed", "pending"] as const;
3333

34+
export type UserTicketRedemptionStatus =
35+
(typeof userTicketsRedemptionStatusEnum)[number];
36+
3437
// USER-TICKETS-TABLE
3538
export const userTicketsSchema = pgTable(
3639
"user_tickets",

src/generated/schema.gql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ type Mutation {
431431
cancelUserTicket(userTicketId: String!): UserTicket!
432432

433433
"""
434-
Cancel addons for multiple user tickets
434+
Cancel multiple user ticket addons
435435
"""
436436
cancelUserTicketAddons(
437437
"""

src/generated/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ export type Mutation = {
416416
approvalUserTicket: UserTicket;
417417
/** Cancel a ticket */
418418
cancelUserTicket: UserTicket;
419-
/** Cancel addons for multiple user tickets */
419+
/** Cancel multiple user ticket addons */
420420
cancelUserTicketAddons: Array<UserTicketAddon>;
421421
/** Check the status of a purchase order */
422422
checkPurchaseOrderStatus: PurchaseOrder;

src/schema/events/eventsFetcher.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import { SortableSchemaFields } from "~/datasources/helpers/sorting";
2626
import { eventStatus, eventVisibility } from "~/schema/events/types";
2727
import { sanitizeForLikeSearch } from "~/schema/shared/helpers";
2828

29+
import { ACCESSIBLE_USER_TICKET_APPROVAL_STATUSES } from "../userTickets/constants";
30+
2931
export type UserTicketSearch = {
3032
userId?: string;
3133
eventIds?: string[];
@@ -95,7 +97,10 @@ const getSearchEventsQuery = (
9597
.where(
9698
and(
9799
inArray(userTicketsSchema.ticketTemplateId, subquery),
98-
eq(userTicketsSchema.approvalStatus, "approved"),
100+
inArray(
101+
userTicketsSchema.approvalStatus,
102+
ACCESSIBLE_USER_TICKET_APPROVAL_STATUSES,
103+
),
99104
eq(userTicketsSchema.userId, userId),
100105
),
101106
),

src/schema/ticket/types.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { EventLoadable } from "~/schema/events/types";
33
import { PriceRef, TicketRef } from "~/schema/shared/refs";
44

55
import { AllowedCurrencyLoadable } from "../allowedCurrency/types";
6+
import { RESERVED_USER_TICKET_APPROVAL_STATUSES } from "../userTickets/constants";
67

78
export const TicketTemplateStatus = builder.enumType("TicketTemplateStatus", {
89
values: ["active", "inactive"] as const,
@@ -84,15 +85,10 @@ export const TicketLoadable = builder.loadableObject(TicketRef, {
8485
where: (ut, { eq, and, inArray }) =>
8586
and(
8687
eq(ut.ticketTemplateId, root.id),
87-
inArray(ut.approvalStatus, [
88-
"approved",
89-
"not_required",
90-
"pending",
91-
"gifted",
92-
"gift_accepted",
93-
"transfer_accepted",
94-
"transfer_pending",
95-
]),
88+
inArray(
89+
ut.approvalStatus,
90+
RESERVED_USER_TICKET_APPROVAL_STATUSES,
91+
),
9692
),
9793
});
9894

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { UserTicketAddonApprovalStatus } from "~/datasources/db/userTicketsAddons";
2+
3+
/**
4+
* This statuses are taken into account
5+
* when counting the number of available stick
6+
*/
7+
export const RESERVED_USER_TICKET_ADDON_APPROVAL_STATUSES: UserTicketAddonApprovalStatus[] =
8+
[
9+
UserTicketAddonApprovalStatus.APPROVED,
10+
UserTicketAddonApprovalStatus.PENDING,
11+
];

src/schema/ticketAddons/types.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
} from "~/datasources/db/userTicketsAddons";
1717
import { TicketRef, UserTicketRef, PriceRef } from "~/schema/shared/refs";
1818

19+
import { RESERVED_USER_TICKET_ADDON_APPROVAL_STATUSES } from "./constants";
1920
import { PurchaseOrderRef } from "../purchaseOrder/types";
2021

2122
export const AddonConstraintTypeEnum = builder.enumType(AddonConstraintType, {
@@ -87,10 +88,10 @@ builder.objectType(AddonRef, {
8788
where: (ut, ops) =>
8889
ops.and(
8990
ops.eq(ut.addonId, root.id),
90-
ops.inArray(ut.approvalStatus, [
91-
UserTicketAddonApprovalStatus.APPROVED,
92-
UserTicketAddonApprovalStatus.PENDING,
93-
]),
91+
ops.inArray(
92+
ut.approvalStatus,
93+
RESERVED_USER_TICKET_ADDON_APPROVAL_STATUSES,
94+
),
9495
),
9596
},
9697
);

src/schema/user/types.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { TeamRef } from "~/schema/teams/types";
1919
import { usersFetcher } from "~/schema/user/userFetcher";
2020
import { userTicketFetcher } from "~/schema/userTickets/userTicketFetcher";
2121

22+
import { ACCESSIBLE_USER_TICKET_APPROVAL_STATUSES } from "../userTickets/constants";
23+
2224
export const pronounsEnum = builder.enumType(PronounsEnum, {
2325
name: "PronounsEnum",
2426
});
@@ -132,14 +134,7 @@ export const UserLoadable = builder.loadableObject(UserRef, {
132134
userIds: [root.id],
133135
approvalStatus: ctx.USER?.isSuperAdmin
134136
? undefined
135-
: [
136-
"approved",
137-
"gifted",
138-
"gift_accepted",
139-
"not_required",
140-
"transfer_accepted",
141-
"transfer_pending",
142-
],
137+
: ACCESSIBLE_USER_TICKET_APPROVAL_STATUSES,
143138
},
144139
});
145140

src/schema/userTickets/mutations.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import {
1414
canCancelUserTicket,
1515
canRedeemUserTicket,
1616
} from "~/validations";
17+
1718
import "./mutations/claimUserTicket";
19+
import { REDEEMABLE_USER_TICKET_APPROVAL_STATUSES } from "./constants";
1820

1921
builder.mutationField("cancelUserTicket", (t) =>
2022
t.field({
@@ -159,12 +161,12 @@ builder.mutationField("redeemUserTicket", (t) =>
159161
throw new GraphQLError("Unauthorized!");
160162
}
161163

162-
if (ticket.approvalStatus === "cancelled") {
163-
throw new GraphQLError("No es posible redimir un ticket cancelado");
164-
}
165-
166-
if (ticket.approvalStatus === "rejected") {
167-
throw new GraphQLError("No es posible redimir un ticket rechazado");
164+
if (
165+
!REDEEMABLE_USER_TICKET_APPROVAL_STATUSES.includes(
166+
ticket.approvalStatus,
167+
)
168+
) {
169+
throw new GraphQLError("The ticket is not redeemable");
168170
}
169171

170172
if (ticket.redemptionStatus === "redeemed") {

src/schema/userTickets/mutations/claimUserTicket/index.ts

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import {
1111
userTicketTransfersSchema,
1212
userTicketsSchema,
1313
SelectUserTicketSchema,
14-
UserTicketApprovalStatus,
1514
AddonConstraintType,
1615
InsertUserTicketAddonClaimSchema,
1716
UserTicketAddonRedemptionStatus,
@@ -36,6 +35,7 @@ import {
3635
TicketClaimInput,
3736
TicketClaimInputType,
3837
} from "./refs";
38+
import { RESERVED_USER_TICKET_APPROVAL_STATUSES } from "../../constants";
3939
import { assertCanStartTicketClaimingForEvent } from "../../helpers";
4040

4141
// Types
@@ -518,16 +518,6 @@ async function verifyFinalUserTicketCounts(
518518
USER: NonNullable<Context["USER"]>,
519519
logger: Logger,
520520
) {
521-
const validApprovalStatuses: UserTicketApprovalStatus[] = [
522-
"approved",
523-
"pending",
524-
"not_required",
525-
"gifted",
526-
"gift_accepted",
527-
"transfer_pending",
528-
"transfer_accepted",
529-
];
530-
531521
// Bulk query for existing ticket counts
532522
const ticketCountsPromise = DB.query.userTicketsSchema
533523
.findMany({
@@ -537,7 +527,10 @@ async function verifyFinalUserTicketCounts(
537527
userTicketsSchema.ticketTemplateId,
538528
ticketInfo.tickets.map((t) => t.id),
539529
),
540-
ops.inArray(userTicketsSchema.approvalStatus, validApprovalStatuses),
530+
ops.inArray(
531+
userTicketsSchema.approvalStatus,
532+
RESERVED_USER_TICKET_APPROVAL_STATUSES,
533+
),
541534
);
542535
},
543536
columns: {

0 commit comments

Comments
 (0)