#!/usr/bin/env python """ @Contact : liuyuqi.gov@msn.cn @Time : 2024/03/22 18:06:30 @License : Copyright © 2017-2022 liuyuqi. All Rights Reserved. @Desc : user model """ from sqlmodel import Field, Relationship, SQLModel class UserBase(SQLModel): """ Shared properties """ email: str = Field(unique=True, index=True, description="用户邮箱") user_name: str | None = None is_active: bool = True is_superuser: bool = False class User(UserBase, table=True): """ User model """ id: int | None = Field(default=None, primary_key=True) hashed_password: str nick_name = Field(nullable=True, default=None, description="用户昵称") sex: str = Field(nullable=True, default=None, description="用户性别") identity_card: str = Field(nullable=True, default=None, description="用户身份证") phone: str | None = Field(nullable=True, default=None, description="用户电话") address: str | None = Field(nullable=True, default=None, description="用户地址") avatar: str | None = Field(nullable=True, default=None, description="用户头像") introduction: str | None = Field(nullable=True, default=None, description="用户简介") create_time: str = Field(nullable=True, default=None, description="创建时间") update_time: str = Field(nullable=True, default=None, description="更新时间") last_login_ip: str = Field(nullable=True, default=None, description="最后登录IP") last_login_time: str = Field(nullable=True, default=None, description="最后登录时间") money: float = Field(nullable=True, default=None, description="用户余额") fee: float = Field(nullable=True, default=None, description="用户费用") max_shop_num: int = Field(nullable=True, default=None, description="最大店铺数量") items: list = Relationship(back_populates="owner") class Permission(SQLModel): """ 权限表 """ id: int = Field(primary_key=True, index=True) permission_name: str = Field(max_length=50, index=True) description: str = Field(max_length=255) create_time: str = Field(max_length=50) update_time: str = Field(max_length=50) is_active: bool = Field(default=True) class Role(SQLModel): """ 角色表 """ id: int = Field(primary_key=True, index=True) role_name: str = Field(max_length=50, index=True) description: str = Field(max_length=255) create_time: str = Field(max_length=50) update_time: str = Field(max_length=50) is_active: bool = Field(default=True) class UserRole(SQLModel): """ 用户-角色表 """ id: int = Field(primary_key=True, index=True) user_id: int = Field(index=True) role_id: int = Field(index=True) create_time: str = Field(max_length=50) update_time: str = Field(max_length=50) is_active: bool = Field(default=True) class RolePermission(SQLModel): """ 角色-权限表 """ id: int = Field(primary_key=True, index=True) role_id: int = Field(index=True) permission_id: int = Field(index=True) create_time: str = Field(max_length=50) update_time: str = Field(max_length=50) is_active: bool = Field(default=True) # Properties to receive via API on creation class UserCreate(UserBase): password: str # TODO replace email str with EmailStr when sqlmodel supports it class UserCreateOpen(SQLModel): email: str password: str full_name: str | None = None # Properties to receive via API on update, all are optional # TODO replace email str with EmailStr when sqlmodel supports it class UserUpdate(UserBase): email: str | None = None # type: ignore password: str | None = None # TODO replace email str with EmailStr when sqlmodel supports it class UserUpdateMe(SQLModel): full_name: str | None = None email: str | None = None class UpdatePassword(SQLModel): current_password: str new_password: str # Properties to return via API, id is always required class UserOut(UserBase): id: int class UsersOut(SQLModel): data: list[UserOut] count: int