Files
budget-forecast/api/app/category/models.py

61 lines
1.5 KiB
Python

from uuid import UUID, uuid4
from enum import Enum
from typing import Optional
from fastapi_filter.contrib.sqlalchemy import Filter
from sqlmodel import Field, SQLModel, select
class CategoryBase(SQLModel):
name: str = Field(index=True)
class CategoryRead(CategoryBase):
id: UUID | None = Field(default_factory=uuid4, primary_key=True)
class Category(CategoryRead, table=True):
@classmethod
def create(cls, category, session):
category_db = cls.model_validate(category)
session.add(category_db)
session.commit()
session.refresh(category_db)
return category_db
@classmethod
def list(cls, filters):
return filters.filter(select(cls))
@classmethod
def get(cls, session, category_id):
return session.get(Category, category_id)
@classmethod
def update(cls, session, category_db, category_data):
category_db.sqlmodel_update(category_data)
session.add(category_db)
session.commit()
session.refresh(category_db)
return category_db
@classmethod
def delete(cls, session, category):
session.delete(category)
session.commit()
class CategoryWrite(CategoryBase):
pass
class CategoryCreate(CategoryWrite):
pass
class CategoryUpdate(CategoryWrite):
pass
class CategoryFilters(Filter):
name__like: Optional[str] = None
class Constants(Filter.Constants):
model = Category
search_model_fields = ["name"]