정렬
2024. 5. 8. 21:30ㆍ카테고리 없음
이번 프로젝트는 뉴스 페이지를 제작하는데
나는 뉴스 목록을 정렬하는 역할을 맡았다.
내가 구현하고 싶은 건 이런 것이다.
날짜가 하루 지날때 마다 -5 Point, 댓글 하나당 +3 Point, 좋아요 하나당 +1 Point 포인트 많은 순으로 정렬하기
게시글에 포인트를 부여하고 포인트대로 정렬 하는 로직을 짜면 된다.
어떻게 짜지 ?!?!
지금부터 고민 시작 ~.~
- 각 view로직에 point를 주는 /빼는 로직을 넣는다
- 게시글
- 게시글이 처음 작성시 5포인트를 지급한다.
- 자정이 되면 5포인트를 차감한다.
- 0 포인트가 되면 차감을 멈춘다.
- 댓글
- 댓글 하나당 3포인트를 지급한다.
- 댓글을 삭제해도 포인트는 그대로 유지된다.
- 좋아요
- 좋아요 하나당 1포인트를 지급한다.
- 다른 사용자가 좋아요를 취소해도 포인트는 그대로 유지된다.
- 포인트를 어떻게 지급할 수 있을까?
- 포인트 필드에 저장하기 ?
- 포인트는 포스트 필드와 연결되어있으니까.
- 포인트 필드에는 계속 쌓이고 마지막에 더하는 로직?
- 만약 게시글을 작성한다면 즉시 포인트에 저장한다.
- 숫자를 데이터베이스에 바로 저장이 가능한가?? 그럼 굉장히 쉬워지는데 ㅋㅋㅋㅋ 한 번 해볼까?
- 포인트 저장하는 로직
- 만약에 새 게시물이 생성이 된다면/ 만약, 데이터베이스에 새 게시물이 있다면
- -> 수정! 게시물 생성된 직후 포인트 필드 조회하고 추가하면 되지 않을까?
- 포인트필드에 5를 추가한다
- 저장한다
- 오케 실천 ㄱㄱㄱ
#생성된 게시글 데이터를 obj에 담는다
obj = serializer.save()
obj.point+=5
obj.save()
# 포인트 추가 후 저장
위 코드로 게시글과 댓글은 포인트 지급을 마쳤다. 좋아요 기능은 다른 팀원이 구현하고 있어서 잠시 보류!
이제 게시글에서 포인트 차감 로직을 작성해야한다.
- 게시글
게시글이 처음 작성시 5포인트를 지급한다.- 자정이 되면 5포인트를 차감한다.
- 원래는 샐러리를 이용해서 일정 시간이 되면 함수를 작동하게 만드는 로직을 구현하려고 했다.
- 하지만 샐러리의 벽을 넘지 못 하고.... ㅋㅋㅋㅋㅋㅋㅋㅋ
- django_crontab 으로 노선을 변경했다.
- settings와 cron.py를 새로 만들어준 후 맥 세팅도 고치고 기능 구현을 완료했다.
크론에 대한 건 다음에 새로 정리해서 남기겠다.
크론탭이 궁금하다면 밑에 링크를 가보쟈~
https://hsjoo126.tistory.com/59
Django_Crontab 사용하기, 정해진 시간에 맞춰 함수 실행하기
crontabcrontab은 서버 내의 특정 작업(또는 명령)을 특정 주기로 스스로 실행하도록 하는 것을 뜻한다. 0. 내가 하고싶은 것자정이 될 때마다 포인트 차감하기 1. 크론탭 세팅하기1. 크론탭 설치하
hsjoo126.tistory.com
#settings.py
#언제 이 크론이 작동되는지, 그와 동시에 로그 기록을 남김
CRONJOBS = [
('*/5 * * * *', 'post.cron.update_news_point', '>> /Users/t2023-m0088/Desktop/sparta_news/data.log')
]
#포인트 차감하는 로직/cron.py
from .models import spartanews
def update_news_point():
print('포인트가 차감되었습니다')
posts = spartanews.objects.all()
for post in posts:
post.point -= 5
post.save()
- 0 포인트가 되면 차감을 멈춘다.
- 0포인트가 되면 멈추려고 했는데 어차피 오래될수록 차감이 되는 거고 포인트가 점점 마이너스가 되는 거니까
- 이 상태로 정렬하면 자연스럽게 오래된 뉴스는 맨 밑으로 가게 될 것이다.
- 물론 실제 서비스를 배포한다면 로직을 다시 짜야하겠지만,,,
- 현재는 모든 뉴스가 0포인트가 되고 정렬이 엉망 되는 것보단 나은 것 같다!
댓글 로직에 포인트 추가하면 되는데
음. 왜 난 간단한 걸 못 하는 거지..? 허허 ㅋㅋㅋㅋ
내일 아침에 이어서 해보자~~~
로직 구현 완료