본문 바로가기
소프트웨어 마에스트로/BackEnd(Django)

[Django] inbox 로직 변경

by alpakaka 2024. 11. 21.

inbox 및 patch 를 수정해야한다.

이제 하위투두가 무조건 투두에 종속되어서,

투두 date 를 하위투두 date가 따라가도록 수정해야한다.

 

 

 

코드

def update(self, instance, validated_data):
        # Update the fields as usual
        for attr, value in validated_data.items():
            if attr == "patch_rank":
                # If the rank field is provided, update the rank field
                rank = Todo.objects.get_update_rank(
                    instance, value.get("prev_id"), value.get("next_id")
                )
                setattr(instance, "rank", rank)
            elif attr == "date":
                subtodos = SubTodo.objects.filter(todo_id=instance.id).all()
                for subtodo in subtodos:
                    setattr(subtodo, attr, value)
                    subtodo.save()
                setattr(instance, attr, value)
            else:
                setattr(instance, attr, value)

        # Set the updated_at field to the current time
        instance.updated_at = timezone.now()
        instance.save()
        return instance

요렇게 수정해주었다.

 

 

 

테스트 코드

@pytest.mark.django_db
def test_update_todo_date_with_subtodo(
    authenticated_client,
    create_category,
    create_user,
    date,
    content,
):
    todo = Todo.objects.create(
        user_id=create_user,
        date=date,
        due_time=None,
        content=content,
        category_id=create_category,
    )
    subtodo = SubTodo.objects.create(
        todo_id=todo,
        content="Test subtodo",
        date="2024-08-01",
        due_time=None,
        is_completed=False,
    )
    url = reverse("todos")
    data = {
        "todo_id": todo.id,
        "content": "Updated Todo",
        "date": "2024-11-11",
    }
    response = authenticated_client.patch(url, data, format="json")
    assert response.status_code == 200
    assert response.data["content"] == "Updated Todo"
    assert response.data["date"] == "2024-11-11"
    assert subtodo.date == "2024-11-11"

계속 여기에서 subtodo 의 값이 안바뀌어서 왜인가했더니 db refresh 를 진행하지 않아서 그런 듯 했다. 디버깅했을 때는 잘 동작하는 것을 확인했기 떄문에 이 이유라고 생각했고... 넣어주었다.

 

 

성공했다

 

다음으로 할 일은 카테고리 관련일인데, 

새로 만든 유저의 경우 카테고리를 무조건 하나 만들어줘야한다.

그래서 만들어주려고 한다...! 였는데

언어에 따라 카테고리를 다르게 만들어줘야하지 않나 라고 생각해서...

그래서 프론트에게 post 요청을 한번 더 보내도록 변경했다.

아니면 request로 영어인지 한국어인지 받아서 생성해야하기 때문에 좀... 번거롭다고 생각했기 때문이다.