Banner promocional para mostrar a los clientes.
action es la acción al hacer click (por ahora solo view: abrir la pantalla de detalles).
target_type + target_id indican a qué pantalla ir:
company — Home de la app.branch_group — un comercio; target_id es el id del grupo de comercios
(target_id == branch.branch_group_id).good — un producto; target_id es el good_id. Se resuelve el comercio con
good.branch_group_id.branch_category — una categoría de comercios; target_id es el id de la categoría.city — una ciudad (fuera de admin y en producción se muestra como company).Se programa por franja horaria (hour_from–hour_to, admite cruce de medianoche), rango de
fechas (date_from–date_to) y días de la semana (days, bitmask oculto day_sunday..
day_saturday; 0 = todos). in_order fija la posición; enabled lo activa. Puede acotarse
a comercios (branches) o a categorías de comercios (branchCategories).
| Atributo | Tipo | Descripción |
|---|---|---|
id |
int |
|
banner_url |
string |
URL del banner horizontal (imagen por defecto si no se sube) |
action |
string |
Acción al hacer click (view) |
target_type |
string |
Tipo de destino: company, branch_group, good, branch_category, city |
target_id |
int |
Id del destino, según target_type |
created_at |
datetime\|null |
|
updated_at |
datetime\|null |
|
company_id |
int |
{@link Company} dueña del banner (oculto) |
in_order |
int |
Posición del banner en el carrusel |
enabled |
bool |
Si el banner está activo |
name |
string |
Nombre interno del banner |
description |
string\|null |
Descripción interna del banner |
hour_from |
string |
Hora de inicio de visualización (HH:MM) |
hour_to |
string |
Hora de fin de visualización (HH:MM); si es menor que hour_from, cruza la medianoche |
vertical_banner_url |
string |
URL del banner vertical (imagen por defecto si no se sube) |
days |
int |
Bitmask de días de la semana en que se muestra (0 = todos; oculto) |
date_from |
datetime\|null |
Inicio del rango de vigencia (opcional) |
date_to |
datetime\|null |
Fin del rango de vigencia (opcional) |
day_sunday |
bool |
BitMask (({@link self::days} & 0x1) !== 0) |
day_monday |
bool |
BitMask (({@link self::days} & 0x2) !== 0) |
day_tuesday |
bool |
BitMask (({@link self::days} & 0x4) !== 0) |
day_wednesday |
bool |
BitMask (({@link self::days} & 0x8) !== 0) |
day_thursday |
bool |
BitMask (({@link self::days} & 0x10) !== 0) |
day_friday |
bool |
BitMask (({@link self::days} & 0x20) !== 0) |
day_saturday |
bool |
BitMask (({@link self::days} & 0x40) !== 0) |
allLogs |
ApiLog> |
|
branchCategories |
BranchCategory> |
Categorías de comercios en las que se muestra el banner |
branches |
Branch> |
Comercios en los que se muestra el banner |
logs |
ApiLog> |
|
resources |
UploadedResource> |
Archivos subidos del banner (imágenes) |
target |
Model\|Eloquent |
Entidad de destino del banner |
{
"id": 83,
"banner_url": "http://127.0.0.1:8000/storage/companies/69/banner/banner_83_1724623630.jpg",
"action": "view",
"target_type": "branch_group",
"target_id": 63,
"created_at": "2021-03-12 17:30:52",
"updated_at": "2025-02-17 18:23:07",
"in_order": 2,
"enabled": false,
"name": "Mercado",
"description": "Asdareghdtyjkuk",
"hour_from": "15:00",
"hour_to": "12:00",
"vertical_banner_url": "http://127.0.0.1:8000/storage/companies/69/banner/banner_vertical_83_1631810497.jpg",
"date_from": null,
"date_to": null,
"day_sunday": true,
"day_monday": true,
"day_tuesday": true,
"day_wednesday": true,
"day_thursday": true,
"day_friday": true,
"day_saturday": true
}
Crear banner promocional
Crea un PromotedBanner para la company: action, destino (target_type +
target_id), in_order, enabled y la programación de horario/fechas/días. Las imágenes
se suben con los endpoints upload-banner / upload-vertical-banner.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/promoted-banners |
Authorization |
{
"action": "required|string|in:view",
"target_type": "required|string|in:company,branch_group,good,branch_category,city",
"target_id": "required|integer",
"in_order": "integer",
"enabled": "boolean",
"name": "string|max:64",
"description": "string|max:255",
"hour_from": {
"string": true,
"regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"hour_to": {
"string": true,
"regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"tz": {
"string": true,
"regex": "/^[\+\-]([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"date_from": "sometimes|nullable|date",
"date_to": "sometimes|nullable|date|after:date_from",
"day_sunday": "nullable|boolean",
"day_monday": "nullable|boolean",
"day_tuesday": "nullable|boolean",
"day_wednesday": "nullable|boolean",
"day_thursday": "nullable|boolean",
"day_friday": "nullable|boolean",
"day_saturday": "nullable|boolean"
}
{info} Soporta: Paginación Filters Carga dinámica
Listar banners promocionales
Devuelve los PromotedBanner de la company, ordenados por in_order.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/promoted-banners |
N/A |
{info} Soporta: Carga dinámica
Mostrar banner promocional
Devuelve el PromotedBanner por su id, con su destino.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/promoted-banners/{promotedBannerId} |
N/A |
Actualizar banner promocional
Modifica el destino, action, in_order, enabled, name, description y la
programación del PromotedBanner.
| Método | URI | Cabeceras |
|---|---|---|
| PATCH | /companies/{companyId}/promoted-banners/{promotedBannerId} |
Authorization |
{
"action": "string|in:view",
"target_type": "string|in:company,branch_group,good,branch_category,city",
"target_id": "integer",
"in_order": "integer",
"enabled": "boolean",
"name": "string|max:64",
"description": "string|max:255",
"hour_from": {
"string": true,
"regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"hour_to": {
"string": true,
"regex": "/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"tz": {
"string": true,
"regex": "/^[\+\-]([0-1][0-9]|2[0-3]):[0-5][0-9]$/"
},
"date_from": "sometimes|nullable|date",
"date_to": "sometimes|nullable|date|after:date_from",
"day_sunday": "nullable|boolean",
"day_monday": "nullable|boolean",
"day_tuesday": "nullable|boolean",
"day_wednesday": "nullable|boolean",
"day_thursday": "nullable|boolean",
"day_friday": "nullable|boolean",
"day_saturday": "nullable|boolean"
}
Asignar banner a una categoría de comercios
Vincula el PromotedBanner a la BranchCategory indicada, para que se muestre dentro de esa categoría.
| Método | URI | Cabeceras |
|---|---|---|
| PUT | /companies/{companyId}/branch-categories/{branchCategoryId}/promoted-banners/{promotedBannerId} |
Authorization |
Quitar banner de una categoría de comercios
Desvincula el PromotedBanner de la BranchCategory indicada.
| Método | URI | Cabeceras |
|---|---|---|
| DELETE | /companies/{companyId}/branch-categories/{branchCategoryId}/promoted-banners/{promotedBannerId} |
Authorization |
Eliminar banner promocional
Borra el PromotedBanner y sus imágenes.
| Método | URI | Cabeceras |
|---|---|---|
| DELETE | /companies/{companyId}/promoted-banners/{promotedBannerId} |
Authorization |
Sube la imagen del banner horizontal (banner_url) del PromotedBanner.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/promoted-banners/{promotedBannerId}/upload-banner |
Authorization |
{
"image": "required|image|mimes:jpeg,png,bmp|max:8192|dimensions:min_width=868,min_height=868"
}
Sube la imagen del banner vertical (vertical_banner_url) del PromotedBanner.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/promoted-banners/{promotedBannerId}/upload-vertical-banner |
Authorization |
{
"image": "required|image|mimes:jpeg,png,bmp|max:8192|dimensions:min_width=868,min_height=868"
}
allLogs HasMany ApiLogbranchCategories HasMany BranchCategorybranches HasMany Branchlogs HasMany ApiLogtarget BelongsTo BranchGroup