- Add UpdateDocumentSeriesController for updating document series. - Create documentSeriesApiErrorMapper for error handling. - Define document series routes including CRUD operations. - Implement Sequelize-based persistence layer for document series. - Add DTOs for request and response schemas for document series operations. - Establish common structures for document series data handling. - Configure TypeScript settings for the document series module.
88 lines
2.2 KiB
Markdown
88 lines
2.2 KiB
Markdown
# Manual concurrency validation
|
|
|
|
Validacion manual de concurrencia para `document-series` sin introducir framework nuevo.
|
|
|
|
## Objetivo
|
|
|
|
Comprobar que varias asignaciones simultaneas sobre la misma serie:
|
|
|
|
- no generan duplicados
|
|
- consumen numeros consecutivos
|
|
- avanzan `next_number` exactamente `N` posiciones
|
|
|
|
## Precondiciones
|
|
|
|
- BD de desarrollo segura
|
|
- serie de `proforma` activa y conocida
|
|
- backend arrancado contra esa BD
|
|
- capacidad de lanzar varias peticiones HTTP casi simultaneas
|
|
|
|
## Caso base recomendado
|
|
|
|
Serie inicial:
|
|
|
|
- `document_type = 'proforma'`
|
|
- `code = 'PF'`
|
|
- `next_number = 100`
|
|
|
|
Numero de asignaciones concurrentes:
|
|
|
|
- `N = 10`
|
|
|
|
Esperado:
|
|
|
|
- referencias unicas `PF-000100` a `PF-000109`
|
|
- `document_series.next_number = 110`
|
|
- cero duplicados
|
|
|
|
## Preparacion SQL
|
|
|
|
```sql
|
|
SELECT id, company_id, document_type, code, prefix, suffix, next_number, padding
|
|
FROM document_series
|
|
WHERE document_type = 'proforma'
|
|
AND code = 'PF';
|
|
```
|
|
|
|
Si hace falta preparar la serie manualmente en desarrollo, hacerlo de forma conservadora y reversible.
|
|
|
|
## Ejecucion HTTP manual
|
|
|
|
1. Preparar 10 peticiones de creacion de proforma para la misma empresa y misma serie destino.
|
|
2. Lanzarlas en paralelo desde el cliente HTTP disponible.
|
|
3. Registrar `proforma_reference`, `proforma_number` y `document_series_id` devueltos.
|
|
|
|
## Verificaciones SQL
|
|
|
|
```sql
|
|
SELECT proforma_reference, proforma_number, document_series_id
|
|
FROM proformas
|
|
WHERE document_series_id = '<document_series_id>'
|
|
ORDER BY created_at DESC
|
|
LIMIT 20;
|
|
```
|
|
|
|
```sql
|
|
SELECT proforma_reference, COUNT(*) AS duplicates
|
|
FROM proformas
|
|
WHERE document_series_id = '<document_series_id>'
|
|
GROUP BY proforma_reference
|
|
HAVING COUNT(*) > 1;
|
|
```
|
|
|
|
```sql
|
|
SELECT id, next_number
|
|
FROM document_series
|
|
WHERE id = '<document_series_id>';
|
|
```
|
|
|
|
## Criterio de aceptacion
|
|
|
|
- no hay filas en la query de duplicados
|
|
- aparecen `N` nuevas referencias distintas
|
|
- `next_number_final = next_number_inicial + N`
|
|
|
|
## Bloqueo actual en este workspace
|
|
|
|
En este workspace no se pudo ejecutar la prueba porque la terminal no pudo abrir conexion operativa a la BD de desarrollo. La configuracion detectada es de desarrollo, pero falta cliente `mysql` y el conector `mysql2` local no resuelve todas sus dependencias transitivas.
|