Saltar al contenido principal

Extensiones-Pagas

Ver en Git


Extensiones pagas

Algunas extensiones van a estar ahora vinculadas a un addon y a un precio. Éstas van a necesitar, para poder ser instaladas y ejecutadas, que el usuario posea el addon y esté vigente.

Base de datos

En la tabla def_addons hay una columna extension_Agrega que lleva el id de la extensión con la que se vincula.

No se debería crear más de un addon vinculado a una extensión. Aún así, si sucede, las APIs funcionarán tomando una.

Se tiene que definir el precio del addon en la tabla precios, para todas las regiones. Las APIs del marketplace tomarán la region según la IP del usuario para indicar la moneda y el precio.

Las APIs verifican que una extensión esté vinculada a un addon, y de estarlo, verifica que el usuario tenga una entrada vigente en la tabla addons. Esta puede haber sido comprada por si mismo en el caso de personales o sponsoreada por el espacio. Lo único que importa es que hay un registro que tenga su id_usuario.

  • Si no está vinculada a def_addons se considera gratuita
  • Si está vinculada a def_addons se considera paga
  • Si está vinculada a def_addons y el usuario NO posee registro en addons, se considera que no tiene acceso

Para los usuarios de espacio, las APIs del marketplace verifican si el espacio tiene quota vigente del addon para indicar si hay sponsoreo disponible.

Hacer una extension paga

  1. crear def_addon SIN extension
  2. crear precios
  3. deploy: poner id_extension_agrega

Free trials

Sólo para las extensiones pagas, en la tabla aurapps se puede definir un intervalo de duración de trials. Si ese intervalo es nulo, la extensión no tiene free trial.

APIs

A cada extensión se le suma un objeto purchase_details con los detalles de compra, si existieran.

Ejemplo:

{
"addon_name": "Nombre del addon",
"is_purchasable": true,

"price": "5",
"currency": "U$D",

"is_allowed": false,
"is_developer": false,
"sponsor_available": true,

"allowed_from": null,
"allowed_to": null,

"trial_available": true,
"trial_duration_days": 5
}
  • is_purchasable: bool: Indica si la extensión es paga o no.
  • addon_name: str: De ser paga, el nombre del addon al que está asociado, sino será null.
  • price: str: el precio. Puede ser null si no es paga.
  • currency: str: la moneda. Puede ser null si no es paga.
  • is_allowed: bool: indica si el usuario está habilitado a instalar la extensión. Si no es paga, será true, o si es paga pero tiene el addon habilitado.
  • is_developer: bool: indica si el usuario es el desarrollador de la extensión, por lo que estará habilitado a instalarla aunque sea paga. Si es desarrollador, is_allowed lo contemplará también.
  • sponsor_available: bool: indica si el usuario pertenece a un espacio que tiene el addon habilitado.
  • allowed_from: str: fecha en formato UTC desde la que el usuario tiene el addon habilitado.
  • allowed_to: str: fecha en formato UTC hasta la que el usuario tiene el addon habilitado.
  • trial_available: bool: indica si hay un trial disponible para el usuario
  • trial_duration_days: int: cantidad de dias que dura el free trial.

Reglas

  1. Los usuarios que pertenezcan a un espacio, no verán el precio de una extensión por más que sea paga.
  2. is_purchasable es el que indica si se tiene que marcar como premium
  3. is_allowed es el que indica si la puede instalar o no. El resto de los datos sirve para las distintas user stories.
  4. trial_available resume toda la lógica para indicar si el usuario puede o no solicitar el trial. Si el usuario alguna vez instaló la app, no podrá solicitar un free trial.

Casos:

is_purchasableis_allowedis_developerusuarioMarketplace
falsetruexxxxcualquieraEs una extension gratuita, siempre la podrá instalar
xxxxxxxxtruecualquieraEs su desarrollador, siempre la podrá instalar
truefalsefalsePersonalEs una extension paga, no la tiene paga -> Formulario
truefalsefalseEspacioEs una extension paga, no la tiene paga-> Contactar Admin
truetruefalseEspacioEs una extension paga, la tiene paga, podrá instalarla

Addon Vencido

Un usuario puede tener una extensión instalada (auth_date no nula, se deberá mostrar en la lista como siempre) pero habrá que validar purchase_details.is_allowed para verificar si es paga y su addon está vigente. En ese caso, habrá que indicar al usuario que se contacte con el administrador o que la suscripción se encuentra vencida.

Endpoints involucrados

GET /apps

Cada objeto de extensión incluye el objeto purchase_details. Es importante validar el caso de addon vencido mencionado anteriormente.

En caso de llamar a este endpoint con el parámetro fetch_token=true, si la extensión es paga y el addon se encuentra vencido, no se incluirá el jwt para la misma.

GET /auth

Idéntico al caso anterior

POST /auth

Se agregó un nuevo error, code=4 en caso que se esté queriendo instalar una extensión paga sin addon vigente. El front no debería llegar a este error ya que debería frenarlo antes y no dejar solicitar una instalación de una extensión paga sin el addon vigente.

GET /token

Se agregó un nuevo error, code=4 en caso que se esté solicitando el jwt para una extensión paga sin addon vigente.

activar trial

POST /api/mktplace/purchase/trial ? client_id = XXXXXX

Posibles errores:

  • code: "INVALID_REQUEST" en caso que no sea posible solicitar el trial