From d910c1b0b395f3824990f36ee2d91ae4b3f38e70 Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Sat, 20 Dec 2025 22:17:55 +0100 Subject: [PATCH] refactor: move LetzshopExportRequest to schema layer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follows architecture rule: Pydantic schemas belong in models/schema/ - Moved LetzshopExportRequest to models/schema/vendor.py - Added LetzshopExportFileInfo and LetzshopExportResponse schemas - Updated API endpoint to use proper response_model - Removed inline BaseModel import from API file 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- app/api/v1/admin/vendors.py | 11 +++-------- models/schema/vendor.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/app/api/v1/admin/vendors.py b/app/api/v1/admin/vendors.py index 025b978d..57fa8f62 100644 --- a/app/api/v1/admin/vendors.py +++ b/app/api/v1/admin/vendors.py @@ -11,7 +11,6 @@ Architecture Notes: import logging from fastapi import APIRouter, Body, Depends, Path, Query -from pydantic import BaseModel from sqlalchemy.orm import Session from app.api.deps import get_current_admin_api @@ -23,6 +22,8 @@ from app.services.vendor_service import vendor_service from models.database.user import User from models.schema.stats import VendorStatsResponse from models.schema.vendor import ( + LetzshopExportRequest, + LetzshopExportResponse, VendorCreate, VendorCreateResponse, VendorDetailResponse, @@ -366,13 +367,7 @@ def export_vendor_products_letzshop( ) -class LetzshopExportRequest(BaseModel): - """Request body for Letzshop export to pickup folder.""" - - include_inactive: bool = False - - -@router.post("/{vendor_identifier}/export/letzshop") +@router.post("/{vendor_identifier}/export/letzshop", response_model=LetzshopExportResponse) def export_vendor_products_letzshop_to_folder( vendor_identifier: str = Path(..., description="Vendor ID or vendor_code"), request: LetzshopExportRequest = None, diff --git a/models/schema/vendor.py b/models/schema/vendor.py index 8f9e4bbf..f121f6c3 100644 --- a/models/schema/vendor.py +++ b/models/schema/vendor.py @@ -293,3 +293,37 @@ class VendorSummary(BaseModel): # NOTE: Vendor ownership transfer schemas have been removed. # Ownership transfer is now handled at the Company level. # See models/schema/company.py for CompanyTransferOwnership and CompanyTransferOwnershipResponse. + + +# ============================================================================ +# LETZSHOP EXPORT SCHEMAS +# ============================================================================ + + +class LetzshopExportRequest(BaseModel): + """Request body for Letzshop export to pickup folder.""" + + include_inactive: bool = Field( + default=False, + description="Include inactive products in export" + ) + + +class LetzshopExportFileInfo(BaseModel): + """Info about an exported file.""" + + language: str + filename: str | None = None + path: str | None = None + size_bytes: int | None = None + error: str | None = None + + +class LetzshopExportResponse(BaseModel): + """Response from Letzshop export to folder.""" + + success: bool + message: str + vendor_code: str + export_directory: str + files: list[LetzshopExportFileInfo]