from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime import uuid class SubscriptionPlanBase(BaseModel): name: str = Field(..., min_length=2, max_length=100) description: Optional[str] = None price: Optional[float] = None duration_days: Optional[int] = Field(None, ge=1) max_users_allowed: Optional[int] = Field(None, ge=0) is_public: bool = True status: str = "active" class SubscriptionPlanCreate(SubscriptionPlanBase): access_ids: Optional[List[uuid.UUID]] = [] module_access_ids: Optional[List[uuid.UUID]] = [] class SubscriptionPlanUpdate(BaseModel): name: Optional[str] = Field(None, min_length=2, max_length=100) description: Optional[str] = None price: Optional[float] = None duration_days: Optional[int] = Field(None, ge=1) max_users_allowed: Optional[int] = Field(None, ge=0) is_public: Optional[bool] = None status: Optional[str] = None access_ids: Optional[List[uuid.UUID]] = None module_access_ids: Optional[List[uuid.UUID]] = None class SubscriptionPlanResponse(SubscriptionPlanBase): id: uuid.UUID created_at: datetime updated_at: datetime class Config: from_attributes = True class SubscriptionPlanDetailResponse(SubscriptionPlanResponse): access_ids: List[uuid.UUID] = [] module_access_ids: List[uuid.UUID] = [] class SubscriptionPlanPaginatedResponse(BaseModel): items: List[SubscriptionPlanResponse] total: int page: int page_size: int total_pages: int