- Introduced AttachmentCrop model to manage crop variants for attachments. - Updated Attachment model to remove direct crop fields and establish relationships with AttachmentCrop. - Modified AttachmentService to handle storing and updating multiple crop variants (desktop and mobile). - Adjusted validation rules to accommodate new crop structure. - Updated database migration to create attachment_crops table and migrate existing crop data. - Refactored tests to ensure compatibility with the new cropping structure and validate multiple crop variants. - Enhanced documentation to reflect changes in attachment handling and cropping capabilities.
34 lines
1.9 KiB
Markdown
34 lines
1.9 KiB
Markdown
# 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. Para imágenes también permite guardar un original junto con variantes recortadas para desktop y mobile.
|
|
|
|
## Componentes principales
|
|
|
|
- `Models/Attachment.php`: representa un adjunto y genera URL temporales de acceso.
|
|
- `Models/AttachmentCrop.php`: relaciona un original con su crop desktop o mobile y la imagen generada.
|
|
- `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.
|
|
- Cada eje del crop guarda `start_percentage` y `end_percentage`, cumpliendo `0 <= start < end <= 100`.
|
|
- `attachment_crops` guarda una fila por variante con los rangos horizontal/vertical y el attachment procesado.
|
|
- Al eliminar el original mediante el servicio también se eliminan todas sus variantes recortadas.
|
|
- La eliminación se considera fallida si S3 no confirma el borrado.
|
|
- Las URL generadas son temporales; el vencimiento predeterminado es de 10 minutos.
|