Refactoriza la estructura del proyecto siguiendo principios de Domain-Driven Design, organizando serializers, API views y servicios por dominios de negocio. Cambios principales: ## Serializers (serializers/) - Dividido serializers.py en módulos por dominio: * products.py: ProductSerializer, ListProductSerializer * customers.py: CustomerSerializer, ListCustomerSerializer * sales.py: SaleSerializer, SaleLineSerializer, CatalogSaleSerializer, etc. * payments.py: ReconciliationJarSerializer, PaymentMethodSerializer * __init__.py: Exporta todos los serializers para mantener compatibilidad ## API Views (api/) - Dividido api_views.py en módulos por dominio: * products.py: ProductView, ProductsFromTrytonView * customers.py: CustomerView, CustomersFromTrytonView * sales.py: SaleView, CatalogSaleView, SaleSummary, SalesForTrytonView, SalesToTrytonView * payments.py: ReconciliateJarView, ReconciliateJarModelView, PaymentMethodView, SalesForReconciliationView * admin.py: AdminCodeValidateView * __init__.py: Exporta todas las vistas para facilitar importaciones ## Services Layer (services/tryton/) - Nueva capa de servicios para lógica de negocio Tryton: * client.py: get_tryton_client(), TrytonSale, TrytonLineSale, configuración * products.py: ProductTrytonService - sincronización de productos * customers.py: CustomerTrytonService - sincronización de clientes * sales.py: SaleTrytonService - sincronización de ventas * __init__.py: Exporta servicios y utilidades ## Actualización de URLs - Actualizado urls.py para importar desde nuevos módulos - Mantiene todas las rutas existentes sin cambios ## Eliminación de archivos antiguos - Eliminado serializers.py (refactorizado a serializers/) - Eliminado api_views.py (refactorizado a api/) ## Beneficios ✅ Cohesión: Código organizado por dominio de negocio ✅ Separación de responsabilidades: API, Serializers y Services separados ✅ Mantenibilidad: Archivos más pequeños y enfocados ✅ Escalabilidad: Fácil agregar nuevos dominios ✅ Testabilidad: Mejor organización para pruebas por dominio ✅ Reutilización: Servicios Tryton pueden usarse desde cualquier vista ## Estructura final: - models/ (ya existía organizado por dominio) - serializers/ (nuevo, organizado por dominio) - api/ (nuevo, organizado por dominio) - services/tryton/ (nuevo, capa de servicios) Tests: 46 tests pasando ✓
80 lines
2.0 KiB
Python
80 lines
2.0 KiB
Python
from django.urls import path, include
|
|
from rest_framework.routers import DefaultRouter
|
|
|
|
from . import views
|
|
from .api import (
|
|
# Products
|
|
ProductView,
|
|
ProductsFromTrytonView,
|
|
# Customers
|
|
CustomerView,
|
|
CustomersFromTrytonView,
|
|
# Sales
|
|
SaleView,
|
|
CatalogSaleView,
|
|
SaleSummary,
|
|
SalesForTrytonView,
|
|
SalesToTrytonView,
|
|
# Payments
|
|
ReconciliateJarView,
|
|
ReconciliateJarModelView,
|
|
PaymentMethodView,
|
|
SalesForReconciliationView,
|
|
# Admin
|
|
AdminCodeValidateView,
|
|
)
|
|
|
|
app_name = "don_confiao"
|
|
|
|
router = DefaultRouter()
|
|
router.register(r"sales", SaleView, basename="sale")
|
|
router.register(r"catalog_sales", CatalogSaleView, basename="catalog_sale")
|
|
router.register(r"customers", CustomerView, basename="customer")
|
|
router.register(r"products", ProductView, basename="product")
|
|
router.register(
|
|
r"reconciliate_jar",
|
|
ReconciliateJarModelView,
|
|
basename="reconciliate_jar",
|
|
)
|
|
|
|
urlpatterns = [
|
|
path("productos", views.products, name="products"),
|
|
path(
|
|
"resumen_compra_json/<int:id>",
|
|
SaleSummary.as_view(),
|
|
name="purchase_json_summary",
|
|
),
|
|
path(
|
|
"payment_methods/all/select_format",
|
|
PaymentMethodView.as_view(),
|
|
name="payment_methods_to_select",
|
|
),
|
|
path(
|
|
"purchases/for_reconciliation",
|
|
SalesForReconciliationView.as_view(),
|
|
name="sales_for_reconciliation",
|
|
),
|
|
path("reconciliate_jar", ReconciliateJarView.as_view()),
|
|
path("api/", include(router.urls)),
|
|
path(
|
|
"api/importar_productos_de_tryton",
|
|
ProductsFromTrytonView.as_view(),
|
|
name="products_from_tryton",
|
|
),
|
|
path(
|
|
"api/importar_clientes_de_tryton",
|
|
CustomersFromTrytonView.as_view(),
|
|
name="customers_from_tryton",
|
|
),
|
|
path(
|
|
"api/enviar_ventas_a_tryton",
|
|
SalesToTrytonView.as_view(),
|
|
name="send_tryton",
|
|
),
|
|
path(
|
|
"api/admin_code/validate/<code>",
|
|
AdminCodeValidateView.as_view(),
|
|
),
|
|
path("api/sales/for_tryton", SalesForTrytonView.as_view()),
|
|
]
|