Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Edfermachado/proyectoSistemas/llms.txt

Use this file to discover all available pages before exploring further.

Your UniEvents profile is the central dashboard for tracking every event you have registered for. From here you can view registration status, present QR-coded tickets at event entry, report payment details for paid events, and check in-app notifications about your registrations. This guide covers everything available on the /profile page.

Profile Page

Navigate to /profile (login required). The page redirects unauthenticated visitors to /login. Administrative roles are also redirected away: superadmin goes to /admin, and tenant_admin, event_manager, and access_control go to /faculty-admin. The profile header shows:
  • Avatar — a gradient circle with the first letter of your email username.
  • Username — derived from the part of your email before the @.
  • Email address — from your session.
  • Eventos Asistidos — total count of your registrations.
  • Miembro Desde — the year your account was created (from the users.createdAt column).
Below the header, a Mis Eventos grid lists every event you have registered for, ordered by most recent registration, each with date, time, venue, faculty name, and current status.
You can deep-link directly to a specific ticket by appending ?viewTicket={ticketToken} to the profile URL. When this parameter is present, a full-screen modal overlay opens automatically and displays the QR code for that token. Example: /profile?viewTicket=550e8400-e29b-41d4-a716-446655440000

Ticket QR Code

For registrations with status = 'confirmado', a Ver Entrada button appears on the event card. Clicking it opens the TicketQR component as a modal overlay. The QR code is rendered client-side using the qrcode.react library (QRCodeSVG component):
// src/components/TicketQR.tsx
<QRCodeSVG
  value={token}       // the ticketToken UUID from the attendees table
  size={240}
  level="H"           // high error-correction for scanning in low light
  includeMargin={false}
  fgColor="#1A365D"   // university-blue
/>
The value encoded into the QR is the ticketToken UUID stored in the attendees table. Event access-control staff scan this code at the venue entrance using the faculty-admin scan interface. Present the QR code on your phone’s screen at the event entry point. The scanner logs the scan timestamp in the scan_logs table.

Payment Status

Each registration card shows a status badge. The possible values map directly to the registration_status enum in the database:
StatusBadge LabelMeaning
registradoConfirmadoFree-event registration confirmed automatically at the service layer. The QR button is shown if a ticketToken is present.
pago_pendientePendientePaid-event registration with payment not yet verified by an admin. Shows payment action buttons.
confirmadoConfirmadoPayment verified by an admin (or free event). Ticket is valid and the QR code is accessible.
The profile page maps pago_pendiente to the display label “Pendiente”; all other statuses — including registrado and confirmado — are displayed as “Confirmado”. The Ver Entrada (QR) button is rendered only when the mapped status equals "Confirmado" and a ticketToken is present on the record.

Reporting Payment

If your registration is in pago_pendiente status and you have not yet submitted a payment reference, the event card shows a Reportar Pago button. Clicking it opens the ReportPaymentModal. The modal displays the faculty’s payment details (bank, phone, Cédula/RIF) and accepts:
FieldRequiredDescription
paymentReferenceYesThe last 4 digits of your transaction reference
screenshotNoAn image of your payment confirmation (JPEG, PNG, or WebP)
On submit, the modal POSTs to /api/payments with the attendeeId and the form data. After a successful response, the page re-fetches and the button is replaced with a “Pago en verificación” label — confirming the reference has been received. If you have already submitted a reference (hasSubmittedPayment = true), the card shows “Pago en verificación” with an hourglass icon instead of the report button — no further action is needed from you until the admin verifies.

Notifications

The GET /api/users/notifications endpoint returns a list of in-app notifications for the currently authenticated user, based on their registration statuses:
GET /api/users/notifications
Cookie: session=<jwt>
{
  "notifications": [
    {
      "id": "pending-<attendeeId>",
      "title": "Pago Pendiente",
      "message": "Tienes un pago pendiente para el evento \"Conferencia de Sistemas\".",
      "type": "warning",
      "link": "/profile",
      "createdAt": "2024-11-01T10:00:00.000Z"
    },
    {
      "id": "verifying-<attendeeId>",
      "title": "Pago en Verificación",
      "message": "El pago para \"Conferencia de Sistemas\" está siendo verificado.",
      "type": "info",
      "link": "/profile",
      "createdAt": "2024-11-02T14:30:00.000Z"
    },
    {
      "id": "confirmed-<attendeeId>",
      "title": "Entrada Confirmada",
      "message": "Tu entrada para \"Conferencia de Sistemas\" ha sido confirmada.",
      "type": "success",
      "link": "/profile?viewTicket=550e8400-e29b-41d4-a716-446655440000",
      "createdAt": "2024-11-03T09:15:00.000Z"
    }
  ]
}
The three notification types and the conditions that generate them:
typeTrigger condition
warningstatus = 'pago_pendiente' and paymentReference is null — payment not yet submitted
infostatus = 'pago_pendiente' and paymentReference is set — payment submitted, awaiting verification
successstatus = 'confirmado' and ticketToken is present — entry confirmed
Notifications are returned sorted by most recent first (by createdAt, or paymentVerifiedAt for confirmed tickets). An unauthenticated request returns { "notifications": [] } without an error.

Build docs developers (and LLMs) love