- Endpoint: PUT /events/:eventId
- Request Body
- Ejemplo Request Body
- Success Response
- Endpoint: GET /events
- Success Response
- Paginación
- Endpoint: GET /events/:eventId
- Success Response
- Error Response
- Endpoint: DELETE /events/:eventId
- Success Response
- Error Response
- Schemas
Este endpoint permite crear un nuevo evento o modificar un evento existente identificado por :eventId.
Autenticación: Requerida. Solo el usuario creador del evento puede modificarlo.
Request Body: CreateEventSchema
El cuerpo de la petición debe ser un objeto JSON que cumpla con el schema CreateEventSchema:
export const CreateEventSchema = EventSchema.pick({
name: z.string(),
body: z.string().describe("markdown format"),
cover: z.string().url().optional(),
date: z.string().datetime(),
access: z.nativeEnum(Access).optional(),
});Donde:
name: (String, Requerido) Nombre del evento.body: (String, Requerido) Descripción del evento en formato Markdown.cover: (String, Opcional) URL de la imagen de portada del evento. Debe ser una URL válida.date: (String, Requerido) Fecha y hora del evento en formato ISO 8601 (e.g.,2024-01-20T10:00:00Z).access: (Enum, Opcional) Define el nivel de acceso al evento. Valores posibles:PUBLIC,PRIVATE. Si no se especifica, se asumePUBLIC. Ver Access Enum para más detalles.
{
"name": "Evento de Networking de ChelasJS",
"body": "**¡No te pierdas nuestro próximo evento de networking!**\n\nConocerás a otros miembros de la comunidad ChelasJS y podrás compartir tus experiencias y proyectos.",
"date": "2024-03-15T18:30:00Z",
"cover": "https://ejemplo.com/imagenes/cover-evento-networking.png",
"access": "PUBLIC"
}Código: 200 OK o 201 Created (si se crea un nuevo evento)
Body: EventSchema
Retorna un objeto JSON que cumple con el schema EventSchema representando el evento creado o modificado.
export const EventSchema = z.object({
eventId: z.string(),
name: z.string(),
body: z.string().describe("markdown format"),
cover: z.string().url().optional(),
date: z.string().datetime(),
access: z.nativeEnum(Access).optional(),
createdAt: z.string().datetime(),
createdBy: z.string(),
});Donde:
eventId: (String) Identificador único del evento.name: (String) Nombre del evento.body: (String) Descripción del evento en formato Markdown.cover: (String, Opcional) URL de la imagen de portada del evento.date: (String) Fecha y hora del evento en formato ISO 8601.access: (Enum, Opcional) Nivel de acceso al evento.createdAt: (String) Fecha y hora de creación del evento en formato ISO 8601.createdBy: (String) Identificador del usuario que creó el evento.
Ejemplo Success Response:
{
"eventId": "a1b2c3d4e5f6g7h8i9j0",
"name": "Evento de Networking de ChelasJS",
"body": "**¡No te pierdas nuestro próximo evento de networking!**\n\nConocerás a otros miembros de la comunidad ChelasJS y podrás compartir tus experiencias y proyectos.",
"date": "2024-03-15T18:30:00Z",
"cover": "https://ejemplo.com/imagenes/cover-evento-networking.png",
"access": "PUBLIC",
"createdAt": "2024-03-01T10:00:00Z",
"createdBy": "user123"
}Este endpoint permite listar todos los eventos disponibles.
Código: 200 OK
Body: Array<EventSchema>
Retorna un array de objetos JSON, donde cada objeto cumple con el schema EventSchema, representando una lista de eventos.
Ejemplo Success Response:
[
{
"eventId": "a1b2c3d4e5f6g7h8i9j0",
"name": "Evento de Networking de ChelasJS",
"body": "**¡No te pierdas nuestro próximo evento de networking!**\n\nConocerás a otros miembros de la comunidad ChelasJS y podrás compartir tus experiencias y proyectos.",
"date": "2024-03-15T18:30:00Z",
"cover": "https://ejemplo.com/imagenes/cover-evento-networking.png",
"access": "PUBLIC",
"createdAt": "2024-03-01T10:00:00Z",
"createdBy": "user123"
},
{
"eventId": "x9y8z7a6b5c4d3e2f1g0",
"name": "Workshop de Bun.js",
"body": "Aprende a utilizar Bun.js en este workshop práctico.",
"date": "2024-03-22T19:00:00Z",
"access": "PRIVATE",
"createdAt": "2024-03-05T14:00:00Z",
"createdBy": "user456"
}
]Este endpoint soporta paginación para manejar grandes cantidades de eventos. Los parámetros de paginación se pueden enviar en la query:
page: (Number, Opcional) Número de página a retornar. Por defecto es 1.limit: (Number, Opcional) Cantidad de eventos por página. Por defecto y máximo es 100.
Ejemplo de petición con paginación:
GET /events?page=2&limit=50
Este endpoint permite obtener la información detallada de un evento específico identificado por :eventId.
Código: 200 OK
Body: EventSchema
Retorna un objeto JSON que cumple con el schema EventSchema representando el evento solicitado.
Ejemplo Success Response:
{
"eventId": "a1b2c3d4e5f6g7h8i9j0",
"name": "Evento de Networking de ChelasJS",
"body": "**¡No te pierdas nuestro próximo evento de networking!**\n\nConocerás a otros miembros de la comunidad ChelasJS y podrás compartir tus experiencias y proyectos.",
"date": "2024-03-15T18:30:00Z",
"cover": "https://ejemplo.com/imagenes/cover-evento-networking.png",
"access": "PUBLIC",
"createdAt": "2024-03-01T10:00:00Z",
"createdBy": "user123"
}Código: 404 Not Found
Retornado si el evento con el eventId especificado no existe.
Ejemplo Error Response:
{
"statusCode": 404,
"message": "Evento no encontrado",
"error": "Not Found"
}Este endpoint permite eliminar un evento específico identificado por :eventId.
Autenticación: Requerida. Solo el usuario creador del evento puede eliminarlo.
Código: 204 No Content
Retornado si el evento fue eliminado exitosamente. No retorna body.
Código: 404 Not Found
Retornado si el evento con el eventId especificado no existe.
Ejemplo Error Response:
{
"statusCode": 404,
"message": "Evento no encontrado",
"error": "Not Found"
}Define los posibles niveles de acceso para un evento:
PUBLIC: El evento es visible y accesible para todos.PRIVATE: El evento es visible y accesible solo para usuarios autorizados (ej. miembros de la comunidad).
enum Access {
PUBLIC = "PUBLIC",
PRIVATE = "PRIVATE",
}export const EventSchema = z.object({
eventId: z.string(),
name: z.string(),
body: z.string().describe("markdown format"),
cover: z.string().url().optional(),
date: z.string().datetime(),
access: z.nativeEnum(Access).optional(),
createdAt: z.string().datetime(),
createdBy: z.string(),
});export const CreateEventSchema = EventSchema.pick({
name: z.string(),
body: z.string().describe("markdown format"),
cover: z.string().url().optional(),
date: z.string().datetime(),
access: z.nativeEnum(Access).optional(),
});