swiftops-backend / src /app /models /user_asset_assignment.py
kamau1's picture
fix: sync models and tests with DB asset/account schemas
dd5b6b1
"""
User Asset Assignment Model
"""
from sqlalchemy import Column, String, Boolean, DECIMAL, Text
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime
from app.core.database import Base
import uuid
class UserAssetAssignment(Base):
"""
User Asset Assignment model - Long-term equipment assigned to users
"""
__tablename__ = "user_asset_assignments"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id = Column(UUID(as_uuid=True), nullable=False)
# Asset descriptors
asset_type = Column(Text, nullable=False) # 'PPE', 'Laptop', 'Phone', 'Vehicle', 'Tools'
asset_name = Column(Text, nullable=False)
asset_description = Column(Text)
serial_number = Column(Text)
registration_number = Column(Text)
# Valuation
asset_value = Column(DECIMAL(12, 2))
currency = Column(Text, default='KES')
# Lifecycle
assigned_at = Column(String(50), default=lambda: datetime.utcnow().isoformat())
assigned_by_user_id = Column(UUID(as_uuid=True), nullable=True)
expected_return_at = Column(String(50), nullable=True)
returned_at = Column(String(50), nullable=True)
condition_on_assign = Column(Text)
condition_on_return = Column(Text)
# Status
is_active = Column(Boolean, default=True)
notes = Column(Text)
# Timestamps
created_at = Column(String(50), default=lambda: datetime.utcnow().isoformat())
updated_at = Column(String(50), default=lambda: datetime.utcnow().isoformat())
deleted_at = Column(String(50), nullable=True)
def __repr__(self):
return f"<UserAssetAssignment(user_id='{self.user_id}', asset='{self.asset_name}')>"