Files
shopit-back/app/Domains/Attachable/documentacion/README.md
ncoronel 02cf3f3773 Add tests for ticket validity and event date formatting
- Create TicketValiditySchemaTest to verify database schema for ticket validity.
- Update CatalogModelsTest to include tests for event date attributes and selection options.
- Introduce EventDateTextFormatterTest for formatting event dates in Spanish.
- Refactor EventModelsTest to include validity time relationships.
- Add SaleDetailResourceTest to ensure correct serialization of purchase items.
- Enhance TicketTest with validity time checks and status management.
- Implement ValidityTimeResourceTest to validate resource output for different validity types.
- Add ValidityTimeTest to verify casting and validity checks for validity time types.
2026-08-11 12:41:35 -03:00

1.4 KiB

Dominio Attachable

Propósito

Centraliza el almacenamiento y la metadata de archivos adjuntos. Acepta archivos subidos o contenido Base64, los persiste en S3 y registra su tipo, MIME, extensión, tamaño, nombre original y clave única.

Componentes principales

  • Models/Attachment.php: representa un adjunto y genera URL temporales de acceso.
  • Services/AttachmentService.php: almacena, copia y elimina archivos, compensando en S3 si falla la escritura en base de datos.
  • Enums/AttachmentType.php: clasifica imágenes, videos, PDF, audio, documentos y otros archivos.
  • Exceptions/AttachmentStorageException.php: expresa fallos propios del almacenamiento.

Flujo principal

  1. El consumidor entrega un UploadedFile o una cadena Base64 y un directorio.
  2. El servicio valida el contenido, detecta MIME/extensión y genera una clave UUID.
  3. El archivo se guarda en el disco s3.
  4. Se crea el registro Attachment; ante error se elimina el objeto que había sido subido.

API y dependencias

No expone rutas HTTP propias. Lo consumen otros dominios, especialmente Catalog y Tenant. Depende de Laravel Storage, Symfony Mime y del modelo Attachment.

Consideraciones

  • El directorio no puede quedar vacío después de normalizarlo.
  • La eliminación se considera fallida si S3 no confirma el borrado.
  • Las URL generadas son temporales; el vencimiento predeterminado es de 10 minutos.