diff --git a/app/schemas/activity.py b/app/schemas/activity.py index b0f7ad5..9a10cc7 100644 --- a/app/schemas/activity.py +++ b/app/schemas/activity.py @@ -16,5 +16,6 @@ class Activity(ActivityBase): id: int user_id: int - class Config: - orm_mode = True \ No newline at end of file + model_config = { + "from_attributes": True + } \ No newline at end of file diff --git a/app/schemas/client.py b/app/schemas/client.py index 962e8b2..7be205c 100644 --- a/app/schemas/client.py +++ b/app/schemas/client.py @@ -2,6 +2,9 @@ from typing import List, Optional from pydantic import BaseModel, EmailStr +# Import at the top level to avoid circular imports +from app.schemas.invoice import Invoice + # Shared properties class ClientBase(BaseModel): @@ -29,8 +32,9 @@ class ClientInDBBase(ClientBase): id: int user_id: int - class Config: - orm_mode = True + model_config = { + "from_attributes": True + } # Properties to return via API @@ -45,5 +49,4 @@ class ClientInDB(ClientInDBBase): # Client with invoices class ClientWithInvoices(Client): - from app.schemas.invoice import Invoice invoices: List[Invoice] = [] \ No newline at end of file diff --git a/app/schemas/invoice.py b/app/schemas/invoice.py index 25f30c3..49f7a4c 100644 --- a/app/schemas/invoice.py +++ b/app/schemas/invoice.py @@ -1,7 +1,7 @@ from datetime import date from typing import List, Optional -from pydantic import BaseModel, Field, validator +from pydantic import BaseModel, Field, field_validator # Invoice Item schemas @@ -25,8 +25,9 @@ class InvoiceItemInDBBase(InvoiceItemBase): id: int invoice_id: int - class Config: - orm_mode = True + model_config = { + "from_attributes": True + } class InvoiceItem(InvoiceItemInDBBase): @@ -42,7 +43,7 @@ class InvoiceBase(BaseModel): due_date: Optional[date] = None notes: Optional[str] = None - @validator("status") + @field_validator("status") def status_validator(cls, v): allowed_statuses = ["draft", "sent", "paid"] if v not in allowed_statuses: @@ -67,8 +68,9 @@ class InvoiceInDBBase(InvoiceBase): total_amount: float pdf_path: Optional[str] = None - class Config: - orm_mode = True + model_config = { + "from_attributes": True + } class Invoice(InvoiceInDBBase): diff --git a/app/schemas/user.py b/app/schemas/user.py index 3abc98b..0112a6b 100644 --- a/app/schemas/user.py +++ b/app/schemas/user.py @@ -1,6 +1,9 @@ from typing import List, Optional -from pydantic import BaseModel, EmailStr, Field, validator +from pydantic import BaseModel, EmailStr, Field, field_validator + +# Import at module level to avoid circular imports +from app.schemas.client import Client # Shared properties @@ -17,7 +20,7 @@ class UserBase(BaseModel): class UserCreate(UserBase): password: str = Field(..., min_length=8) - @validator("password") + @field_validator("password") def password_validation(cls, v): if len(v) < 8: raise ValueError("Password must be at least 8 characters long") @@ -30,7 +33,7 @@ class UserUpdate(UserBase): full_name: Optional[str] = None password: Optional[str] = None - @validator("password") + @field_validator("password") def password_validation(cls, v): if v is not None and len(v) < 8: raise ValueError("Password must be at least 8 characters long") @@ -41,8 +44,9 @@ class UserUpdate(UserBase): class UserInDBBase(UserBase): id: int - class Config: - orm_mode = True + model_config = { + "from_attributes": True + } # Properties to return via API @@ -57,5 +61,4 @@ class UserInDB(UserInDBBase): # User with clients class UserWithClients(User): - from app.schemas.client import Client clients: List[Client] = [] \ No newline at end of file