refactor: move LetzshopExportRequest to schema layer
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 <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,6 @@ Architecture Notes:
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from fastapi import APIRouter, Body, Depends, Path, Query
|
from fastapi import APIRouter, Body, Depends, Path, Query
|
||||||
from pydantic import BaseModel
|
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from app.api.deps import get_current_admin_api
|
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.database.user import User
|
||||||
from models.schema.stats import VendorStatsResponse
|
from models.schema.stats import VendorStatsResponse
|
||||||
from models.schema.vendor import (
|
from models.schema.vendor import (
|
||||||
|
LetzshopExportRequest,
|
||||||
|
LetzshopExportResponse,
|
||||||
VendorCreate,
|
VendorCreate,
|
||||||
VendorCreateResponse,
|
VendorCreateResponse,
|
||||||
VendorDetailResponse,
|
VendorDetailResponse,
|
||||||
@@ -366,13 +367,7 @@ def export_vendor_products_letzshop(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class LetzshopExportRequest(BaseModel):
|
@router.post("/{vendor_identifier}/export/letzshop", response_model=LetzshopExportResponse)
|
||||||
"""Request body for Letzshop export to pickup folder."""
|
|
||||||
|
|
||||||
include_inactive: bool = False
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/{vendor_identifier}/export/letzshop")
|
|
||||||
def export_vendor_products_letzshop_to_folder(
|
def export_vendor_products_letzshop_to_folder(
|
||||||
vendor_identifier: str = Path(..., description="Vendor ID or vendor_code"),
|
vendor_identifier: str = Path(..., description="Vendor ID or vendor_code"),
|
||||||
request: LetzshopExportRequest = None,
|
request: LetzshopExportRequest = None,
|
||||||
|
|||||||
@@ -293,3 +293,37 @@ class VendorSummary(BaseModel):
|
|||||||
# NOTE: Vendor ownership transfer schemas have been removed.
|
# NOTE: Vendor ownership transfer schemas have been removed.
|
||||||
# Ownership transfer is now handled at the Company level.
|
# Ownership transfer is now handled at the Company level.
|
||||||
# See models/schema/company.py for CompanyTransferOwnership and CompanyTransferOwnershipResponse.
|
# 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]
|
||||||
|
|||||||
Reference in New Issue
Block a user