2024-08-03 15:19:39 +00:00
const { isAPIKeyUser } = require ( "../../middlewares/accessValidator" ) ;
const routes = require ( "express" ) . Router ( ) ;
const SchemaValidator = require ( "../../middlewares/schemaValidator" ) ;
const FieldMiddleware = require ( "../../middlewares/fields" ) ;
const authController = require ( "../auth/auth.controller" ) ;
const eventController = require ( "./event.controller" ) ;
const eventInscriptionController = require ( "./events_inscriptions.controller" ) ;
const eventReservationController = require ( "./events_reservations.controller" ) ;
const eventValidation = require ( "./event.validations" ) ;
const { cacheSuccesses } = require ( "../../middlewares/cache" ) ;
const SortMiddleware = require ( "../../middlewares/sort" ) ;
const entityController = require ( "../entities/entity.controller" ) ;
const generalInvalidFields = [
"userId" ,
"createdAt" ,
"updatedAt" ,
"assistants" ,
"confirmed" ,
"allow_multiple" ,
"overflow_eventId" ,
"state" ,
"confirmed" ,
"multiple_limit" ,
"marketing_list" ,
"state" ,
"contact_person" ,
"contact_email" ,
"createdAt" ,
"updatedAt" ,
2024-08-28 17:12:09 +00:00
"gmt" ,
"url_streaming" ,
"url_poll" ,
"url_registration" ,
"featured" ,
"virtual" ,
"allow_questions" ,
2024-08-28 17:20:00 +00:00
"assistanceType" ,
"assistanceTypeText" ,
"sold_out" ,
"allow_overflow" ,
"typeId" ,
"venueId" ,
"locationId" ,
2024-08-03 15:19:39 +00:00
] ;
2024-08-28 17:20:00 +00:00
const eventDetailsFields = [
"id" ,
"name" ,
"description" ,
"stateCode" ,
2024-08-28 17:29:28 +00:00
"stateText" ,
"campaign_text" ,
"init_date" ,
"end_date" ,
2024-08-28 17:20:00 +00:00
] ;
2024-08-03 15:19:39 +00:00
/ * *
* @ api { get } / web / events Obtener Eventos Disponibles
* @ apiName GetAvailableEvents
* @ apiGroup Eventos
* @ apiVersion 4.0 . 0
* @ apiDescription Este endpoint devuelve una lista de eventos disponibles , incluyendo su estado de aforo .
*
* @ apiSuccess { Object [ ] } events Lista de eventos disponibles .
* @ apiSuccess { String } events . id Identificador único del evento .
* @ apiSuccess { String } events . name Nombre del evento .
* @ apiSuccess { Object } events . location Ubicación del evento .
* @ apiSuccess { String } events . location . country País donde se realiza el evento .
* @ apiSuccess { String } events . location . city Ciudad donde se realiza el evento .
* @ apiSuccess { String } events . location . country _code Código del país del evento .
*
* @ apiSuccessExample { json } Ejemplo de Respuesta :
* [
* {
* "id" : "03f70b2d-53c5-11ed-9b36-000c29a89113" ,
* "name" : "Madrid 2022 - 16ª Edición" ,
* "location" : {
* "country" : "España" ,
* "city" : "Madrid" ,
* "country_code" : "ES"
* } ,
* } ,
* {
* "id" : "b518e0f7-b2d1-11ed-9477-000c29e7c50f" ,
* "name" : "Sevilla 2023 - 22ª Edición" ,
* "location" : {
* "country" : "España" ,
* "city" : "Sevilla" ,
* "country_code" : "ES"
* } ,
* }
* ]
* /
routes . get (
"/web/events/" ,
2024-08-28 17:01:08 +00:00
isAPIKeyUser ,
2024-08-03 15:19:39 +00:00
FieldMiddleware . middleware ( {
validFields : [ "id" , "name" ] ,
2024-08-28 10:47:58 +00:00
} ) ,
2024-08-28 16:25:50 +00:00
2024-08-28 11:18:05 +00:00
( req , res , next ) => {
2024-08-28 17:01:08 +00:00
const scopes = [ "defaultScope" , "withOpenInscriptions" ] ;
2024-08-28 16:41:59 +00:00
res . locals . v4 = { removeFields : [ "partners" , "speakers" , "details" , "multimedias" , "type" ] } ;
2024-08-28 17:01:08 +00:00
return eventController . find ( { scopes } ) ( req , res , next ) ;
2024-08-28 11:18:05 +00:00
}
2024-08-28 16:25:50 +00:00
2024-08-03 15:19:39 +00:00
) ;
/ * *
* @ api { get } / api / v4 / web / events / : eventId Obtener Datos del Evento
* @ apiName GetEventDetails
* @ apiGroup Eventos
* @ apiVersion 4.0 . 0
* @ apiDescription Este endpoint devuelve los detalles de un evento específico .
*
* @ apiParam { String } eventId Identificador único del evento .
*
* @ apiSuccess { String } stateCode Código del estado del evento .
* @ apiSuccess { String } stateText Descripción del estado del evento .
* @ apiSuccess { String } assistanceType Tipos de asistencia disponibles ( ej . "onsite, online" ) .
* @ apiSuccess { String } assistanceTypeText Descripción de los tipos de asistencia .
* @ apiSuccess { String } id Identificador único del evento .
* @ apiSuccess { String } name Nombre del evento .
* @ apiSuccess { String } description Descripción del evento .
* @ apiSuccess { String } campaign _text Texto de campaña ( si aplica ) .
* @ apiSuccess { String } init _date Fecha y hora de inicio del evento ( ISO 8601 ) .
* @ apiSuccess { String } end _date Fecha y hora de finalización del evento ( ISO 8601 ) .
* @ apiSuccess { String } init _available _date Fecha de inicio de disponibilidad ( ISO 8601 ) .
* @ apiSuccess { String } end _available _date Fecha de fin de disponibilidad ( ISO 8601 ) .
* @ apiSuccess { Number } gmt Diferencia horaria en GMT .
* @ apiSuccess { Boolean } sold _out Indica si el evento está agotado .
* @ apiSuccess { Boolean } allow _overflow Indica si se permite el desbordamiento de asistentes .
* @ apiSuccess { String } typeId Identificador del tipo de evento .
* @ apiSuccess { String } venueId Identificador del lugar del evento .
* @ apiSuccess { String } locationId Identificador de la ubicación .
* @ apiSuccess { String } url _streaming URL para el streaming en vivo del evento .
* @ apiSuccess { String } url _poll URL para encuestas ( si aplica ) .
* @ apiSuccess { String } url _registration URL para el registro ( si aplica ) .
* @ apiSuccess { Boolean } featured Indica si el evento es destacado .
* @ apiSuccess { Boolean } virtual Indica si el evento es virtual .
* @ apiSuccess { Boolean } allow _questions Indica si se permiten preguntas durante el evento .
* @ apiSuccess { Number } assistants Número de asistentes .
* @ apiSuccess { Object } type Tipo del evento .
* @ apiSuccess { String } type . name Nombre del tipo de evento .
* @ apiSuccess { String } type . title Título del tipo de evento .
* @ apiSuccess { Object } location Ubicación del evento .
* @ apiSuccess { String } location . country País donde se realiza el evento .
* @ apiSuccess { String } location . city Ciudad donde se realiza el evento .
* @ apiSuccess { String } location . country _code Código del país del evento .
* @ apiSuccess { Object [ ] } multimedias Lista de recursos multimedia asociados con el evento .
* @ apiSuccess { Object [ ] } details Lista de detalles adicionales del evento .
* @ apiSuccess { Object [ ] } speakers Lista de oradores del evento .
* @ apiSuccess { Object [ ] } partners Lista de socios del evento .
*
* @ apiSuccessExample { json } Ejemplo de Respuesta :
* {
* "stateCode" : "registrations_open" ,
* "stateText" : "Inscripciones abiertas" ,
* "assistanceType" : "onsite, online" ,
* "assistanceTypeText" : "evento presencial y online" ,
* "id" : "03f70b2d-53c5-11ed-9b36-000c29a89113" ,
* "name" : "Madrid 2022 - 16ª Edición" ,
* "description" : "Palacio Municipal de Congresos de Madrid, Campo de las Naciones, Avenida de la Capital de España s/n\n\nENTREGA PREMIO ALGO+Q1 CANCIÓN" ,
* "campaign_text" : "" ,
* "init_date" : "2024-08-29T00:00:00.000Z" ,
* "end_date" : "2024-12-01T14:30:00.000Z" ,
* "init_available_date" : "2023-06-14T17:05:00.000Z" ,
* "end_available_date" : "2025-10-30T23:30:00.000Z" ,
* "gmt" : 1 ,
* "sold_out" : false ,
* "allow_overflow" : false ,
* "typeId" : "0" ,
* "venueId" : "43bae260-c0a4-4d1f-8060-e6f54b839d26" ,
* "locationId" : "9f1cc156-c8ad-11e9-b18d-000c295f0f58" ,
* "url_streaming" : "https://www.loquedeverdadimporta.org/directo/madrid/" ,
* "url_poll" : null ,
* "url_registration" : null ,
* "featured" : true ,
* "virtual" : true ,
* "allow_questions" : true ,
* "assistants" : 2000 ,
* "type" : {
* "name" : "conference" ,
* "title" : "Congreso LQDVI"
* } ,
* "location" : {
* "country" : "España" ,
* "city" : "Madrid" ,
* "country_code" : "ES"
* } ,
* "multimedias" : [ ] ,
* "details" : [ ] ,
* "speakers" : [ ] ,
* "partners" : [ ]
* }
* /
routes . get (
"/web/events/:id" ,
isAPIKeyUser ,
FieldMiddleware . middleware ( {
2024-08-28 17:24:03 +00:00
validFields : eventDetailsFields ,
2024-08-28 17:20:58 +00:00
//invalidFields: generalInvalidFields,
2024-08-03 15:19:39 +00:00
} ) ,
( req , res , next ) => {
const scopes = [ "defaultScope" ] ;
2024-08-28 17:27:04 +00:00
res . locals . v4 = { removeFields : [ "partners" , "speakers" , "details" , "multimedias" , "type" ] } ;
2024-08-03 15:19:39 +00:00
return eventController . findOne ( { scopes } ) ( req , res , next ) ;
}
) ;
/ * *
* @ api { get } / api / v4 / web / events / : id / check _capacity Verificar Capacidad del Evento
* @ apiName CheckEventCapacity
* @ apiGroup Eventos
* @ apiVersion 1.0 . 0
* @ apiDescription Determina si hay aforo suficiente para el tamaño de grupo que se ha indicado .
*
* @ apiParam { String } id ID único del evento .
*
* @ apiSuccess { String } eventId ID único del evento .
* @ apiSuccess { Number } group _size Tamaño del grupo para el cual se verifica el aforo .
* @ apiSuccess { Boolean } allow Indica si el aforo es suficiente para el grupo .
* @ apiSuccess { Number } assistants Número total de asistentes permitidos .
* @ apiSuccess { Number } confirmed Número de asistentes confirmados .
* @ apiSuccess { Boolean } sold _out Indica si el evento está completamente lleno .
* @ apiSuccess { Number } assistants _overflow Número de asistentes que sobrepasan el aforo .
* @ apiSuccess { Number } confirmed _overflow Número de confirmados que sobrepasan el aforo .
* @ apiSuccess { Boolean } sold _out _overflow Indica si se permite la asistencia en exceso .
* @ apiSuccess { Boolean } allow _overflow Indica si el exceso de asistentes está permitido .
*
* @ apiSuccessExample { json } Ejemplo de Respuesta :
* HTTP / 1.1 200 OK
* {
* "eventId" : "03f70b2d-53c5-11ed-9b36-000c29a89113" ,
* "group_size" : 1 ,
* "allow" : true ,
* "assistants" : 2000 ,
* "confirmed" : 325 ,
* "sold_out" : false ,
* "assistants_overflow" : 0 ,
* "confirmed_overflow" : 0 ,
* "sold_out_overflow" : 1 ,
* "allow_overflow" : false
* }
* /
routes . get ( "/web/events/:id/check_capacity" , isAPIKeyUser , eventController . checkCapacity ) ;
/ * *
* @ api { get } / api / v4 / web / events / : eventId / reservations / : encodedCode Verificar Código de Invitación
* @ apiName CheckInvitationCode
* @ apiGroup Eventos
* @ apiVersion 4.0 . 0
* @ apiDescription Este endpoint verifica si un código de invitación es aplicable a un evento concreto . El código de invitación está codificado en Base64 .
*
* @ apiParam { String } eventId Identificador único del evento .
* @ apiParam { String } encodedCode Código de invitación codificado en Base64 . Ejemplo , el código "MD22-4939" se codifica como "TUQyMi00OTM5"
*
* @ apiSuccess { Boolean } applicable Indica si el código de invitación es aplicable ( true ) o no ( false ) .
*
* @ apiSuccessExample { json } Ejemplo de Respuesta Exitosa :
* HTTP / 1.1 200 OK
* true
*
* @ apiSuccessExample { json } Ejemplo de Respuesta Fallida :
* HTTP / 1.1 200 OK
* false
* /
routes . get (
"/web/events/:id/reservations/:encodedInvitationCode" ,
isAPIKeyUser ,
eventReservationController . checkReservationCode
) ;
/ * *
* @ api { post } / api / v4 / web / events / : eventId / inscriptions / Dar de Alta una Inscripción
* @ apiName CreateEventInscription
* @ apiGroup Inscriptions
* @ apiVersion 1.0 . 0
* @ apiDescription Este endpoint permite registrar una inscripción a un evento específico .
*
* @ apiParam { String } eventId Identificador único del evento .
*
* @ apiBody { String } code Código opcional para la inscripción .
* @ apiBody { String } email Email del participante , debe ser válido .
* @ apiBody { String } name Nombre del participante .
* @ apiBody { String } [ surname ] Apellido del participante ( opcional ) .
*
*
* @ apiSuccess { String } stateText Estado de la inscripción .
* @ apiSuccess { String } id Identificador único de la inscripción .
* @ apiSuccess { String } eventId Identificador único del evento .
* @ apiSuccess { Date } date Fecha de la inscripción .
* @ apiSuccess { String } userId Identificador único del usuario .
* @ apiSuccess { String } type Tipo de asistencia .
* @ apiSuccess { String } code _ticket Código del ticket generado .
* @ apiSuccess { String } source Fuente de la inscripción ( ej . "app" ) .
* @ apiSuccess { Boolean } validated Estado de validación de la inscripción .
* @ apiSuccess { String } [ reservationId ] Identificador de la reserva si existe .
* @ apiSuccess { String } [ overflowEventId ] Identificador del evento de desborde si existe .
* @ apiSuccess { Date } updatedAt Fecha de la última actualización .
* @ apiSuccess { Date } createdAt Fecha de creación .
*
* @ apiSuccessExample { json } Ejemplo de Respuesta 1 :
* {
* "stateText" : "Inscripción confirmada" ,
* "id" : "156e4aa1-cada-4e42-bdca-b458b798991c" ,
* "eventId" : "3028d48b-1f38-11ef-9b46-000c29a89113" ,
* "date" : "2024-07-02T09:30:07.973Z" ,
* "userId" : "6747d9eb-c64f-43a3-a4ac-6803b89966cb" ,
* "type" : "onsite" ,
* "code_ticket" : "ENT-77760177" ,
* "source" : "app" ,
* "validated" : true ,
* "reservationId" : null ,
* "overflowEventId" : null ,
* "updatedAt" : "2024-07-02T09:30:07.974Z" ,
* "createdAt" : "2024-07-02T09:30:07.974Z"
* }
*
* @ apiSuccessExample { json } Ejemplo de Respuesta 2 :
* {
* "reservation" : {
* "assistanceType" : "onsite" ,
* "assistanceTypeText" : "asistencia presencial" ,
* "stateText" : "Inscripciones abiertas a la reserva" ,
* "id" : "b996c360-616d-46d4-856f-4dc0449b74f8" ,
* "init_available_date" : "2024-06-03T15:00:00.000Z" ,
* "end_available_date" : "2024-10-08T20:00:00.000Z" ,
* "gmt" : - 5 ,
* "state" : "publish" ,
* "assistants" : 10 ,
* "confirmed" : 1 ,
* "sold_out" : false ,
* "allow_multiple" : false ,
* "multiple_limit" : 0 ,
* "description" : "Reserva" ,
* "reservation_code" : "TOL24-CIE339" ,
* "color" : "orange" ,
* "allow_overflow" : false ,
* "overflow_reservationId" : null ,
* "marketing_list" : null ,
* "virtual" : false ,
* "createdAt" : "2024-07-02T09:39:38.000Z" ,
* "updatedAt" : "2024-07-02T09:40:07.000Z" ,
* "userId" : "d3eba5de-76cd-44a0-9ebd-92cad7160e71" ,
* "entityId" : "9c910423-596b-11ea-bdd2-000c29a89113" ,
* "eventId" : "3028d48b-1f38-11ef-9b46-000c29a89113" ,
* "Event" : {
* "stateCode" : "registrations_open" ,
* "stateText" : "Inscripciones abiertas" ,
* "assistanceType" : "onsite" ,
* "assistanceTypeText" : "evento presencial" ,
* "id" : "3028d48b-1f38-11ef-9b46-000c29a89113" ,
* "name" : "Toluca 2024 - Teen - 6ª Edición" ,
* "description" : null ,
* "campaign_text" : null ,
* "init_date" : "2024-10-09T15:00:00.000Z" ,
* "end_date" : "2024-10-09T19:00:00.000Z" ,
* "init_available_date" : "2024-06-03T15:00:00.000Z" ,
* "end_available_date" : "2024-10-08T20:00:00.000Z" ,
* "gmt" : - 5 ,
* "assistants" : 620 ,
* "confirmed" : 1 ,
* "sold_out" : false ,
* "allow_multiple" : false ,
* "multiple_limit" : null ,
* "allow_overflow" : true ,
* "overflow_eventId" : "36a1aed0-1f39-11ef-9b46-000c29a89113" ,
* "state" : "publish" ,
* "typeId" : "0" ,
* "venueId" : "2481e357-1dfb-4ab7-ba2b-5094620e0281" ,
* "locationId" : "df971e1c-c8de-11e9-b18d-000c295f0f58" ,
* "url_streaming" : null ,
* "url_poll" : null ,
* "url_registration" : null ,
* "marketing_list" : null ,
* "userId" : "0939bb2a-d33d-4290-ac81-fc9faa1c015e" ,
* "featured" : false ,
* "virtual" : false ,
* "allow_questions" : true ,
* "createdAt" : "2024-05-31T12:26:05.000Z" ,
* "updatedAt" : "2024-07-02T09:40:07.000Z" ,
* "type" : {
* "name" : "conference" ,
* "title" : "Congreso LQDVI"
* } ,
* "location" : {
* "country" : "México" ,
* "city" : "Toluca" ,
* "country_code" : "MX"
* }
* } ,
* "Entity" : {
* "id" : "9c910423-596b-11ea-bdd2-000c29a89113" ,
* "name" : "CIEMA A Coruña" ,
* "state" : "publish" ,
* "contact_person" : null ,
* "contact_email" : null ,
* "level" : null ,
* "country" : "ES" ,
* "createdAt" : "2020-02-27T15:15:31.000Z" ,
* "updatedAt" : "2020-02-27T15:15:31.000Z"
* }
* } ,
* "stateText" : "Inscripción confirmada" ,
* "id" : "2168615f-69b3-4045-a173-5b70f5ebfd1d" ,
* "eventId" : "3028d48b-1f38-11ef-9b46-000c29a89113" ,
* "date" : "2024-07-02T09:42:34.846Z" ,
* "userId" : "6747d9eb-c64f-43a3-a4ac-6803b89966cb" ,
* "type" : "onsite group" ,
* "code_ticket" : "ENT-31846388" ,
* "source" : "app" ,
* "validated" : true ,
* "reservationId" : "b996c360-616d-46d4-856f-4dc0449b74f8" ,
* "overflowEventId" : null ,
* "updatedAt" : "2024-07-02T09:42:34.847Z" ,
* "createdAt" : "2024-07-02T09:42:34.847Z"
* }
*
* @ apiSuccessExample { json } Ejemplo de Respuesta 3 :
* {
* "stateText" : "Inscripción confirmada a lista de espera" ,
* "id" : "9c6548df-37d8-46c1-8505-3de9e620fab1" ,
* "eventId" : "3028d48b-1f38-11ef-9b46-000c29a89113" ,
* "date" : "2024-07-02T09:32:45.727Z" ,
* "userId" : "6747d9eb-c64f-43a3-a4ac-6803b89966cb" ,
* "type" : "onsite" ,
* "code_ticket" : "ENT-26677167" ,
* "source" : "app" ,
* "validated" : false ,
* "reservationId" : null ,
* "overflowEventId" : "36a1aed0-1f39-11ef-9b46-000c29a89113" ,
* "updatedAt" : "2024-07-02T09:32:45.728Z" ,
* "createdAt" : "2024-07-02T09:32:45.728Z"
* }
* /
routes . post (
"/web/events/:id/inscriptions" ,
isAPIKeyUser ,
SchemaValidator ( eventValidation . InscriptionInputType , true ) ,
//Prepara los datos de la inscripción tipo ....
eventInscriptionController . prepareDataInscription ,
//Recupera la reservation si viene
eventReservationController . recuperateReservationByCode ,
//Recupera a registra el usuario que se va a inscribir
authController . getOrCreateUser ,
//Comprobamos si tiene ya una incripción, en tal caso, comprobamos el código de reserva sea el de la inscripcion hecha,
//si no es así es el caso de un usuario que se reinscribe con otro código de reserva
eventInscriptionController . checkInscriptionByUser ,
//Si es un usuario tutor y solicita un group_size se crea la reserva
eventReservationController . createReservationToEntity ,
eventReservationController . activeReservationToEntity ,
( req , res , next ) => {
if ( res . locals . dataInscription . reservation ) {
console . log ( ">>>>>>>Incripcion con reserva" ) ;
eventReservationController . createInscriptionReservation ( req , res , next ) ;
} else {
console . log ( ">>>>>>>Incripcion sin reserva" ) ;
eventInscriptionController . createInscription ( req , res , next ) ;
}
//next();
}
// eventInscriptionController.createInscriptionMarketingList
) ;
/ * *
* @ api { get } / api / v4 / web / entities / colleges Lista de Entidades Educativas
* @ apiName GetColleges
* @ apiGroup Entidades
* @ apiVersion 1.0 . 0
* @ apiDescription Este endpoint devuelve una lista de entidades educativas , incluyendo su nombre , nivel y país .
*
* @ apiSuccess { Object [ ] } colleges Lista de entidades educativas .
* @ apiSuccess { String } colleges . id Identificador único de la entidad educativa .
* @ apiSuccess { String } colleges . name Nombre de la entidad educativa .
* @ apiSuccess { String } [ colleges . level ] Nivel educativo ( si aplica ) .
* @ apiSuccess { String } colleges . country Código de país de la entidad educativa .
*
* @ apiSuccessExample { json } Ejemplo de Respuesta :
* [
* {
* "id" : "757de756-af85-11e9-aa90-000c295f0f58" ,
* "name" : "Academia Santa Teresa Málaga" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "7583028a-af85-11e9-aa90-000c295f0f58" ,
* "name" : "Academia Díaz Balaguer" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "54a4fa2d-48b4-11ee-9b36-000c29a89113" ,
* "name" : "AECC reservas" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "758137a3-af85-11e9-aa90-000c295f0f58" ,
* "name" : "Aeroclub de Colombia" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "75835f07-af85-11e9-aa90-000c295f0f58" ,
* "name" : "AFA Formación Oviedo" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "758196a7-af85-11e9-aa90-000c295f0f58" ,
* "name" : "Agora Portals International School - Islas Baleares" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "75843763-af85-11e9-aa90-000c295f0f58" ,
* "name" : "AIS Mallorca" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "758314a0-af85-11e9-aa90-000c295f0f58" ,
* "name" : "Alcalá de Henares" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "75810f5a-af85-11e9-aa90-000c295f0f58" ,
* "name" : "Alcaste - Las Fuentes" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "6a574ca3-9ece-11ec-9700-000c29a89113" ,
* "name" : "Alfaem Salud Mental - León" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "75810989-af85-11e9-aa90-000c295f0f58" ,
* "name" : "Alfonso Escamez" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "a015dcef-8213-11ee-9b36-000c29a89113" ,
* "name" : "Alianza para la FP Dual - Barcelona" ,
* "level" : null ,
* "country" : "ES"
* } ,
* {
* "id" : "7583dd6d-af85-11e9-aa90-000c295f0f58" ,
* "name" : "AMA-CLUB DE AMIGOS ALCORCÓN" ,
* "level" : null ,
* "country" : "ES"
* }
* ]
* /
routes . get (
"/web/entities/colleges" ,
isAPIKeyUser ,
cacheSuccesses ( "24 hours" ) ,
FieldMiddleware . middleware ( {
invalidFields : generalInvalidFields ,
} ) ,
SortMiddleware . middleware ( { default : "name" } ) ,
entityController . find ( {
scopes : [ "defaultScope" , "onlyColleges" ] ,
} )
) ;
/ * *
* @ api { get } / api / v4 / web / entities / partners Lista de Partners
* @ apiName GetPartners
* @ apiGroup Partners
* @ apiVersion 4.0 . 0
* @ apiDescription Este endpoint devuelve una lista de partners disponibles , incluyendo su nombre , nivel y país .
*
* @ apiSuccess { Object [ ] } partners Lista de partners disponibles .
* @ apiSuccess { String } partners . id Identificador único del partner .
* @ apiSuccess { String } partners . name Nombre del partner .
* @ apiSuccess { String } [ partners . level ] Nivel del partner ( puede ser nulo ) .
* @ apiSuccess { String } partners . country Código del país del partner .
*
* @ apiSuccessExample { json } Ejemplo de Respuesta :
* [
* {
"id" : "7dfc4513-ce5b-11e9-8055-000c29a89113" ,
"name" : "ABC" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "3c7950ac-48b4-11ee-9b36-000c29a89113" ,
"name" : "AECC" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "2b43d32b-d4d1-11e9-8055-000c29a89113" ,
"name" : "AGR FOOD MARKETING" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "aa0cf064-ce5b-11e9-8055-000c29a89113" ,
"name" : "ANTONIO PAMPLIEGA" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "6c2df6c3-af83-11e9-aa90-000c295f0f58" ,
"name" : "ANTONIO PINTOR" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "5e5472b3-6e60-11ee-9b36-000c29a89113" ,
"name" : "Atrápalo" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "df469bb0-fa63-11e9-8055-000c29a89113" ,
"name" : "AYTO. BILBAO" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "b37764ca-98bc-11ec-9700-000c29a89113" ,
"name" : "AYTO. LA CORUÑA" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "757f1b60-af85-11e9-aa90-000c295f0f58" ,
"name" : "AYTO. MADRID" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "9a2f1e6f-d954-11e9-8055-000c29a89113" ,
"name" : "AYTO. MÁLAGA" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "bddfa9e9-ef85-11e9-8055-000c29a89113" ,
"name" : "AYTO. OVIEDO" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "29762a98-ce5b-11e9-8055-000c29a89113" ,
"name" : "AYTO. SEVILLA" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "414c97c6-5274-11ea-bdd2-000c29a89113" ,
"name" : "BARCELÓ GRANADA" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "03caafb0-5270-11ea-bdd2-000c29a89113" ,
"name" : "BIDAFARMA" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "db2e5387-2111-11ec-9c03-000c29a89113" ,
"name" : "BYG" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "2f2c58ac-e11d-11e9-8055-000c29a89113" ,
"name" : "CABALLITO DE MAR" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "59e03089-a379-11ec-9b36-000c29a89113" ,
"name" : "Cabildo Insular de La Gomera - Area Educación" ,
"level" : null ,
"country" : "ES"
} ,
{
"id" : "6c2df93f-af83-11e9-aa90-000c295f0f58" ,
"name" : "CAIXABANK" ,
"level" : null ,
"country" : "ES"
} ,
* ...
* ]
* /
routes . get (
"/web/entities/partners" ,
isAPIKeyUser ,
cacheSuccesses ( "24 hours" ) ,
FieldMiddleware . middleware ( {
invalidFields : generalInvalidFields ,
} ) ,
SortMiddleware . middleware ( { default : "name" } ) ,
entityController . find ( {
scopes : [ "defaultScope" , "onlyPartners" ] ,
} )
) ;
module . exports = routes ;