users.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from __future__ import annotations
  2. from datetime import datetime
  3. from sqlalchemy import Column, DateTime, func
  4. from sqlmodel import Field, SQLModel
  5. class User(SQLModel, table=True):
  6. __tablename__ = "users"
  7. id: int | None = Field(default=None, primary_key=True)
  8. username: str = Field(index=True, unique=True, max_length=255)
  9. password: str = Field(max_length=255)
  10. role: str = Field(default="user", max_length=50)
  11. created_at: datetime | None = Field(
  12. default=None,
  13. sa_column=Column(DateTime, server_default=func.now()),
  14. )
  15. is_active: bool = Field(default=True)
  16. updated_at: datetime | None = Field(
  17. default=None,
  18. sa_column=Column(DateTime, server_default=func.now(), onupdate=func.now()),
  19. )
  20. class OperationLog(SQLModel, table=True):
  21. """操作日志表 - 对应 operation_logs"""
  22. __tablename__ = "operation_logs"
  23. id: int | None = Field(default=None, primary_key=True)
  24. user_id: int = Field(index=True)
  25. username: str = Field(max_length=50)
  26. operation_type: str = Field(max_length=50, index=True)
  27. resource_type: str = Field(max_length=50, index=True)
  28. resource_id: int | None = Field(default=None)
  29. description: str | None = Field(default=None)
  30. ip_address: str | None = Field(default=None, max_length=50)
  31. user_agent: str | None = Field(default=None, max_length=255)
  32. created_at: datetime | None = Field(
  33. default=None,
  34. sa_column=Column(DateTime, server_default=func.now(), index=True),
  35. )