Review
모델에서 app_id
를 수정하면 game_name
과 header_image
는 자동으로 변경되었지만, categories
필드는 수정된 app_id
에 연동되지 않고 기존 값이 그대로 유지되는 문제가 발생했습니다.
Review
모델의 @property
를 사용하여 game_name
과 header_image
는 동적으로 Game
모델과 매핑되었으나, categories
는 데이터베이스에 저장된 값이 그대로 유지됨.app_id
변경 시 categories
를 자동으로 업데이트하는 로직이 없었음.Review
모델의 save
메서드에 app_id
변경 여부를 확인하는 로직을 추가하여, 변경된 경우 Game
모델의 genres
로 categories
를 업데이트하도록 처리.
def save(self, *args, **kwargs):
"""저장 시 app_id가 변경되면 categories 업데이트"""
original_app_id = None
if self.pk: # 기존에 저장된 객체일 경우
original_app_id = Review.objects.get(pk=self.pk).app_id
if original_app_id != self.app_id: # app_id가 변경된 경우
game = Game.objects.filter(appID=self.app_id).first()
if game:
self.categories = game.genres # 새로운 app_id에 따른 categories 업데이트
super().save(*args, **kwargs)
Review
생성:{
"id": 1,
"content": "Amazing RPG game!",
"app_id": 101,
"categories": ["RPG", "Adventure"]
}
app_id
수정 (101 → 102
):{
"id": 1,
"content": "Amazing RPG game!",
"app_id": 102,
"categories": ["RPG", "Adventure"] # 그대로 유지 (문제)
}
Review
생성:{
"id": 1,
"content": "Amazing RPG game!",
"app_id": 101,
"categories": ["RPG", "Adventure"]
}
app_id
수정 (101 → 102
):{
"id": 1,
"content": "Amazing RPG game!",
"app_id": 102,
"categories": ["Action"] # 자동 업데이트
}
자동 동기화:
app_id
와 연동된 필드가 변경되지 않으면 데이터 일관성이 깨질 가능성이 있음.categories
도 동기화되도록 처리하여 데이터 무결성을 유지.코드 재사용성:
save
메서드에서 처리하여 API 로직과 분리, 다른 상황에서도 동일한 동작을 보장.데이터 무결성:
app_id
가 Game
과 매핑되므로, 연관된 데이터(categories
)도 항상 최신 상태로 유지.요청:
PUT http://127.0.0.1:8000/api/reviews/5/
{
"content": "컨텐츠 수정 테스트 수정 되었습니다.",
"app_id": 320150,
"score": 5.0
}
응답:
{
"id": 5,
"user": 1,
"nickname": "cgg",
"content": "컨텐츠 수정 테스트 수정 되었습니다.",
"app_id": 320150,
"game_name": "Deadlings: Rotten Edition",
"header_image": "https://cdn.akamai.steamstatic.com/steam/apps/320150/header.jpg?t=1447363358",
"score": "5.0",
"categories": [
"Action",
"Adventure",
"Indie"
],
"created_at": "2025-01-14T06:46:48.967737Z",
"updated_at": "2025-01-14T07:46:21.890628Z",
"comments": [
{
"id": 2,
"review": 5,
"user": 1,
"nickname": "cgg",
"content": "댓글 수정 테스트 입니다.",
"created_at": "2025-01-14T07:05:48.369227Z",
"updated_at": "2025-01-14T07:07:28.763864Z"
}
]
}
app_id
변경 시 categories
가 자동으로 업데이트됨.Review
모델의 save
메서드에서 app_id
변경 시 관련 필드(categories
, game_name
, header_image
)를 동기화하도록 처리하여 문제를 해결했습니다. 이로써 데이터베이스의 무결성을 유지하며, 수정된 app_id
에 맞게 연관 데이터가 항상 최신 상태를 반영합니다.