nex_docus/backend/app/models/project.py

60 lines
2.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""
项目模型
"""
from sqlalchemy import Column, BigInteger, String, Integer, DateTime, SmallInteger, Enum
from sqlalchemy.sql import func
from app.core.database import Base
import enum
class ProjectMemberRole(str, enum.Enum):
"""项目成员角色枚举"""
ADMIN = "admin"
EDITOR = "editor"
VIEWER = "viewer"
class Project(Base):
"""项目表模型"""
__tablename__ = "projects"
id = Column(BigInteger, primary_key=True, autoincrement=True, comment="项目ID")
name = Column(String(100), nullable=False, index=True, comment="项目名称")
description = Column(String(500), comment="项目描述")
storage_key = Column(String(36), nullable=False, unique=True, comment="磁盘存储UUID")
owner_id = Column(BigInteger, nullable=False, index=True, comment="项目所有者ID")
is_public = Column(SmallInteger, default=0, comment="是否公开0-私有 1-公开")
is_template = Column(SmallInteger, default=0, comment="是否模板项目0-否 1-是")
status = Column(SmallInteger, default=1, index=True, comment="状态0-归档 1-活跃")
cover_image = Column(String(255), comment="封面图")
sort_order = Column(Integer, default=0, comment="排序号")
visit_count = Column(Integer, default=0, comment="访问次数")
access_pass = Column(String(100), comment="访问密码(用于分享链接)")
created_at = Column(DateTime, server_default=func.now(), index=True, comment="创建时间")
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间")
def __repr__(self):
return f"<Project(id={self.id}, name='{self.name}')>"
class ProjectMember(Base):
"""项目成员表模型"""
__tablename__ = "project_members"
id = Column(BigInteger, primary_key=True, autoincrement=True, comment="成员ID")
project_id = Column(BigInteger, nullable=False, index=True, comment="项目ID")
user_id = Column(BigInteger, nullable=False, index=True, comment="用户ID")
role = Column(
String(20),
default="viewer",
index=True,
comment="项目角色: admin/editor/viewer"
)
invited_by = Column(BigInteger, comment="邀请人ID")
joined_at = Column(DateTime, server_default=func.now(), comment="加入时间")
def __repr__(self):
return f"<ProjectMember(project_id={self.project_id}, user_id={self.user_id}, role='{self.role}')>"