EventBuzz_Backend/src/services/conciergeIntentHandlers/registration.handler.js

42 lines
1.6 KiB
JavaScript

const Event = require('../../models/Event');
const { registrationHref } = require('../../utils/micrositeBuild');
const { generateConciergeResponse } = require('../conciergeCall2.service');
/**
* registration: cards-first. Return a registration link card built from the
* event's website/registration config. Falls back to Call 2 when no link can
* be resolved (e.g. process-only questions).
*/
module.exports = async function registrationHandler({ plan, bot, event, session, turnLog }) {
let ev = null;
try {
ev = await Event.findById(bot.event).select('website settings').lean();
} catch (err) {
console.warn('[concierge][registration] event load failed:', err?.message || err);
}
const website = ev?.website || {};
const url = ev ? registrationHref({ _id: bot.event, website }, website) : '';
const settings = ev?.settings || {};
const isClosed = settings.registrationOpen === false;
const deadline = settings.registrationDeadline
? new Date(settings.registrationDeadline).toISOString()
: null;
if (url) {
const cards = [
{
type: 'registration',
data: { url, label: isClosed ? 'Registration closed' : 'Register now', open: !isClosed, deadline },
},
];
const reply = isClosed
? `Registration is currently closed for ${event?.name || 'this event'}.`
: `You can register for ${event?.name || 'this event'} using the button below.`;
return { reply, cards, usedCall2: false };
}
const call2 = await generateConciergeResponse({ bot, event, session, plan, turnLog });
return { reply: call2.reply, usedCall2: true, usage: call2.usage, modelId: call2.modelId };
};