user.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/usr/bin/env python
  2. """
  3. @Contact : liuyuqi.gov@msn.cn
  4. @Time : 2024/03/22 18:06:30
  5. @License : Copyright © 2017-2022 liuyuqi. All Rights Reserved.
  6. @Desc : user model
  7. """
  8. from sqlmodel import Field, Relationship, SQLModel
  9. class UserBase(SQLModel):
  10. """ Shared properties """
  11. email: str = Field(unique=True, index=True, description="用户邮箱")
  12. user_name: str | None = None
  13. is_active: bool = True
  14. is_superuser: bool = False
  15. class User(UserBase, table=True):
  16. """ User model """
  17. id: int | None = Field(default=None, primary_key=True)
  18. hashed_password: str
  19. nick_name = Field(nullable=True, default=None, description="用户昵称")
  20. sex: str = Field(nullable=True, default=None, description="用户性别")
  21. identity_card: str = Field(nullable=True, default=None, description="用户身份证")
  22. phone: str | None = Field(nullable=True, default=None, description="用户电话")
  23. address: str | None = Field(nullable=True, default=None, description="用户地址")
  24. avatar: str | None = Field(nullable=True, default=None, description="用户头像")
  25. introduction: str | None = Field(nullable=True, default=None, description="用户简介")
  26. create_time: str = Field(nullable=True, default=None, description="创建时间")
  27. update_time: str = Field(nullable=True, default=None, description="更新时间")
  28. last_login_ip: str = Field(nullable=True, default=None, description="最后登录IP")
  29. last_login_time: str = Field(nullable=True, default=None, description="最后登录时间")
  30. money: float = Field(nullable=True, default=None, description="用户余额")
  31. fee: float = Field(nullable=True, default=None, description="用户费用")
  32. max_shop_num: int = Field(nullable=True, default=None, description="最大店铺数量")
  33. items: list = Relationship(back_populates="owner")
  34. class Permission(SQLModel):
  35. """ 权限表 """
  36. id: int = Field(primary_key=True, index=True)
  37. permission_name: str = Field(max_length=50, index=True)
  38. description: str = Field(max_length=255)
  39. create_time: str = Field(max_length=50)
  40. update_time: str = Field(max_length=50)
  41. is_active: bool = Field(default=True)
  42. class Role(SQLModel):
  43. """ 角色表 """
  44. id: int = Field(primary_key=True, index=True)
  45. role_name: str = Field(max_length=50, index=True)
  46. description: str = Field(max_length=255)
  47. create_time: str = Field(max_length=50)
  48. update_time: str = Field(max_length=50)
  49. is_active: bool = Field(default=True)
  50. class UserRole(SQLModel):
  51. """ 用户-角色表 """
  52. id: int = Field(primary_key=True, index=True)
  53. user_id: int = Field(index=True)
  54. role_id: int = Field(index=True)
  55. create_time: str = Field(max_length=50)
  56. update_time: str = Field(max_length=50)
  57. is_active: bool = Field(default=True)
  58. class RolePermission(SQLModel):
  59. """ 角色-权限表 """
  60. id: int = Field(primary_key=True, index=True)
  61. role_id: int = Field(index=True)
  62. permission_id: int = Field(index=True)
  63. create_time: str = Field(max_length=50)
  64. update_time: str = Field(max_length=50)
  65. is_active: bool = Field(default=True)
  66. # Properties to receive via API on creation
  67. class UserCreate(UserBase):
  68. password: str
  69. # TODO replace email str with EmailStr when sqlmodel supports it
  70. class UserCreateOpen(SQLModel):
  71. email: str
  72. password: str
  73. full_name: str | None = None
  74. # Properties to receive via API on update, all are optional
  75. # TODO replace email str with EmailStr when sqlmodel supports it
  76. class UserUpdate(UserBase):
  77. email: str | None = None # type: ignore
  78. password: str | None = None
  79. # TODO replace email str with EmailStr when sqlmodel supports it
  80. class UserUpdateMe(SQLModel):
  81. full_name: str | None = None
  82. email: str | None = None
  83. class UpdatePassword(SQLModel):
  84. current_password: str
  85. new_password: str
  86. # Properties to return via API, id is always required
  87. class UserOut(UserBase):
  88. id: int
  89. class UsersOut(SQLModel):
  90. data: list[UserOut]
  91. count: int