Configuración de medios de la API

Overview

services/api/src/config/media.js concentra los límites operativos para medios asociados a listings. El módulo expone un único objeto, MEDIA_CONFIG, con topes para imágenes y documentos, tanto en unidades humanas como en bytes.

Este archivo no lee variables de entorno directamente. Depende de services/api/src/config/env.js, que ya normaliza los valores de ImageKit y sus límites asociados.

[!NOTE] Los límites en megabytes se convierten a bytes dentro del propio módulo. Así, el resto del backend puede validar tamaños sin repetir la conversión.

How it works

El archivo sigue un flujo muy corto y determinista:

  • Importa env desde ./env.js.
  • Construye MEDIA_CONFIG con valores ya resueltos.
  • Exporta ese objeto para consumo de otros módulos.

No hay lógica condicional, clases ni efectos secundarios adicionales. La responsabilidad del archivo es normalizar límites de medios en una sola estructura.

[!IMPORTANT] Los valores fuente viven en services/api/src/config/env.js. Allí aparecen imagekitMaxImagesPerListing, imagekitMaxImageSizeMB, imagekitMaxDocumentsPerListing y imagekitMaxDocumentSizeMB, con sus valores por defecto del entorno. fileciteturn0file12turn0file13

Key components

MEDIA_CONFIG [badge:public]

MEDIA_CONFIG es el objeto exportado por el módulo. Agrupa los límites de carga y almacenamiento para medios del backend.

export const MEDIA_CONFIG = {
  maxImagesPerListing: env.imagekitMaxImagesPerListing,
  maxImageSizeMB: env.imagekitMaxImageSizeMB,
  maxImageSizeBytes: env.imagekitMaxImageSizeMB * 1024 * 1024,
  maxDocumentsPerListing: env.imagekitMaxDocumentsPerListing,
  maxDocumentSizeMB: env.imagekitMaxDocumentSizeMB,
  maxDocumentSizeBytes: env.imagekitMaxDocumentSizeMB * 1024 * 1024,
};

Dependencia de configuración

MEDIA_CONFIG toma sus valores desde env, no desde process.env. Eso mantiene la configuración centralizada en services/api/src/config/env.js.

Data & fields

[
    {
        "name": "maxImagesPerListing",
        "type": "number",
        "required": true,
        "description": "Cantidad máxima de imágenes permitidas por listing. Proviene de env.imagekitMaxImagesPerListing."
    },
    {
        "name": "maxImageSizeMB",
        "type": "number",
        "required": true,
        "description": "Tamaño máximo de cada imagen en megabytes. Proviene de env.imagekitMaxImageSizeMB."
    },
    {
        "name": "maxImageSizeBytes",
        "type": "number",
        "required": true,
        "description": "Tamaño máximo equivalente en bytes para cada imagen. Se calcula desde maxImageSizeMB."
    },
    {
        "name": "maxDocumentsPerListing",
        "type": "number",
        "required": true,
        "description": "Cantidad máxima de documentos permitidos por listing. Proviene de env.imagekitMaxDocumentsPerListing."
    },
    {
        "name": "maxDocumentSizeMB",
        "type": "number",
        "required": true,
        "description": "Tamaño máximo de cada documento en megabytes. Proviene de env.imagekitMaxDocumentSizeMB."
    },
    {
        "name": "maxDocumentSizeBytes",
        "type": "number",
        "required": true,
        "description": "Tamaño máximo equivalente en bytes para cada documento. Se calcula desde maxDocumentSizeMB."
    }
]

services/api/src/config/env.js define la configuración de ImageKit que alimenta este módulo. En el contexto provisto, esos campos incluyen:

  • imagekitMaxImagesPerListing
  • imagekitMaxImageSizeMB
  • imagekitMaxDocumentsPerListing
  • imagekitMaxDocumentSizeMB

También se observan valores por defecto para esos límites en la configuración de entorno. fileciteturn0file12turn0file13

Behaviors

  • MEDIA_CONFIG — expone límites máximos de imagen y documento por listing.
  • MEDIA_CONFIG — mantiene el tamaño en MB y en bytes para cada tipo de medio.
  • MEDIA_CONFIG — deriva los valores de un único origen de configuración, env.
  • MEDIA_CONFIG — evita duplicar conversiones de tamaño en otros módulos.

La conversión usa la multiplicación:

sizeMB * 1024 * 1024

Ese cálculo aparece para imágenes y documentos. El archivo guarda ambos formatos, porque distintos puntos del backend pueden necesitar una unidad u otra.

Gotchas & edge cases

[!WARNING] maxImageSizeBytes y maxDocumentSizeBytes no son valores independientes. Siempre reflejan el valor en MB multiplicado por 1024 * 1024.

[!NOTE] Si cambia services/api/src/config/env.js, cambian también los límites expuestos por este módulo. No existe una configuración local separada para media.js. fileciteturn0file12turn0file13

  • services/api/src/config/env.js — provee los valores imagekitMaxImagesPerListing, imagekitMaxImageSizeMB, imagekitMaxDocumentsPerListing y imagekitMaxDocumentSizeMB.
  • services/api/src/config/imagekit.js — comparte el mismo dominio de configuración de ImageKit dentro de la API.

[!IMPORTANT] Este archivo no define validación, subida ni persistencia. Solo expone límites normalizados para que otros módulos los consuman.