Refactor database models to include company_id and update unique constraints
- Updated PermissionRuleOct model to include company_id and modified unique constraint. - Updated Seal model to include company_id and modified unique constraint. - Added TYPE_CHECKING imports in reference data models for better type hinting. - Created new models for QClasses and SClasses in the a24 module. - Enhanced init_first_time.sh script for comprehensive system initialization, including Keycloak and PostgreSQL setup. - Updated documentation to reflect changes in API endpoints and database relationships.
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
## 🔗 Relaciones de Base de Datos
|
||||
|
||||
### Relaciones Principales
|
||||
- **Part ↔ Class**: Relación de clave compuesta (client_key, part_class ↔ class_code)
|
||||
- **Part ↔ Class**: Relación de clave compuesta (client_id, part_class ↔ class_code)
|
||||
- **Part → Country**: Clave foránea a public.countries (country_of_origin)
|
||||
- **Part → CurrencyType**: Clave foránea a public.currency_types (currency_key)
|
||||
- **Class → MaterialType**: Clave foránea a public.material_types (material_key)
|
||||
@@ -75,34 +75,34 @@ Part (Partes)
|
||||
|--------|----------|-------------|
|
||||
| POST | `/` | Crear parte |
|
||||
| GET | `/` | Listar todas con paginación y filtros |
|
||||
| GET | `/client/{client_key}` | Obtener partes por cliente |
|
||||
| GET | `/client/{client_id}` | Obtener partes por cliente |
|
||||
| GET | `/search/fraction/{fraction}` | Buscar por fracción arancelaria |
|
||||
| GET | `/search/supplier/{supplier}` | Buscar por proveedor |
|
||||
| GET | `/search/country/{country_code}` | Buscar por país |
|
||||
| GET | `/statistics` | Obtener estadísticas de partes |
|
||||
| GET | `/{client_key}/{part_number}` | Obtener parte específica |
|
||||
| PUT | `/{client_key}/{part_number}` | Actualizar parte |
|
||||
| DELETE | `/{client_key}/{part_number}` | Eliminar parte |
|
||||
| PATCH | `/{client_key}/{part_number}/toggle-status` | Cambiar estatus |
|
||||
| GET | `/{client_key}/{part_number}/basic` | Obtener información básica |
|
||||
| GET | `/{client_key}/{part_number}/regulatory` | Obtener información regulatoria |
|
||||
| GET | `/{client_id}/{part_number}` | Obtener parte específica |
|
||||
| PUT | `/{client_id}/{part_number}` | Actualizar parte |
|
||||
| DELETE | `/{client_id}/{part_number}` | Eliminar parte |
|
||||
| PATCH | `/{client_id}/{part_number}/toggle-status` | Cambiar estatus |
|
||||
| GET | `/{client_id}/{part_number}/basic` | Obtener información básica |
|
||||
| GET | `/{client_id}/{part_number}/regulatory` | Obtener información regulatoria |
|
||||
|
||||
### Módulo Clases (`/classes`)
|
||||
| Método | Endpoint | Descripción |
|
||||
|--------|----------|-------------|
|
||||
| POST | `/` | Crear clase |
|
||||
| GET | `/` | Listar todas con paginación y filtros |
|
||||
| GET | `/client/{client_key}` | Obtener clases por cliente |
|
||||
| GET | `/client/{client_id}` | Obtener clases por cliente |
|
||||
| GET | `/search/fraction/{fraction}` | Buscar por fracción arancelaria |
|
||||
| GET | `/search/material/{material_key}` | Buscar por material |
|
||||
| GET | `/search/unit-measure/{unit_of_measure}` | Buscar por unidad de medida |
|
||||
| GET | `/search/physical-review/{physical_review}` | Buscar por revisión física |
|
||||
| GET | `/statistics` | Obtener estadísticas de clases |
|
||||
| GET | `/{client_key}/{class_code}` | Obtener clase específica |
|
||||
| PUT | `/{client_key}/{class_code}` | Actualizar clase |
|
||||
| DELETE | `/{client_key}/{class_code}` | Eliminar clase |
|
||||
| GET | `/{client_key}/{class_code}/basic` | Obtener información básica |
|
||||
| GET | `/{client_key}/{class_code}/tariff` | Obtener información arancelaria |
|
||||
| GET | `/{client_id}/{class_code}` | Obtener clase específica |
|
||||
| PUT | `/{client_id}/{class_code}` | Actualizar clase |
|
||||
| DELETE | `/{client_id}/{class_code}` | Eliminar clase |
|
||||
| GET | `/{client_id}/{class_code}/basic` | Obtener información básica |
|
||||
| GET | `/{client_id}/{class_code}/tariff` | Obtener información arancelaria |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ El modelo `Part` representa las partes/componentes en los sistemas SCAII, SCAF y
|
||||
- Propósito: Tipo de moneda para el costo unitario
|
||||
|
||||
3. **Con Class (classes)**
|
||||
- Campos: `(client_key, part_class)` → `(client_key, class_code)`
|
||||
- Campos: `(client_id, part_class)` → `(client_id, class_code)`
|
||||
- Relación: Many-to-One (usando primaryjoin complejo)
|
||||
- Propósito: Clasificación de la parte
|
||||
- Atributo: `part_class_info`
|
||||
@@ -34,7 +34,7 @@ El modelo `Class` representa las clases de clasificación en sistemas SCAII y SC
|
||||
- Propósito: Tipo de material de la clase
|
||||
|
||||
2. **Con Part (parts)**
|
||||
- Campos: `(client_key, class_code)` → `(client_key, part_class)`
|
||||
- Campos: `(client_id, class_code)` → `(client_id, part_class)`
|
||||
- Relación: One-to-Many (inversa de la relación en Part)
|
||||
- Propósito: Partes que pertenecen a esta clase
|
||||
- Atributo: `parts`
|
||||
@@ -63,7 +63,7 @@ part = session.query(Part).options(
|
||||
joinedload(Part.currency),
|
||||
joinedload(Part.part_class_info).joinedload(Class.material_type)
|
||||
).filter(
|
||||
Part.client_key == 1,
|
||||
Part.client_id == 1,
|
||||
Part.part_number == "PART001"
|
||||
).first()
|
||||
|
||||
@@ -78,7 +78,7 @@ print(f"Material: {part.part_class_info.material_type.description}")
|
||||
Los DTOs pueden incluir información relacionada:
|
||||
```python
|
||||
class PartDetailResponseDTO(BaseModel):
|
||||
client_key: int
|
||||
client_id: int
|
||||
part_number: str
|
||||
description_spanish: Optional[str]
|
||||
country_name: Optional[str] = None
|
||||
|
||||
Reference in New Issue
Block a user