🎯 저장소 목적: 개발 중 발생한 오류와 해결방법 기록 동일 오류 재발 방지 및 학습 자료 📁 첫 번째 사례: get_materials API JSON 직렬화 오류 해결 PostgreSQL Row 객체 → 딕셔너리 변환 방법 상세한 문제 분석 및 해결 과정 문서화 ✅ 완료: TK-MP-Project 백엔드 API 수정 성공
62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
"""
|
|
get_materials API 응답 오류 수정
|
|
문제: PostgreSQL Row 객체 JSON 직렬화 불가능
|
|
해결: 명시적 딕셔너리 변환
|
|
|
|
날짜: 2024-07-15
|
|
프로젝트: TK-MP-Project
|
|
"""
|
|
|
|
@app.route('/api/materials', methods=['GET'])
|
|
def get_materials():
|
|
"""수정된 자재 목록 조회 API - Row 객체 직렬화 문제 해결"""
|
|
try:
|
|
job_number = request.args.get('job_number')
|
|
|
|
if not job_number:
|
|
return jsonify({
|
|
'success': False,
|
|
'error': 'job_number parameter is required'
|
|
}), 400
|
|
|
|
with get_db_connection() as conn:
|
|
cur = conn.cursor()
|
|
|
|
cur.execute("""
|
|
SELECT
|
|
m.id, m.job_number, m.item_number, m.description,
|
|
m.category, m.quantity, m.unit, m.created_at
|
|
FROM materials m
|
|
WHERE m.job_number = %s
|
|
ORDER BY m.item_number
|
|
""", (job_number,))
|
|
|
|
# 🔧 핵심 수정: Row 객체를 명시적으로 딕셔너리로 변환
|
|
materials = []
|
|
for row in cur.fetchall():
|
|
material = {
|
|
'id': row[0],
|
|
'job_number': row[1],
|
|
'item_number': row[2],
|
|
'description': row[3],
|
|
'category': row[4],
|
|
'quantity': row[5],
|
|
'unit': row[6],
|
|
'created_at': row[7].isoformat() if row[7] else None
|
|
}
|
|
materials.append(material)
|
|
|
|
return jsonify({
|
|
'success': True,
|
|
'data': materials,
|
|
'count': len(materials),
|
|
'job_number': job_number
|
|
})
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error in get_materials: {e}")
|
|
return jsonify({
|
|
'success': False,
|
|
'error': str(e)
|
|
}), 500
|