refactor(events): gate member benefits on hasMemberAccess
Extracts hasMemberAccess(member) in tickets.js and uses it across event registration, ticket purchase, and series purchase flows so guest, suspended, and cancelled records no longer count as members while pending_payment still does.
This commit is contained in:
parent
c5e901ed24
commit
15329e3e84
7 changed files with 188 additions and 30 deletions
|
|
@ -8,6 +8,7 @@ import {
|
|||
releaseSeriesTicket,
|
||||
completeSeriesTicketPurchase,
|
||||
registerForAllSeriesEvents,
|
||||
hasMemberAccess,
|
||||
} from "../../../../utils/tickets.js";
|
||||
import { sendSeriesPassConfirmation } from "../../../../utils/resend.js";
|
||||
|
||||
|
|
@ -33,7 +34,9 @@ export default defineEventHandler(async (event) => {
|
|||
});
|
||||
}
|
||||
|
||||
// Check membership — prefer JWT auth for accurate member pricing
|
||||
// Check membership — prefer JWT auth for accurate member pricing.
|
||||
// Only members with access (active or pending_payment) get member-tier
|
||||
// pricing; guest, suspended, and cancelled are treated as non-members.
|
||||
let member = null;
|
||||
try {
|
||||
member = await requireAuth(event);
|
||||
|
|
@ -46,12 +49,13 @@ export default defineEventHandler(async (event) => {
|
|||
|
||||
// Resolve canonical email: use authenticated member's email if available
|
||||
const canonicalEmail = member ? member.email : email.toLowerCase();
|
||||
const accessMember = hasMemberAccess(member) ? member : null;
|
||||
|
||||
// Validate purchase
|
||||
const validation = validateSeriesTicketPurchase(series, {
|
||||
email: canonicalEmail,
|
||||
name,
|
||||
member,
|
||||
member: accessMember,
|
||||
});
|
||||
|
||||
if (!validation.valid) {
|
||||
|
|
@ -84,8 +88,8 @@ export default defineEventHandler(async (event) => {
|
|||
memberId: member?._id,
|
||||
name,
|
||||
email: canonicalEmail,
|
||||
membershipLevel: member?.circle || "non-member",
|
||||
isMember: !!member,
|
||||
membershipLevel: accessMember?.circle || "non-member",
|
||||
isMember: !!accessMember,
|
||||
ticketType: ticketInfo.ticketType,
|
||||
ticketPrice: ticketInfo.price,
|
||||
paymentStatus: ticketInfo.isFree ? "not_required" : "completed",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue