CostEvalPlatform/models.py

47 lines
1.7 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2024-11-19 10:31:20 +00:00
# @Time : 2024/11/19 下午6:09
# @Author : 河瞬
2024-11-19 10:31:20 +00:00
# @FileName: new_models.py
# @Software: PyCharm
from datetime import datetime
2024-11-19 10:31:20 +00:00
from typing import List, Optional
2024-11-20 08:25:36 +00:00
from sqlmodel import Field, Relationship, SQLModel
2024-11-19 10:31:20 +00:00
class Tenant(SQLModel, table=True):
__tablename__ = 'Tenant'
2024-11-19 10:31:20 +00:00
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")
2024-11-19 11:28:05 +00:00
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)
2024-11-19 10:31:20 +00:00
class User(SQLModel, table=True):
__tablename__ = 'User'
2024-11-19 10:31:20 +00:00
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")
2024-11-19 10:31:20 +00:00
tenant: Tenant = Relationship(back_populates="users")
2024-11-19 11:28:05 +00:00
projects: List["Project"] = Relationship(back_populates="users", link_model=ProjectUserLink)
2024-11-19 10:31:20 +00:00
class Project(SQLModel, table=True):
__tablename__ = 'Project'
2024-11-19 10:31:20 +00:00
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")
2024-11-19 11:28:05 +00:00
start_time: datetime = Field(default=datetime.utcnow)
deadline: datetime
users: List["User"] = Relationship(back_populates="projects", link_model=ProjectUserLink)