Initial commit
This commit is contained in:
61
skills/api-design-standards/templates/pydantic-schemas.py
Normal file
61
skills/api-design-standards/templates/pydantic-schemas.py
Normal file
@@ -0,0 +1,61 @@
|
||||
# Grey Haven Studio - Pydantic Schema Template
|
||||
# Copy this template for new resource schemas
|
||||
|
||||
from pydantic import BaseModel, EmailStr, Field, ConfigDict, field_validator
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
|
||||
# TODO: Update model name
|
||||
class ResourceBase(BaseModel):
|
||||
"""Shared fields for Resource schemas."""
|
||||
|
||||
# TODO: Add your base fields here
|
||||
name: str = Field(..., min_length=1, max_length=255)
|
||||
description: Optional[str] = None
|
||||
is_active: bool = True
|
||||
|
||||
|
||||
class ResourceCreate(ResourceBase):
|
||||
"""Schema for creating a new resource."""
|
||||
|
||||
# TODO: Add creation-specific fields
|
||||
# Example: password, external_id, etc.
|
||||
|
||||
@field_validator("name")
|
||||
@classmethod
|
||||
def validate_name(cls, v: str) -> str:
|
||||
"""Add custom validation if needed."""
|
||||
if not v.strip():
|
||||
raise ValueError("Name cannot be empty or whitespace")
|
||||
return v.strip()
|
||||
|
||||
|
||||
class ResourceUpdate(BaseModel):
|
||||
"""Schema for updating an existing resource (all fields optional)."""
|
||||
|
||||
# TODO: Add updateable fields (all optional)
|
||||
name: Optional[str] = Field(None, min_length=1, max_length=255)
|
||||
description: Optional[str] = None
|
||||
is_active: Optional[bool] = None
|
||||
|
||||
|
||||
class ResourceRead(ResourceBase):
|
||||
"""Schema for reading resource data (public fields only)."""
|
||||
|
||||
id: str
|
||||
tenant_id: str
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class PaginatedResponse[T](BaseModel):
|
||||
"""Generic paginated response."""
|
||||
|
||||
items: list[T]
|
||||
total: int
|
||||
skip: int
|
||||
limit: int
|
||||
has_more: bool
|
||||
Reference in New Issue
Block a user