Account

Representa a las cuentas de usuario. Una cuenta de usuario se utiliza para registrarse, iniciar sesión e identificarse en el API.


Modelo Account

{
    "id"        : "long",
    "email"     : "string|email",
    "type"      : "integer",
    "status"    : "integer",
    "created_at": "date",
    "updated_at": "date"
}
  • email: Correo electrónico asociado al usuario. Este valor es único para Accounts dentro de una Company.
  • type: Indica el tipo de Account (Client, Provider o Admin). Los posibles valores son los siguientes:
  • status: Indica el estado de Account (activa, bloqueada, etc). Los valores pueden ser:

Tipos de cuenta

En el API se manejan 3 tipos de cuenta: Client, Provider y Admin, que representan a un Comprador/Cliente, un Rider y a un Administrador respectivamente.

Niveles de Acceso

Cuando una cuenta es de tipo Admin, se manejan 3 tipos de niveles de acceso vinculados a la cuenta.

  • Company-Access: Nivel de acceso de Company. Se identifica porque sus atributos branch_group_id y branch_id son null. Puede gestionar cualquier BranchGroup y cualquier Branch.
  • Group-Access: Nivel de acceso de un BranchGroup. Se identifica porque su atributo branch_group_id posee un valor numérico indicando el grupo al cual pertenece y el atributo branch_id es null. No puede gestionar la Company, pero puede gestionar el BranchGroup al cual pertenece incluyendo los Branches dentro de ese BranchGroup.
  • Branch-Access: Nivel de acceso de un Branch. Se identifica porque sus atributos branch_group_id posee un valor numérico del grupo al cual pertenece y branch_id posee un valor numérico del Branch al gual pertenece. No puede gestionar la Company ni el BranchGroup al cual pertenece, pudiendo sólo gestionar el Branch asociado.

Tipo Client

Una cuenta de tipo Client es el tipo de cuenta que se utiliza para realizar compras en la aplicación. Se identifica con type == 0.

Tipo Provider

Una cuenta de tipo Provider es el tipo de cuenta que se utiliza para realizar entregas de los productos solicitados por los Clients, o bien, prestar un servicio a un Client. Se identifica con type == 15.

Tipo Admin

Una cuenta de tipo Admin es el tipo de cuenta que se utiliza para gestionar y configurar los productos y servicios que presta una determinada Company. Existen distintos tipos de Admin. Los Admin en general se identifican con type >= 112.

  • Seller Admin: Indica que es una cuenta de vendedores. Este tipo de cuenta posee su propia aplicación y puede crear órdenes a sus clientes. Sin embargo, su nivel de acceso es muy limitado para la mayoría de funciones de DonDemand. Se identifica con type == 48
  • Low Admin: Indica que la cuenta de administrador con menor tipo de acceso. Este tipo de cuenta puede atender al público y solucionar problemas con las Orders, Payments, etc. Sin embargo, no puede modificar la configuración de la Company, alterar Goods, etc. Es decir, no puede realizar modificaciones que alteren el funcionamiento de DonDemand. Se identifica con type == 112
  • High Admin: Cuenta de administrador que puede modificar la configuración de la Company, alterar privilegios de otros usuarios, agregar o quitar productos y servicios (Goods), Categories, entre otros. Se identifica con type == 119.
  • Owner Admin: Cuenta propietaria de la Company. Esta cuenta tiene todos los privilegios sobre la Company. Se identifica con type == 127.
  • Super Admin: Cuenta con todos los accesos sobre todas las Company. Utilizada por los administradores de DonDemand. Se identifica con type == 255.

Estados de Account

Estado de Account. En el API se manejan los siguientes estados de Account:

  • Pre registrado: Account creado por un Admin para asignar Orders y tener un registro de los Client. Este tipo de Account no puede iniciar sesión, sin embargo, cuando un usuario se registra y cumple con los datos de un Account pre registrada, se utiliza el Account pre-registrada en su lugar y se recuperan los datos asociados al Account. Se identifica con status == 0.
  • Desactivado: Account desactivado por un administrador. Una cuenta desactivada no puede iniciar sesión en la Company asociada de ninguna manera, y no puede ver los datos de esa Company. Se utiliza por ejemplo para revocar el acceso a proveedores que ya no trabajan en la Company. Se identifica con status == 16.
  • Bloqueado: Una cuenta bloqueada puede iniciar sesión en la Company asociada y ver su histórico, productos, etc. Sin embargo, no puede utilizar los servicios de la Company. Se identifica con status == 20:
  • Sin verificar: Se requiere validar los datos de la cuenta. Por ejemplo, una cuenta de un Provider que necesita validar su número de teléfono. Se identifica con status == 32.
  • Sin confirmar: El email asociado al Account no ha sido confirmado. Se pueden utilizar la mayoría de servicios en DonDemand, pero no se pueden crear Orders hasta confirmar sus datos. Se identifica con status == 127.
  • Activo: Estado óptimo de la cuenta. No existen restricciones para utilizar los servicios DonDemand dentro de la Company asociada. Se identifica con status == 240.

Registro de Account

Cada tipo de cuenta en DonDemand (Client, Provider, Admin) tiene sus particularidades a la hora de registrarse.

Registro de Client

El registro de Client es libre para cualquier usuario. Es decir, no existen restricciones para registrarse. Ir a Registro de Client.

Registro de Provider

El registro de Provider es realizado a través de un Account de tipo High Admin o superior. Ir a Registro de Provider.

Registro de Admin

El registro de Admin es realizado a través de un Account de tipo High Admin o superior. No obstante, un Admin sólo puede registrar un tipo de Admin inferior al suyo propio, lo cual se describe en la siguiente tabla, donde se define el tipo de cuenta que puede crear cada tipo de Admin:

Account Low Admin High Admin Owner Admin Super Admin
Low Admin No No No No
High Admin No No No
Owner Admin No No
Super Admin

Ir a Registro de Admin.

Inicio de Sesión nativo

Verifica las credenciales de usuario y genera un Token de Acceso. De forma opcional, se puede enviar la posición actual (latitude, longitude) para actualizar la ubicación actual del usuario en el servidor, o enviar el push_token para recibir notificaciones push.

Endpoints de Inicio de Sesión

Método URI Cabeceras
POST /companies/{companyId}/login-facebook N/A
POST /companies/{companyId}/login-native N/A

Parámetros Body

{
  "type"        : "required|string|in:admin,provider,client",
  "email"       : "required|email",
  "password"    : "required|string|min:5",
  "latitude_e6" : "integer",
  "longitude_e6": "integer",
  "push_token"  : "string|max:255"
}

{info} type es el tipo de usuario entre admin, provider o client. push_token es el token que el API necesita para enviar las notificaciones push.

Respuesta del API

{warning} La respuesta corresponde al modelo que inició sesión, ya sea Client, Provider o Admin.


{success} Respuesta satisfactoria de un Admin

Código 200 Admin Client Provider

{
  "id"          : 5,
  "name"        : "Pedro Parra",
  "display_name": "Pedro Parra",
  "email"       : "edyjen2@hotmail.com",
  "phone"       : "12315200066",
  "avatar_url"  : "https://dondemand.sfo2.digitaloceanspaces.com/companies/46/avatar/avatar_8_1554999424.png",
  "status"      : 1,
  "created_at"  : "2019-02-14 14:07:57",
  "updated_at"  : "2019-08-26 20:53:31",
  "deleted_at"  : null,
  "account_id"  : 8,
  "settings"    : {
    "enable_sms"                        : true,
    "enable_order_created_sms"          : true,
    "enable_payment_registered_sms"     : true,
    "enable_manual_payment_reported_sms": true,
    "enable_order_canceled_sms"         : true,
    "enable_support_sms"                : true
  },
  "account"     : {
    "id"        : 8,
    "email"     : "edyjen2@hotmail.com",
    "type"      : 119,
    "status"    : 240,
    "created_at": "2019-02-14 14:07:57",
    "updated_at": "2019-08-26 20:53:27",
    "deleted_at": null
  },
  "access_token": {
    "token_type"  : "bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjgsImlzcyI6Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9hcGkvdjMvY29tcGFuaWVzLzMvbG9naW4tbmF0aXZlIiwiaWF0IjoxNTgzODY1Njg0LCJleHAiOjE1ODM4NjkyODQsIm5iZiI6MTU4Mzg2NTY4NCwianRpIjoiN3N5WjRkRDJSNjVUYnlmUCJ9.imtW9g0FV0SDgVthyQY-jT_ZGi6vSXqFIeD7dO9ziqk",
    "created_at"  : "2020-03-10 18:41:24",
    "expires_at"  : "2020-03-10 19:41:24",
    "expires_in"  : 3600
  },
  "registered"  : false
}

{danger} Respuesta de error

Motivo Combinación de email/contraseña incorrectos, o usuario no existe.

{
  "status_code": 401,
  "error_code": "EB100",
  "message": "invalid_credentials",
  "description": "No account matches the specified credentials",
}

Código 423

Motivo Demasiados intentos fallidos en un corto período de tiempo.

{
  "message": "too_many_attempts {seconds}"
}
  • seconds: Cantidad de segundos para permitir un nuevo intento de inicio de sesión.

\

Inicio de Sesión por teléfono

Envía un código al número de teléfono del usuario (verificado) y se utiliza este código para iniciar sesión (como una contraseña temporal).

Método URI Cabeceras
POST /companies/{companyId}/send-login-code N/A
{
  "phone" : "required|string"
}

El usuario debe ingresar el código recibido por SMS en el app para iniciar sesión. Se utiliza el endpoint:

Método URI Cabeceras
POST /companies/{companyId}/login-phone N/A

Parámetros Body

{
  "phone" : "required|string",
  "code" : "required|string"
}