refactor(series): extract loadPublicSeries helper
This commit is contained in:
parent
a2f881e805
commit
27e73e969a
6 changed files with 68 additions and 56 deletions
|
|
@ -1,6 +1,6 @@
|
|||
import Member from '../../models/member.js'
|
||||
import Series from '../../models/series.js'
|
||||
import { loadPublicEvent } from '../../utils/loadEvent.js'
|
||||
import { loadPublicSeries } from '../../utils/loadSeries.js'
|
||||
import { calculateTicketPrice, calculateSeriesTicketPrice, hasMemberAccess } from '../../utils/tickets.js'
|
||||
import { requireAuth, getOptionalMember, getPaymentBridgeMember } from '../../utils/auth.js'
|
||||
import { initializeHelcimPaySession } from '../../utils/helcim.js'
|
||||
|
|
@ -55,14 +55,7 @@ export default defineEventHandler(async (event) => {
|
|||
if (!seriesId) {
|
||||
throw createError({ statusCode: 400, statusMessage: 'metadata.seriesId is required for series_ticket' })
|
||||
}
|
||||
const isObjectId = /^[0-9a-fA-F]{24}$/.test(seriesId)
|
||||
const seriesQuery = isObjectId
|
||||
? { $or: [{ _id: seriesId }, { id: seriesId }, { slug: seriesId }] }
|
||||
: { $or: [{ id: seriesId }, { slug: seriesId }] }
|
||||
const series = await Series.findOne(seriesQuery)
|
||||
if (!series) {
|
||||
throw createError({ statusCode: 404, statusMessage: 'Series not found' })
|
||||
}
|
||||
const series = await loadPublicSeries(event, seriesId)
|
||||
const ticketInfo = calculateSeriesTicketPrice(series, accessMember)
|
||||
if (!ticketInfo) {
|
||||
throw createError({ statusCode: 403, statusMessage: 'No series passes available for your membership status' })
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import Event from "../../models/event.js";
|
||||
import Series from "../../models/series.js";
|
||||
import { loadPublicSeries } from "../../utils/loadSeries.js";
|
||||
import { connectDB } from "../../utils/mongoose.js";
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
|
|
@ -15,16 +15,14 @@ export default defineEventHandler(async (event) => {
|
|||
});
|
||||
}
|
||||
|
||||
// Try to fetch the Series model first for full ticketing info
|
||||
// Build query conditions based on whether id looks like ObjectId or string
|
||||
const isObjectId = /^[0-9a-fA-F]{24}$/.test(id);
|
||||
const seriesQuery = isObjectId
|
||||
? { $or: [{ _id: id }, { id: id }, { slug: id }] }
|
||||
: { $or: [{ id: id }, { slug: id }] };
|
||||
|
||||
const seriesModel = await Series.findOne(seriesQuery)
|
||||
.select("-registrations") // Don't expose registration details
|
||||
.lean();
|
||||
// Try to fetch the Series model first for full ticketing info.
|
||||
// Legacy series may exist only as event metadata (no Series doc), so we
|
||||
// fall through to the events-based path below when no Series doc matches.
|
||||
const seriesModel = await loadPublicSeries(event, id, {
|
||||
select: "-registrations", // Don't expose registration details
|
||||
lean: true,
|
||||
allowMissing: true,
|
||||
});
|
||||
|
||||
// Fetch all events in this series
|
||||
const events = await Event.find({
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import Series from "../../../../models/series.js";
|
||||
import Member from "../../../../models/member.js";
|
||||
import { loadPublicSeries } from "../../../../utils/loadSeries.js";
|
||||
import {
|
||||
calculateSeriesTicketPrice,
|
||||
checkSeriesTicketAvailability,
|
||||
|
|
@ -13,20 +13,7 @@ export default defineEventHandler(async (event) => {
|
|||
const email = query.email;
|
||||
|
||||
// Fetch series
|
||||
// Build query conditions based on whether seriesId looks like ObjectId or string
|
||||
const isObjectId = /^[0-9a-fA-F]{24}$/.test(seriesId);
|
||||
const seriesQuery = isObjectId
|
||||
? { $or: [{ _id: seriesId }, { id: seriesId }, { slug: seriesId }] }
|
||||
: { $or: [{ id: seriesId }, { slug: seriesId }] };
|
||||
|
||||
const series = await Series.findOne(seriesQuery);
|
||||
|
||||
if (!series) {
|
||||
throw createError({
|
||||
statusCode: 404,
|
||||
statusMessage: "Series not found",
|
||||
});
|
||||
}
|
||||
const series = await loadPublicSeries(event, seriesId);
|
||||
|
||||
// Check if tickets are enabled
|
||||
if (!series.tickets?.enabled) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Series from "../../../../models/series.js";
|
||||
import Event from "../../../../models/event.js";
|
||||
import Member from "../../../../models/member.js";
|
||||
import { loadPublicSeries } from "../../../../utils/loadSeries.js";
|
||||
import {
|
||||
validateSeriesTicketPurchase,
|
||||
calculateSeriesTicketPrice,
|
||||
|
|
@ -19,20 +19,7 @@ export default defineEventHandler(async (event) => {
|
|||
const { name, email, paymentId } = body;
|
||||
|
||||
// Fetch series
|
||||
// Build query conditions based on whether seriesId looks like ObjectId or string
|
||||
const isObjectId = /^[0-9a-fA-F]{24}$/.test(seriesId);
|
||||
const seriesQuery = isObjectId
|
||||
? { $or: [{ _id: seriesId }, { id: seriesId }, { slug: seriesId }] }
|
||||
: { $or: [{ id: seriesId }, { slug: seriesId }] };
|
||||
|
||||
const series = await Series.findOne(seriesQuery);
|
||||
|
||||
if (!series) {
|
||||
throw createError({
|
||||
statusCode: 404,
|
||||
statusMessage: "Series not found",
|
||||
});
|
||||
}
|
||||
const series = await loadPublicSeries(event, seriesId);
|
||||
|
||||
// Check membership — prefer JWT auth for accurate member pricing.
|
||||
// Only members with access (active or pending_payment) get member-tier
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue