2024-11-18 11:47:19 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
2024-11-19 10:31:20 +00:00
|
|
|
# @Time : 2024/11/19 下午6:09
|
2024-11-18 11:47:19 +00:00
|
|
|
# @Author : 河瞬
|
2024-11-19 10:31:20 +00:00
|
|
|
# @FileName: new_models.py
|
2024-11-18 11:47:19 +00:00
|
|
|
# @Software: PyCharm
|
|
|
|
|
from datetime import datetime
|
2024-11-19 10:31:20 +00:00
|
|
|
from typing import List, Optional
|
2024-11-18 11:47:19 +00:00
|
|
|
|
2024-11-20 08:25:36 +00:00
|
|
|
from sqlmodel import Field, Relationship, SQLModel
|
2024-11-18 11:47:19 +00:00
|
|
|
|
|
|
|
|
|
2024-11-19 10:31:20 +00:00
|
|
|
class Tenant(SQLModel, table=True):
|
2024-11-18 11:47:19 +00:00
|
|
|
__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-18 11:47:19 +00:00
|
|
|
|
|
|
|
|
|
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):
|
2024-11-18 11:47:19 +00:00
|
|
|
__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
|
2024-11-20 13:16:55 +00:00
|
|
|
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-18 11:47:19 +00:00
|
|
|
|
|
|
|
|
|
2024-11-19 10:31:20 +00:00
|
|
|
class Project(SQLModel, table=True):
|
2024-11-18 11:47:19 +00:00
|
|
|
__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)
|