Initial commit: WealthWise financial analytics platform
This commit is contained in:
88
backend/app/models/base.py
Normal file
88
backend/app/models/base.py
Normal file
@@ -0,0 +1,88 @@
|
||||
"""Base SQLModel configuration for WealthWise database models.
|
||||
|
||||
This module provides the base model class with common fields and utilities
|
||||
for all database entities.
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from uuid import UUID, uuid4
|
||||
|
||||
from sqlalchemy import func
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
|
||||
class BaseModel(SQLModel):
|
||||
"""Base model with common fields for all database tables.
|
||||
|
||||
All models should inherit from this class to get:
|
||||
- UUID primary key
|
||||
- Created and updated timestamps
|
||||
- Soft delete support
|
||||
|
||||
Attributes:
|
||||
id: Unique identifier (UUID)
|
||||
created_at: Timestamp when record was created
|
||||
updated_at: Timestamp when record was last updated
|
||||
deleted_at: Timestamp for soft deletes (None if active)
|
||||
"""
|
||||
|
||||
id: Optional[UUID] = Field(
|
||||
default_factory=uuid4,
|
||||
primary_key=True,
|
||||
index=True,
|
||||
description="Unique identifier",
|
||||
)
|
||||
|
||||
created_at: Optional[datetime] = Field(
|
||||
default=None,
|
||||
sa_column_kwargs={
|
||||
"server_default": func.now(),
|
||||
"nullable": False,
|
||||
},
|
||||
description="Timestamp when record was created",
|
||||
)
|
||||
|
||||
updated_at: Optional[datetime] = Field(
|
||||
default=None,
|
||||
sa_column_kwargs={
|
||||
"server_default": func.now(),
|
||||
"onupdate": func.now(),
|
||||
"nullable": False,
|
||||
},
|
||||
description="Timestamp when record was last updated",
|
||||
)
|
||||
|
||||
deleted_at: Optional[datetime] = Field(
|
||||
default=None,
|
||||
description="Timestamp for soft delete (None if record is active)",
|
||||
)
|
||||
|
||||
class Config:
|
||||
"""Pydantic configuration."""
|
||||
# Allow arbitrary types for UUID handling
|
||||
arbitrary_types_allowed = True
|
||||
|
||||
|
||||
class TimestampMixin(SQLModel):
|
||||
"""Mixin for models that only need timestamp fields (no ID).
|
||||
|
||||
Use this for association tables or when ID is handled differently.
|
||||
"""
|
||||
|
||||
created_at: Optional[datetime] = Field(
|
||||
default=None,
|
||||
sa_column_kwargs={
|
||||
"server_default": func.now(),
|
||||
"nullable": False,
|
||||
},
|
||||
)
|
||||
|
||||
updated_at: Optional[datetime] = Field(
|
||||
default=None,
|
||||
sa_column_kwargs={
|
||||
"server_default": func.now(),
|
||||
"onupdate": func.now(),
|
||||
"nullable": False,
|
||||
},
|
||||
)
|
||||
Reference in New Issue
Block a user