feat: 완료 사진 HEIC 지원 및 관리함 수정 기능 개선

 새로운 기능:
- iPhone HEIC 사진 업로드 지원 (pillow-heif 라이브러리 추가)
- 완료 사진 업로드/교체 기능
- 완료 코멘트 수정 기능
- 통합 이슈 수정 모달 (진행 중/완료 대기 공통)

🔧 기술적 개선:
- HEIC 파일 자동 감지 및 원본 저장
- Base64 이미지 처리 로직 강화
- 상세한 디버깅 로그 추가
- 프론트엔드 파일 정보 로깅

📝 문서화:
- 배포 가이드 (DEPLOYMENT_GUIDE_20251026.md) 추가
- DB 변경사항 로그 업데이트
- 마이그레이션 스크립트 (020_add_management_completion_fields.sql)

🐛 버그 수정:
- loadManagementData -> initializeManagement 함수명 통일
- 모달 저장 후 즉시 닫히는 문제 해결
- 422 Unprocessable Entity 오류 해결
This commit is contained in:
Hyungi Ahn
2025-10-26 14:18:30 +09:00
parent 20965f8a42
commit e7b51f80a0
11 changed files with 798 additions and 53 deletions

View File

@@ -4,6 +4,109 @@
## 📋 변경사항 목록
### 2025.10.26 - 관리함 완료 신청 정보 수정 기능 추가
**🎯 목적**: 관리함에서 완료 사진 업로드/교체 및 완료 코멘트 수정 기능 구현
#### 📁 파일 변경사항
**1. 백엔드 스키마 추가**
- **파일**: `backend/database/schemas.py`
- **변경내용**: `ManagementUpdateRequest` 클래스 추가
- **코드**:
```python
class ManagementUpdateRequest(BaseModel):
"""관리함에서 이슈 업데이트 요청"""
final_description: Optional[str] = None
final_category: Optional[IssueCategory] = None
solution: Optional[str] = None
responsible_department: Optional[DepartmentType] = None
responsible_person: Optional[str] = None
expected_completion_date: Optional[str] = None
cause_department: Optional[DepartmentType] = None
management_comment: Optional[str] = None
completion_comment: Optional[str] = None
completion_photo: Optional[str] = None # Base64
review_status: Optional[ReviewStatus] = None
```
**2. 백엔드 API 개선**
- **파일**: `backend/routers/management.py`
- **변경내용**: `PUT /api/management/{issue_id}` 엔드포인트에 완료 사진 처리 로직 추가
- **코드**:
```python
if field == 'completion_photo' and value:
# 완료 사진 Base64 처리
from services.file_service import save_base64_image
try:
photo_path = save_base64_image(value, "completion_")
issue.completion_photo_path = photo_path
except Exception as e:
print(f"완료 사진 저장 실패: {e}")
continue
```
**3. 프론트엔드 통합 모달**
- **파일**: `frontend/issues-management.html`
- **변경내용**:
- 진행 중/완료 대기 상태 모두 동일한 수정 가능한 모달 사용
- 완료 사진 업로드/교체 버튼 추가
- 완료 코멘트 텍스트 영역 수정 가능
- `loadManagementData()` → `initializeManagement()` 함수명 수정
**4. DB 마이그레이션**
- **파일**: `backend/migrations/020_add_management_completion_fields.sql`
- **목적**: 완료 신청 관련 컬럼들이 누락된 경우 추가 (이미 존재할 수 있음)
#### 🚀 배포 시 실행 순서
```bash
# 1. 데이터베이스 백업
docker-compose exec postgres pg_dump -U postgres -d m_project > backup_$(date +%Y%m%d_%H%M%S).sql
# 2. 백엔드 코드 배포
git pull origin master
docker-compose down
docker-compose build backend
docker-compose up -d
# 3. DB 마이그레이션 실행
docker-compose exec backend python -c "
import sys
sys.path.append('/app')
import psycopg2
import os
conn = psycopg2.connect(
host=os.getenv('DB_HOST', 'postgres'),
database=os.getenv('DB_NAME', 'm_project'),
user=os.getenv('DB_USER', 'postgres'),
password=os.getenv('DB_PASSWORD', 'password')
)
with open('/app/migrations/020_add_management_completion_fields.sql', 'r', encoding='utf-8') as f:
migration_sql = f.read()
with conn.cursor() as cursor:
cursor.execute(migration_sql)
conn.commit()
print('✅ 마이그레이션 완료')
conn.close()
"
# 4. 배포 후 검증
docker-compose logs backend --tail=20
docker-compose exec postgres psql -U postgres -d m_project -c "SELECT COUNT(*) FROM migration_log WHERE migration_file = '020_add_management_completion_fields.sql';"
```
#### ⚠️ 주의사항
- 완료 신청 관련 컬럼들이 이미 존재할 수 있으므로 마이그레이션 스크립트는 안전하게 작성됨
- 브라우저 캐시 문제로 인해 강제 새로고침(Ctrl+Shift+F5) 필요할 수 있음
- 422 에러 발생 시 백엔드 재시작 필요
---
### 2025.10.26 - 프로젝트별 순번 자동 할당 개선
**🎯 목적**: 수신함에서 진행 중/완료로 상태 변경 시 프로젝트별 순번이 자동 할당되도록 개선