Pagos
Endpoints para gestionar pagos.
Modelos de Datos
Section titled “Modelos de Datos”Los siguientes modelos de Prisma pertenecen al schema payments:
Payment
Section titled “Payment”model Payment { id String @id @default(cuid()) userProfileId String @map("user_profile_id") amount Float method PaymentMethod status PaymentStatus @default(PENDING) description String? transactionId String? @map("transaction_id")
userProfile UserProfile @relation(fields: [userProfileId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at")
@@map("payments") @@schema("payments")}PaymentStatus (Enum)
Section titled “PaymentStatus (Enum)”enum PaymentStatus { PENDING COMPLETED FAILED REFUNDED
@@schema("payments")}PaymentMethod (Enum)
Section titled “PaymentMethod (Enum)”enum PaymentMethod { CASH CREDIT_CARD DEBIT_CARD BANK_TRANSFER PAYPAL
@@schema("payments")}Endpoints
Section titled “Endpoints”Obtener Pagos
Section titled “Obtener Pagos”Obtener todos los pagos (Admin/Staff ven todos, Members ven los propios).
- URL:
/api/v1/payments - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene pagos con filtrado:
-
Filtros disponibles:
userProfileId: Filtrar por usuario (Automático para Members)status: Estado (PENDING, COMPLETED, FAILED, REFUNDED)method: Método de pago (CASH, CREDIT_CARD, etc.)minAmount/maxAmount: Rango de montosstartDate/endDate: Rango de fechas de creación
-
Permisos:
- Members: Solo ven sus propios pagos (se fuerza
userProfileId=payload.pid) - Admin/Staff: Pueden ver pagos de cualquiera
- Members: Solo ven sus propios pagos (se fuerza
-
Incluye userProfile con nombre y email
-
Paginación estándar
Parámetros de Consulta de Solicitud
Section titled “Parámetros de Consulta de Solicitud”status: Filtrar por statusmethod: Filtrar por métodouserProfileId: Filtrar por usuariostartDate: Filtrar desde fecha (ISO)endDate: Filtrar hasta fecha (ISO)minAmount: Monto mínimomaxAmount: Monto máximopage: Número de páginalimit: Resultados por página
Ejemplo de Cliente Hono
Section titled “Ejemplo de Cliente Hono”import { hcWithType } from '@vitality-gym/api/client'
const client = hcWithType('http://localhost:3000')
const res = await client.api.v1.payments.$get({ query: { status: 'COMPLETED' }})Obtener Detalles de Pago
Section titled “Obtener Detalles de Pago”Obtener pago específico por ID.
- URL:
/api/v1/payments/:id - Método:
GET - Autenticación Requerida: Sí
Descripción Interna
Section titled “Descripción Interna”Este endpoint obtiene un pago por su ID.
-
Permisos:
- Members: Solo pueden ver el pago si
userProfileIdcoincide con su perfil - Admin/Staff: Pueden ver cualquier pago
- Members: Solo pueden ver el pago si
-
Incluye información del usuario asociado.
Respuesta
Section titled “Respuesta”{ "data": { "id": "...", "userProfileId": "...", "amount": 50, "method": "CREDIT_CARD", "status": "COMPLETED", "description": "Mensualidad", "createdAt": "2023-10-01T00:00:00Z" }}Crear Pago (Admin/Staff)
Section titled “Crear Pago (Admin/Staff)”Crear un nuevo registro de pago.
- URL:
/api/v1/payments - Método:
POST - Autenticación Requerida: Sí Admin Staff
Descripción Interna
Section titled “Descripción Interna”Este endpoint registra un nuevo pago manualmente.
-
Validación:
- Verifica que el
userProfileIdexista. - Monto debe ser positivo.
- Verifica que el
-
Creación:
- Crea el registro en la tabla
payments. - Estado por defecto:
PENDINGsi no se especifica.
- Crea el registro en la tabla
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "userProfileId": "user_id", "amount": 50, "method": "CASH", "status": "COMPLETED", "description": "Pago en efectivo membresía mensual"}Ejemplo de Cliente Hono
Section titled “Ejemplo de Cliente Hono”import { hcWithType } from '@vitality-gym/api/client'
const client = hcWithType('http://localhost:3000')
const res = await client.api.v1.payments.$post({ json: { userProfileId: 'user_id', amount: 50, method: 'CASH', status: 'COMPLETED', description: 'Pago mensualidad' }})Actualizar Pago (Admin/Staff)
Section titled “Actualizar Pago (Admin/Staff)”Actualizar un pago existente.
- URL:
/api/v1/payments/:id - Método:
PATCH - Autenticación Requerida: Sí Admin Staff
Descripción Interna
Section titled “Descripción Interna”Este endpoint actualiza un pago existente.
- Campos actualizables:
status: Cambiar estado (e.g. PENDING -> COMPLETED)description: Actualizar descripcióntransactionId: Añadir ID de transacción externa
Cuerpo de Solicitud
Section titled “Cuerpo de Solicitud”{ "status": "REFUNDED", "description": "Reembolso por error"}Eliminar Pago (Admin)
Section titled “Eliminar Pago (Admin)”Eliminar un registro de pago.
- URL:
/api/v1/payments/:id - Método:
DELETE - Autenticación Requerida: Sí Admin
Descripción Interna
Section titled “Descripción Interna”Elimina físicamente un registro de pago.
- Permisos: Admin