Fix test failures and workload/websocket behavior

This commit is contained in:
beabigegg
2026-01-11 08:37:21 +08:00
parent 3bdc6ff1c9
commit f5f870da56
49 changed files with 3006 additions and 1132 deletions

View File

@@ -26,12 +26,16 @@ from app.models.task_dependency import TaskDependency, DependencyType
from app.models.project_member import ProjectMember
from app.models.project_template import ProjectTemplate
# Backward-compatible alias for older imports
ScheduleTrigger = Trigger
__all__ = [
"User", "Role", "Department", "Space", "Project", "TaskStatus", "Task", "WorkloadSnapshot",
"Comment", "Mention", "Notification", "Blocker",
"AuditLog", "AuditAlert", "AuditAction", "SensitivityLevel", "EVENT_SENSITIVITY", "ALERT_EVENTS",
"EncryptionKey", "Attachment", "AttachmentVersion",
"Trigger", "TriggerType", "TriggerLog", "TriggerLogStatus",
"ScheduleTrigger",
"ScheduledReport", "ReportType", "ReportHistory", "ReportHistoryStatus",
"ProjectHealth", "RiskLevel", "ScheduleStatus", "ResourceStatus",
"CustomField", "FieldType", "TaskCustomValue",

View File

@@ -1,5 +1,5 @@
from sqlalchemy import Column, String, Text, Boolean, DateTime, Date, Numeric, Enum, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.orm import relationship, synonym
from sqlalchemy.sql import func
from app.core.database import Base
import enum
@@ -45,3 +45,6 @@ class Project(Base):
# Project membership for cross-department collaboration
members = relationship("ProjectMember", back_populates="project", cascade="all, delete-orphan")
# Backward-compatible alias for older code/tests that use name instead of title
name = synonym("title")

View File

@@ -5,7 +5,7 @@ that can be used to quickly set up new projects.
"""
import uuid
from sqlalchemy import Column, String, Text, Boolean, DateTime, ForeignKey, JSON
from sqlalchemy.orm import relationship
from sqlalchemy.orm import relationship, synonym
from sqlalchemy.sql import func
from app.core.database import Base
@@ -53,6 +53,10 @@ class ProjectTemplate(Base):
# Relationships
owner = relationship("User", foreign_keys=[owner_id])
# Backward-compatible aliases for older code/tests
created_by = synonym("owner_id")
default_statuses = synonym("task_statuses")
# Default template data for system templates
SYSTEM_TEMPLATES = [

View File

@@ -1,5 +1,6 @@
import uuid
from sqlalchemy import Column, String, Integer, Enum, DateTime, ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship
from sqlalchemy.orm import relationship, synonym
from sqlalchemy.sql import func
from app.core.database import Base
import enum
@@ -34,7 +35,7 @@ class TaskDependency(Base):
UniqueConstraint('predecessor_id', 'successor_id', name='uq_predecessor_successor'),
)
id = Column(String(36), primary_key=True)
id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
predecessor_id = Column(
String(36),
ForeignKey("pjctrl_tasks.id", ondelete="CASCADE"),
@@ -66,3 +67,7 @@ class TaskDependency(Base):
foreign_keys=[successor_id],
back_populates="predecessors"
)
# Backward-compatible aliases for legacy field names
task_id = synonym("successor_id")
depends_on_task_id = synonym("predecessor_id")