====================== Funciones de jugadores ====================== A continuación se describen las operaciones que pueden realizar los jugadores a través del portal en línea o de la aplicación móvil. Gestión de credenciales ======================= Inicio de sesión ################ Flujo ^^^^^ El inicio de sesión se lleva a cabo como se indica en :ref:`login-jugador`. Cierre de sesión ################ Flujo ^^^^^ El cierre de sesión se lleva a cabo como se indica en :ref:`logout-jugador`. Cambio de contraseña #################### Flujo ^^^^^ Se hace uso de la siguiente ruta para solicitar el cambio de contraseña de un jugador: Offsite: ``PUT /players/password`` ********************************** **Autorización:** Player Mediante esta ruta se proporciona la contraseña actual del jugador, así como la nueva contraseña que reeemplazará la anterior. El cuerpo de la petición es el siguiente: .. code-block:: yaml password: lUH65 newPassword: hjfLU5 Como consecuencia de la invocación a la petición, el servidor Offsite realiza el cambio en la contraseña del jugador. Sin embargo, el Access Key del jugador permance sin alteraciones para evitar un nuevo inicio se sesión. Esta ruta responde con el estado ``200 OK`` indicando que el cambio en la contraseña fue correcto. Si la longitud de la nueva contraseña es menor a 6 caracteres, se responde con el estado ``422 Unprocessable Entity``. Si la contraseña ingresada en ``password`` no coincide con la actual, se responde con el estado ``409 Conflict``. Recuperación de contraseña ########################## Flujo ^^^^^ Offsite: ``POST /templates/player_password`` ******************************************** Mediante esta ruta se solicita el envío de un correo de recuperación de contraseña para el jugador indicado en el cuerpo de la petición, renovando así el Access Key del jugador. Con los valores *subject* y *secret* se envía un correo al jugador con una liga para el restablecimiento. La nueva fecha de expiración del Access Key será de 3 días a partir de la fecha de creación. La ruta responde con el estado ``200 OK`` indicando así que se envió un correo al jugador para que este pueda restablecer su contraseña. Si ya se ha solicitado un restablecimiento de contraseña (la fecha de solicitud es no nula), se establece el campo ``requested_password_recovery_at`` como la fecha de recepción de la última petición. Si no se encuentra el jugador indicado en la petición, se responde con el estado ``404 Not Found``. Para finalizar el flujo, el restablecimiento de contraseña se lleva a cabo mediante la ruta siguiente ruta. Offsite: ``POST /players/password`` *********************************** **Autorización:** Player Mediante esta ruta, se solicita el establecimiento de contraseña del jugador que lleva a cabo la petición. El cuerpo de la petición contiene únicamente el campo de contraseña a establecer. Al recibir esta petición, se marca como expirado el Access Key del jugador cuyo secret se recibe en la petición. Esto con el objetivo de que el Key generado para el restablecimiento de contraseña sea de un solo uso. Adicionalmente, se elimina el campo `requestPasswordRecoveryAt`. La ruta responde con el estado ``200 OK`` como resultado de la modificación de la contraseña. Si el usuario no solicitó restablecimiento de contraseña, se responde con el estado ``403 Forbidden``. Gestión de perfil ================= Registro de jugador ################### A continuación se indica la ruta empleada para dar de alta a un nuevo jugador desde el portal web. Flujo ^^^^^ Offsite: ``POST /players`` ************************** Mediante esta ruta se solicita al servidor Offsite la creación de jugadores. El cuerpo de la petición es el siguiente .. code-block:: yaml name: Macarena lastName: Buendía Gallegos birthday: 1987-04-23 email: macarena@domain.com phone: 5514141414 nick: macamaca password: YouShallNotPass gender: 0 avatarId: 3 Como consecuencia, se crea el jugador en el servidor Offsite con los campos que se proporcionan. Si la creación es exitosa se responde con el estado ``201 Created``. Si el ``nick`` contiene a *guest* (ignorando mayúsculas y minúsculas) como subcadena, no posee una longitud entre los 4 y los 25 caracteres, o contiene un símbolo no alfanumérico, ``_`` o ``-``, se responde con el estado ``409 Conflict``. Si el nick o la cuenta del jugador ya existen en el sistema (en caso del correo, para cualquier entidad), o si la fecha de nacimiento no está en el pasado, si la longitud de la contraseña es menor a 6 caracteres, o si la longitud de la cadena de teléfono es mayor a 10 caracteres, se responde con el estado ``422 Unprocessable entity``. Si no se encuentra el avatar indicado, se responde con el estado ``404 Not Found``. Si el género no es una valor de ``{0, 1}``, se responde con el estado ``400 Bad Request``. De resultar en un comportamiento exitoso, se envía un correo donde se notifica la creación de la cuenta al jugador. Visualizar información ###################### Un jugador puede consultar la información de su cuenta y perfil como se describe a continuación. Flujo ^^^^^ Offsite: ``GET /player`` ************************ **Autorización:** Player Mediante esta ruta se obtiene la información del jugador que lleva a cabo la petición. La ruta responde con el estado ``200 OK`` acompañado de la siguiente información .. code-block:: yaml id: 212 nick: jajeji email: jaja@domain.com avatarId: 56 coinsPerCountry: - coinAmount: 0 isoCode: USD - coinAmount: 350 isoCode: MXN profile: name: Lola lastNames: Caradura gender: 0 birthday: 1469491719 defaultLocationId: 6 createdAt: 1469491719 Editar perfil ############# A continuación se define la ruta empleada por un jugador para editar los campos de su perfil. Flujo ^^^^^ Offsite: ``PUT /players`` ************************* **Autorización:** Player Mediante esta ruta se edita la información de perfil de un jugador. El cuerpo aceptado por la petición es el siguiente .. code-block:: yaml name: Macarena lastNames: Buendía Gallegos gender: 0 phone: 5543434343 defaultLocationId: 3 avatarId: 2 Como consecuencia de la recepción de la petición, Offsite actualiza la información del usuario con los campos incluidos en la petición. Si la actualización fue correcta, se responde con el estado ``200 OK``. Si el local por defecto o el avatar no pudieron ser localizados, se responde con el estado ``404 Not Found``. Si el género no es un valor en ``{0, 1}``, si los campos de cargo o dirección exceden los 100 caracteres de longitud, o si la longitud de la cadena de teléfono es mayor a 10 caracteres, se responde con el estado ``422 Unprocessable entity``. Catálogo de productos ===================== En esta sección se definen las rutas empleadas por el jugador para la consulta y compra de productos de recarga de moneda Arena. Visualizar productos de recarga ############################### A continuación se indica la ruta empleada en la obtención del listado de recargas posibles en Offsite. Flujo ^^^^^ La lista de productos dados de alta en Offsite se obtiene mediante una consulta a la ruta :ref:`obtener-recargas`. Visualizar productos de tiempo ############################## Para la consulta de los productos de tiempo de un local, se invoca la ruta :ref:`obtener-productos-tiempo` del servidor Onsite donde se desea llevar a cabo la reservación. Sucursales ========== Obtención de sucursales ####################### A continuación se indica el flujo llevado a cabo para la obtención de sucursales y su información asociada. Flujo ^^^^^ Offsite: ``GET /locations/info`` ******************************** Mediante esta ruta se obtiene el listado de sucursales dadas de alta en el Sistema Arena, con información de relevante para los clientes no autenticados. Se tienen los siguientes parámetros de consulta: ============ ======= ===================================== Parámetro Tipo Función ------------ ------- ------------------------------------- id integer | Filtra la búsqueda por la sucursal | cuyo identificador coincide con el | proporcionado. ============ ======= ===================================== La ruta responde con el estado ``200 OK`` acompañado de la siguiente información .. code-block:: yaml - id: 1 name: Antara domain: antara.onsite.arena.mx locationInfo: address: Plateros 32. Colonia Metales city: Ciudad de México state: Distrito Federal phone1: 56129726 phone2: 76109234 phone3: 87422932 country: id: 1 name: México currency: Pesos mexicanos isoCode: MXN - id: 2 name: Cuernavaca domain: cuernavaca.onsite.arena.mx locationInfo: address: Ahuehuetes 45. Col. Santos city: Cuernavaca state: Morelos phone1: 23798777 phone2: 87687665 phone3: 08767657 country: id: 1 name: México currency: Pesos mexicanos isoCode: MXN Catálogo de juegos ================== El listado de juegos disponibles en una sucursal debe ser visible por el público a través de la web. En consecuencia, se habilita el siguiente comportamiento de consulta hacia la sucursal. Obtención de juegos ################### Flujo ^^^^^ Onsite: ``GET /games/catalog`` ****************************** Este endpoint permite acceder a la lista de *copias disponibles* de juegos en el establecimiento. Es decir, si un juego está disponible para tres sistemas de entretenimiento, el título aparecerá tres veces en el listado de este endpoint. Es importante notar que en caso de que un juego sea destacado, se devuelve además la liga a una imagen con dimensiones especiales del mismo. La ruta responde con el estado ``200 OK`` acompañado de la siguiente información: .. code-block:: yaml - gameSystemId: 1234 name: Killing Floor 2 system: id: 6 name: PC pathToLauncher: /Games/KillingFloor2/kill2.exe isHighlight: false maxPlayers: 1 esrb: M description: 6-player co-op Zed-slaughtering mayhem. And now, 12-player Versus Survival mode, too - now you can BE the Zeds! timesPlayed: 23 tags: - multiplayer - gore - zombies cover: https://www.googleapis.com/storage/v1/b/arena-test-bucket/o/1475699580391_94721.jpg screenshots: - https://www.googleapis.com/storage/v1/b/arena-test-bucket/o/1475699580399_72512.jpg - https://www.googleapis.com/storage/v1/b/arena-test-bucket/o/1475699580408_99334.jpg - gameSystemId: 28 name: FIFA 16 system: id: 4 name: XBOX One isHighlight: true maxPlayers: 4 esrb: PG13 description: Get ready for the biggest season yet! FUT Champions and Squad Building Challenges give players new ways to compete and earn rewards in FIFA's most popular mode. timesPlayed: 127 tags: - multiplayer - sports - soccer cover: https://www.googleapis.com/storage/v1/b/arena-test-bucket/o/1475699580323_82345.jpg screenshots: - https://www.googleapis.com/storage/v1/b/arena-test-bucket/o/1475699580465_90123.jpg highlight: https://www.googleapis.com/storage/v1/b/arena-test-bucket/o/1475699580391_94721.jpg - gameSystemId: 29 name: FIFA 16 system: id: 5 name: PS4 isHighlight: false maxPlayers: 4 esrb: PG13 description: Get ready for the biggest season yet! FUT Champions and Squad Building Challenges give players new ways to compete and earn rewards in FIFA's most popular mode. timesPlayed: 86 tags: - multiplayer - sports - soccer cover: https://www.googleapis.com/storage/v1/b/arena-test-bucket/o/1475699580576_17324.jpg screenshots: - [] Reservaciones ============= En esta sección se describen los procedimientos para gestionar reservaciones por parte del jugador. Se describen flujos para creación, consulta, y cancelación. Creación de reservación ####################### Flujo ^^^^^ Una reservación es creada mediante una invocación a la ruta :ref:`crear-reservacion`. Esta ruta es invocada con host siendo la sucursal donde se planea efectuar la reservación. Ver reservaciones por local ########################### Flujo ^^^^^ Las reservaciones de una sucursal para el jugador pueden consultarse mediante la invocación a la ruta :ref:`obtener-reservaciones`. Esta ruta es invocada con host siendo la sucursal donde se desea consultar las reservaciones del jugador. Cancelar reservación #################### Una reservación en una sucursal de Arena es cancelada mediante una invocación a la ruta :ref:`cancelar-reservacion`. Esta ruta es invocada con host siendo la sucursal donde se desea cancelar la reservación del jugador. Recargas ======== Obtención de productos de recarga ################################# Los productos de recarga se obtienen como se indica en :ref:`obtener-recargas`. Pago de recarga ############### Flujo ^^^^^ Offsite: ``POST /transactions/recharges`` ***************************************** **Autorización:** Player Mediante esta ruta, se solicita al servidor Offsite el procesamiento de los productos de recarga indicados en la petición. El cuerpo es el siguiente: .. code-block:: yaml rechargeId: 2 paymentInfo: cardNumber: "4111111111111111" cardType: "VISA" cardExpiryMonth: "12" cardExpiryYear: "2020" cardCVC: "111" ``rechargeId`` Identificador del producto de recarga que se desea adquirir. ``paymentInfo.cardNumber`` Cadena con los 16 dígitos del frente de la tarjeta. ``paymentInfo.cardType`` Tipo de la tarjeta. Las cadenas válidas son ``VISA`` y ``MASTERCARD``. ``paymentInfo.cardExpiryMonth`` Mes de expiración de la tarjeta. ``paymentInfo.cardExpiryYear`` Año de expiración de la tarjeta. ``paymentInfo.cardCVC`` Código de seguridad. En consecuencia, Offsite valida que el jugador cuente con una sucursal por defecto, y que el producto de recarga cuente con un costo vinculado a la sucursal por defecto del jugador. Posteriormente, Offsite arma una petición de compra y la envía a la ruta :ref:`wsc-procesa-pago`. En caso de recibir una respuesta exitosa del WS, se procede a recargar el saldo en Ares del jugador, para posteriormente responder con el estado ``200 OK`` acompañado de la siguiente información: .. code-block:: yaml receipt: folio: 6945 transactionAt: 69879798798 coinAmount: 200 amountCents: 20000 locationId: 4 cinemaId: 3 playerBalance: coinAmount: 200 isoCode: MXN ``receipt.folio`` Folio del recibo, el cual corresponde con el campo ``vistaTransNumber``. ``receipt.transactionAt`` Fecha de aplicación de la operación. ``receipt.coinAmount`` Cantidad de monedas adquiridas en el recibo. ``receipt.amountCents`` Cantidad en centavos que que pagaron por el producto. ``receipt.locationId`` Sucursal donde se compró el producto de recarga. ``receipt.cinemaId`` Identificador del complejo del proveedor donde se registra la recarga. ``playerBalance.coinAmount`` Nuevo balance del jugador después de la recarga. ``playerBalance.isoCode`` Código de la divisa donde se actualizó el balance del jugador. .. hint:: Como parte del flujo exitoso, se envía un correo al jugador con un comprobante de la operación. Si el pago es declinado (12), o si ocurre un error el el sistema de pagos (13), se responde con el estado ``409 Conflict``. De ocurrir un error en el pago, se responde con el estado ``409 Conflict``. Si el jugador no cuenta con una sucursal por defecto, o si la recarga no cuenta con un costo en la sucursal por defecto del jugador, se responde con el estado ``412 Precondition Failed``. Si el WS experimenta un error después de haberse autorizado el pago, se responde con el estado ``502 Bad Gateway``. PlayCard ======== Bloqueo de tarjeta ################## Flujo ^^^^^ Offsite: ``DELETE /player/id_card`` *********************************** **Autorización:** Player Solicita la desvinculación de la tarjeta activa de la cuenta del jugador que lleva a cabo la petición. A continuación, se busca la tarjeta activa del jugador y se procede a suspenderse, para posteriormente desvincularla del jugador. La ruta responde con el estado ``204 No Content``, indicando que el proceso fue exitoso. Si el jugador no cuenta con una tarjeta vinculada, se responde con el estado ``409 Conflict``. Torneos ======= Obtención de torneos #################### Flujo ^^^^^ Offsite: ``GET /tournaments/catalog`` ************************************* Obtiene el listado de torneos ofertados de los cuales se cuenta con registro ante el servidor Offsite. Todo torneo devuelto en el presente listado cuenta con una fecha de inicio (local a la zona horaria de la sucursal) en el futuro. Se tienen los siguientes parámetros de consulta: ============ ======= ===================================== Parámetro Tipo Función ------------ ------- ------------------------------------- location_id integer | Filtra la búsqueda por la sucursal | donde tendrá lugar el torneo. month integer | Valor numérico en el intervalo | ``[1, 12]`` que representa el mes | en que se jugará el torneo. system integer | Id de la consola en la que se jugará el torneo. ============ ======= ===================================== La ruta responde con el estado ``200 OK`` acompañado de la siguiente información: .. code-block:: yaml - id: 3 name: Torneo Doom cost: 150 type: PRO scheduledAt: 1469491719 maxTeams: 30 minTeams: 2 availablePlaces: 3 systemName: PS4 template: maxPlayersPerTeam: 30 minPlayersPerTeam: 12 gameName: Doom modeName: Desempate por duelo directo locationId: 4 cover: https://www.googleapis.com/storage/v1/b/arena-offsite-bucket/o/1475281865163-0.9304038190748543 banner: https://www.googleapis.com/storage/v1/b/arena-offsite-bucket/o/1475281865163-0.9304038190748543 createdAt: 1469491364 updatedAt: 1469491364 ``id`` Identificador del torneo. ``name`` Nombre del torneo. ``cost`` Costo en Ares de la participación individual al torneo. ``type`` Tipo de entrada al torneo. ``scheduledAt`` Fecha, en hora local de la sucursal, para la cual está programado el torneo. ``maxTeams`` Número máximo de equipos permitidos en el torneo. ``minTeams`` Número mínimo de equipos requeridos en el torneo. ``availablePlaces`` Número de lugares disponibles para el torneo. ``systemName`` Nombre de la consola en la que se jugará el torneo. ``template`` Información de la plantilla a partir de la cual fue instanciado el torneo. Los valores de la plantilla aplican para el torneo en cuestión. ``template.maxPlayersPerTeam`` Número máximo de integrantes que pueden conformar un equipo. ``template.minPlayersPerTeam`` Número mínimo de integrantes que deben conformar un equipo. ``template.gameName`` Nombre del juego que aplica al torneo. ``template.modeName`` Nombre del modo de juego a seguir durante las partidas del torneo. ``locationId`` Identificador de la sucursal donde tendrá lugar el torneo. ``cover`` Liga a la imagen de portada del torneo. ``banner`` Liga al banner del torneo. ``createdAt`` Fecha de creación del torneo. ``updatedAt`` Fecha de la última actualización del torneo.