CostEvalPlatform/models.py

47 lines
1.7 KiB
Python

# -*- coding: utf-8 -*-
# @Time : 2024/11/19 下午6:09
# @Author : 河瞬
# @FileName: new_models.py
# @Software: PyCharm
from datetime import datetime
from typing import List, Optional
from sqlmodel import Field, Relationship, SQLModel
class Tenant(SQLModel, table=True):
__tablename__ = 'Tenant'
id: Optional[int] = Field(default=None, primary_key=True)
name: str = Field(index=True)
users: List["User"] = Relationship(back_populates="tenant")
projects: List["Project"] = Relationship(back_populates="owner")
class ProjectUserLink(SQLModel, table=True):
__tablename__ = 'ProjectUserLink'
project_id: int | None = Field(default=None, foreign_key="Project.id", primary_key=True)
user_id: int | None = Field(default=None, foreign_key="User.id", primary_key=True)
class User(SQLModel, table=True):
__tablename__ = 'User'
id: Optional[int] = Field(default=None, primary_key=True)
username: str = Field(index=True)
password: str
role: int
tenant_id: int|None = Field(default=None, foreign_key="Tenant.id")
tenant: Tenant = Relationship(back_populates="users")
projects: List["Project"] = Relationship(back_populates="users", link_model=ProjectUserLink)
class Project(SQLModel, table=True):
__tablename__ = 'Project'
id: Optional[int] = Field(default=None, primary_key=True)
name: str = Field(index=True)
requirement: str
owner_id: int = Field(default=None, foreign_key="Tenant.id")
owner: Tenant = Relationship(back_populates="projects")
start_time: datetime = Field(default=datetime.utcnow)
deadline: datetime
users: List["User"] = Relationship(back_populates="projects", link_model=ProjectUserLink)