Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

게시물 목록 API 작성 #20

Merged
merged 39 commits into from
Oct 29, 2023
Merged

게시물 목록 API 작성 #20

merged 39 commits into from
Oct 29, 2023

Conversation

simseulnyang
Copy link
Collaborator

@simseulnyang simseulnyang commented Oct 27, 2023

PR 체크리스트

아래 항목을 확인해 주세요:

  • 커밋 메시지가 우리의 가이드라인을 따르고 있는지 확인하세요
  • 변경 사항에 대한 테스트가 추가되었는지 확인하세요 (버그 수정 / 기능 추가)
  • 문서가 추가되거나 업데이트되었는지 확인하세요 (버그 수정 / 기능 추가)

PR 유형

이 PR은 어떤 종류의 변경을 가져오나요?

  • 버그 수정
  • 새로운 기능 추가
  • 코드 스타일 업데이트 (서식, 로컬 변수)
  • 리팩터링 (기능 변경 없음, API 변경 없음)
  • 빌드 관련 변경
  • CI 관련 변경
  • 문서 내용 변경
  • 애플리케이션 / 인프라 변경
  • 기타... 설명:

현재 동작은 무엇인가요?

이슈 번호: #9

새로운 동작은 무엇인가요?

이 PR은 호환성 변경을 도입하나요?

  • 아니요

기타 정보

 - 게시글 타입별로 필터링할 수 있도록 기능 구현
 - created_at, updated_at, like_count, share_count, view_count 필드를 ordering_field로 설정하고 오름차순, 내림차순이 가능하도록 구현
 - title, content 내에서 단어 검색 시 검색할 수 있도록 구현
 - LimitOffsetPagination 기능을 통해 페이지 별 10개로 제한
@simseulnyang simseulnyang linked an issue Oct 27, 2023 that may be closed by this pull request
@simseulnyang
Copy link
Collaborator Author

게시글 기능 관련한 코드를 작성했습니다.
그런데 요구사항 분석할 때만 하더라도 구현은 어느 정도 할 수 있을 거라고 생각했는데
최대한 재혁님께서 구현해주신 코드와 비슷하게 해보려고 시도 하다 보니
너무 어렵고, 어지럽게 코드가 작성이 되어진 것 같습니다😢
리뷰 하시는 분들께 진심으로 죄송합니다

그래도 일단 할 수 있는 부분까지 작성 했습니다. 테스트 코드도 일단 작성할 수 있는 부분까지 작성해 보았습니다.
코드 리뷰 해주시면 확인 하는 즉시 바로 수정하겠습니다.

posts/urls.py Outdated Show resolved Hide resolved
posts/views.py Outdated Show resolved Hide resolved
posts/views.py Outdated Show resolved Hide resolved
posts/views.py Outdated Show resolved Hide resolved
posts/views.py Outdated Show resolved Hide resolved
posts/views.py Outdated Show resolved Hide resolved
Copy link
Collaborator

@Chestnut90 Chestnut90 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!
질문이 있어요.

  1. django_filters가 어떻게 사용되는지 궁금합니다.

posts/views.py Show resolved Hide resolved
@simseulnyang
Copy link
Collaborator Author

simseulnyang commented Oct 27, 2023

수고하셨습니다! 질문이 있어요.

  1. django_filters가 어떻게 사용되는지 궁금합니다.

제가 정확히 질문을 이해했는지 잘 모르겠지만 일단 아래에 답변 드립니다!

django_filters 사용 방법은

  1. 먼저 설치를 해줍니다. (pip의 경우 pip install django-filter 이고 저는 poetry add django-filter 이렇게 설치했습니다.)
  2. settings.py에서 설치한 패키지를 추가해줍니다. ("django_filters")

저는 THIRD_PARTY_APPS에 넣어두었습니다.

이 다음부터는 활용도가 많아서 방법은 개인적으로 선택해야 하는 것 같더라구요.
[DRF 공식문서 'Filtering'] https://www.django-rest-framework.org/api-guide/filtering/
공식문서 참조해서 다양하게 사용하면 될 것 같습니다!

- url을 restful하게 적용할 수 있도록 수정
- postlist 변수명 -> posts로 수정
- q 객체 사용하여 변수 지정
- 불필요한 if문 제거
- 반복적인 if-elif-else문 가독성있도록 수정
- ordering 부분 코드 수정
- test코드 추가 작성
@simseulnyang
Copy link
Collaborator Author

image

일단 swagger를 통해 다음 이미지와 같은 값을 받았습니다.

simseulnyang and others added 2 commits October 28, 2023 00:55
- CI 과정 중 posts/views.py에 173번째 줄에 ordering이라는 변수를 사용하지 않아 제거 했습니다
Related to #9
simseulnyang and others added 5 commits October 28, 2023 01:07
@JaeHyuckSa
Copy link
Contributor

JaeHyuckSa commented Oct 27, 2023

작업하시는 와중에 갑작스러운 커밋을 남기게 되어 죄송합니다. 아래는 CI 에러를 디버깅 과정입니다.
기본 설정을 제대로 하지 않아 일어난 일이라 꼼꼼하게 확인 후 작업하도록 하겠습니다. 불편을 끼쳐드려 죄송합니다.

1 커밋 번호:9afae8d

ERROR: /app/posts/views.py Imports are incorrectly sorted and/or formatted.

문제점: isort job에서 import 정렬이 안됐다고 에러 발생
원인: pre-commit-config.yaml에 작성되어있는 설정과 github actions에 작성되어있는 isort 설정이 다른 것이 원인
해결: github actions에 작성되어있는 isort 설정을 pre-commit에 적용하여 커밋 올려 수정

2 커밋번호: ec5493e

ImportError: 'tests' module incorrectly imported from '/Users/sajh/Documents/project/pre-onboarding/1_repo/posts/tests'. Expected '/Users/sajh/Documents/project/pre-onboarding/1_repo/posts'. Is this module globally installed?

문제점: 테스트를 실행시키려고 했으나 posts 앱에서 테스트 파일들을 못찾음
원인: tests 파일과 tests 폴더가 이중으로 존재하여 인식 못한 것이 원인
해결: 사용하지 않은 tests 파일을 제거

3 커밋번호: 70c494f

django.db.utils.IntegrityError: duplicate key value violates unique constraint "users_username_key"
DETAIL:  Key (username)=() already exists.

문제점: 테스트를 실행 도중 username필드값이 unique값이지만 중복으로 처리됨
원인: 기존에 작성되어있던 테스트 코드에서 유저 모델 중 username이 추가됨에 따라 작성하지 않아 null값으로 동일하게 저장되어 중복처리가 된것이 원인
해결: 기존 테스트 코드에 username을 각각 다른 값으로 저장

@JaeHyuckSa
Copy link
Contributor

JaeHyuckSa commented Oct 27, 2023

image

추가적으로 PostListSerializer로 query를 받아오고 있습니다. response값과 동일하게 받아오는 것으로 확인되는데 구분이 잘 안돼서PostListQuerySerialzier를 따로 만들어 적용하는 것은 어떨까요?

@simseulnyang
Copy link
Collaborator Author

image 추가적으로 PostListSerializer로 query를 받아오고 있습니다. response값과 동일하게 받아오는 것으로 확인되는데 구분이 잘 안돼서PostListQuerySerialzier를 따로 만들어 적용하는 것은 어떨까요?

이 부분은 제가 serializer 활용하는 방법이 부족해서 하나로 사용하게 되었습니다.
재혁님께서 말씀해주신 부분에 대해 한번 살펴보고 적용해볼게요!

simseulnyang and others added 9 commits October 28, 2023 16:56
- PostFilter의 fields에 내림차순 관련 항목 추가
- PostListSerializer에 content 데이터 출력 글자 수 제한 추가
- PostQuerySerializer 구현
- query_serializer 변경
- ordering관련 filter 객체 생성 및 적용
- hashtag가 유저 계정과 동일한지 여부 판별 -> 조건에 따른 필터링 구현
- post_type관련하여 선택 전 모든 타입별 게시글이 조회되도록 설정
- post_type에 따라 필터링 된 게시물 관련 코드 리팩토링 및 관련함수 삭제
- ordering 관련 잘못된 값 선택 시 에러메세지 출력할 수 있도록 리팩토링
- 테스트코드 수정
- user model에 대해 import를 2번 작성하여 중복되어 있음을 확인. 불필요한
  부분을 삭제했습니다.
@simseulnyang
Copy link
Collaborator Author

반복적인 에러 발생으로 PR이 많이 늦어진 점 죄송합니다.. 일단 PR 후 진행되는 테스트는 다 통과했는데
코드리뷰 받고 코드 수정한 부분도 있지만 에러 확인하면서 수정한 부분도 있습니다.
그래서 코드 리뷰가 필요할 것 같습니다.
확인 부탁드립니다!

코드 수정 파일

  • posts/filters.py
  • posts/serializers.py
  • posts/views.py
  • posts/tests/views/test_posts_list_view.py

요구 사항에 있어 추가한 내용

  • content 최대 출력 글자 수 제한 (-> serializer의 PostListSerializer 부분에 추가했습니다.)

Copy link
Collaborator

@Chestnut90 Chestnut90 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!

Django에서 비즈니스 로직 작성에 대한 포스트가 있어서 공유합니다.
https://americanopeople.tistory.com/304

@simseulnyang simseulnyang merged commit d4ad866 into develop Oct 29, 2023
1 check passed
@JaeHyuckSa JaeHyuckSa deleted the feature/issue-009 branch November 19, 2023 09:05
@JaeHyuckSa JaeHyuckSa restored the feature/issue-009 branch November 19, 2023 09:05
@JaeHyuckSa JaeHyuckSa deleted the feature/issue-009 branch November 19, 2023 09:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feature: 게시물 목록(API)
3 participants