refactor: 완료 반려 필드 분리 및 데이터 구조 개선

- backend: completion_rejection_reason 등 전용 필드 추가
- 기존 management_comment에 섞여있던 완료 반려 내용 분리
- 현황판: 완료 반려 내역 별도 카드로 표시
- 관리함: 해결방안에 완료 반려 내용 제외하여 표시
- DB 마이그레이션: completion_rejected_at, completion_rejected_by_id, completion_rejection_reason 필드 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2025-11-08 11:56:09 +09:00
parent d1ed53cbd7
commit 2fc7d4bc2c
5 changed files with 1937 additions and 82 deletions

View File

@@ -143,7 +143,12 @@ class Issue(Base):
completion_requested_by_id = Column(Integer, ForeignKey("users.id")) # 완료 신청자
completion_photo_path = Column(String(500)) # 완료 사진 경로
completion_comment = Column(Text) # 완료 코멘트
# 완료 반려 관련 필드들
completion_rejected_at = Column(DateTime) # 완료 반려 시간
completion_rejected_by_id = Column(Integer, ForeignKey("users.id")) # 완료 반려자
completion_rejection_reason = Column(Text) # 완료 반려 사유
# Relationships
reporter = relationship("User", back_populates="issues", foreign_keys=[reporter_id])
reviewer = relationship("User", foreign_keys=[reviewed_by_id], overlaps="reviewed_issues")
@@ -183,14 +188,28 @@ class DailyWork(Base):
class ProjectDailyWork(Base):
__tablename__ = "project_daily_works"
id = Column(Integer, primary_key=True, index=True)
date = Column(DateTime, nullable=False, index=True)
project_id = Column(BigInteger, ForeignKey("projects.id"), nullable=False)
hours = Column(Float, nullable=False)
created_by_id = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime, default=get_kst_now)
# Relationships
project = relationship("Project")
created_by = relationship("User")
class DeletionLog(Base):
__tablename__ = "deletion_logs"
id = Column(Integer, primary_key=True, index=True)
entity_type = Column(String(50), nullable=False) # 'issue', 'project', 'daily_work' 등
entity_id = Column(Integer, nullable=False) # 삭제된 엔티티의 ID
entity_data = Column(JSONB, nullable=False) # 삭제된 데이터 전체 (JSON)
deleted_by_id = Column(Integer, ForeignKey("users.id"), nullable=False)
deleted_at = Column(DateTime, default=get_kst_now, nullable=False)
reason = Column(Text) # 삭제 사유 (선택사항)
# Relationships
deleted_by = relationship("User")

View File

@@ -152,7 +152,12 @@ class Issue(IssueBase):
completion_requested_by_id: Optional[int] = None # 완료 신청자
completion_photo_path: Optional[str] = None # 완료 사진 경로
completion_comment: Optional[str] = None # 완료 코멘트
# 완료 반려 관련 필드들
completion_rejected_at: Optional[datetime] = None # 완료 반려 시간
completion_rejected_by_id: Optional[int] = None # 완료 반려자
completion_rejection_reason: Optional[str] = None # 완료 반려 사유
class Config:
from_attributes = True
@@ -200,6 +205,10 @@ class CompletionRequestRequest(BaseModel):
completion_photo: str # 완료 사진 (Base64)
completion_comment: Optional[str] = None # 완료 코멘트
class CompletionRejectionRequest(BaseModel):
"""완료 신청 반려 요청"""
rejection_reason: str # 반려 사유
class ManagementUpdateRequest(BaseModel):
"""관리함에서 이슈 업데이트 요청"""
final_description: Optional[str] = None