Skip to content

Commit

Permalink
Merge pull request #55 from DowaDream/feat/#46-customReview
Browse files Browse the repository at this point in the history
[FEAT] 맞춤 후기 필터링
  • Loading branch information
separk314 authored Aug 17, 2023
2 parents 070fa08 + 8559f06 commit 903ef53
Show file tree
Hide file tree
Showing 11 changed files with 218 additions and 30 deletions.
2 changes: 1 addition & 1 deletion program/search_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def callByRegistNo(registNo):
temp['recruitStart'] = recruitStart
temp['recruitEnd'] = recruitEnd
temp['recruitInstitute'] = item.get('mnnstNm')
temp['registerInstiute'] = item.get('nanmmbyNm')
temp['registerInstitute'] = item.get('nanmmbyNm')
temp['maxPerson'] = item.get('rcritNmpr')
temp['content']= item.get('progrmCn')
temp['progrmRegistNo'] = registNo
Expand Down
3 changes: 1 addition & 2 deletions program/service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import json
from datetime import datetime

from django.db.models import Count
import json
from pathlib import Path
from django.conf import settings
Expand Down
116 changes: 116 additions & 0 deletions program/tag_code_to_name.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
{
"0100": "생활편의지원",
"0101": "활동보조",
"0102": "이동지원",
"0103": "청결지도",
"0104": "급식지원",
"0105": "식사.반찬지원",
"0199": "기타",

"0200": "주거환경",
"0201": "주거개선",
"0202": "마을공동체활동",
"0299": "기타",

"0300": "상담",
"0301": "말벗.상담",
"0302": "전문상담",
"0399": "기타",

"0400": "교육",
"0401": "방과후 교육",
"0402": "학습지도 교육",
"0403": "특수교육",
"0404": "평생교육",
"0405": "전문교육",
"0406": "진로체험지도",
"0499": "기타",

"0500": "보건의료",
"0501": "간호.간병",
"0502": "의료지원",
"0503": "헌혈",
"0509": "기타",
"0599": "기타",

"0600": "농어촌 봉사",
"0601": "일손지원",
"0699": "기타",

"0700": "문화행사",
"0701": "행사보조",
"0702": "공연활동",
"0703": "캠페인",
"0704": "관광안내",
"0705": "사진촬영",
"0799": "기타",

"0800": "환경보호",
"0801": "환경정화",
"0802": "환경감시",
"0899": "기타",

"0900": "행정보조",
"0901": "사무지원",
"0902": "업무지원",
"0999": "기타",

"1000": "안전.예방",
"1001": "지역안전",
"1002": "교통안전",
"1003": "어린이 안전",
"1004": "청소년 안전",
"1005": "취약계층 안전",
"1006": "안전신고ㆍ활동",
"1099": "기타",

"1100": "공익.인권",
"1101": "인권개선",
"1102": "공익보호",
"1199": "기타",

"1200": "재해ㆍ재난",
"1201": "피해복구",
"1202": "긴급구조",
"1203": "예방접종지원",
"1299": "기타",

"1300": "국제협력.해외봉사",
"1301": "해외봉사",
"1302": "국제행사단체지원",
"1303": "통.번역",
"1399": "기타",

"1400": "멘토링",
"1401": "멘토링",
"1402": "학습",
"1403": "진로적성",
"1404": "취업",
"1405": "창업",
"1406": "기타",

"1500": "기타",
"1501": "기타",

"1700": "자원봉사교육",
"1701": "자원봉사기본교육",
"1702": "자원봉사보수교육",
"1703": "자원봉사전문교육",
"1704": "자원봉사기타교육.관리자교육",
"1705": "자원봉사기타교육.지도자교육",
"1706": "자원봉사기타교육.상담사교육",
"1707": "자원봉사기타교육.수요처교육",
"1708": "자원봉사기타교육.기타교육",

"1800": "국제행사",
"1801": "2018 평창 동계올림픽대회 및 동계패럴림픽대회",
"1802": "광주 세계수영선수권대회",

"1900": "온라인자원봉사",
"1901": "번역 및 통역",
"1902": "상담 및 멘토링",
"1903": "모니터링 활동",
"1904": "캠 페인 및 홍보",
"1905": "전문기술제공",
"1906": "노력활동"
}
18 changes: 18 additions & 0 deletions review/migrations/0010_review_tag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.3 on 2023-08-16 19:19

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("review", "0009_remove_review_region_remove_review_tag"),
]

operations = [
migrations.AddField(
model_name="review",
name="tag",
field=models.CharField(blank=True, max_length=60, verbose_name="봉사 태그"),
),
]
18 changes: 18 additions & 0 deletions review/migrations/0011_review_region.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.3 on 2023-08-17 09:17

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("review", "0010_review_tag"),
]

operations = [
migrations.AddField(
model_name="review",
name="region",
field=models.CharField(blank=True, max_length=60, verbose_name="구군 코드"),
),
]
3 changes: 2 additions & 1 deletion review/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ class Review(BaseModel):
title = models.CharField(max_length=100, verbose_name="제목")
content = models.TextField(verbose_name="내용")
is_public = models.BooleanField(choices=IS_PUBLIC_CHOICES, default=True, verbose_name="공개 여부(공개면 True)")

tag = models.CharField(max_length=60, verbose_name="봉사 태그", blank=True)
region = models.CharField(max_length=60, verbose_name="구군 코드", blank=True)

class Image(models.Model):
image_id = models.AutoField(primary_key=True)
Expand Down
72 changes: 54 additions & 18 deletions review/review_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from .serializers import ReviewSerializer
from .image_service import *
from django.db.models import Count
from user.service import get_userinfo
from program.search_service import callByRegistNo


def post_review(request) -> ResponseDto:
Expand All @@ -15,6 +17,12 @@ def post_review(request) -> ResponseDto:
# Review serializer & save
mutable_data = request.data.copy()
mutable_data['writer'] = request.user.id # 현재 로그인된 user를 writer로

# 봉사 정보 찾아와서 Review DB에 넣어주기
program = callByRegistNo(mutable_data['progrmRegistNo'])
mutable_data['tag'] = program['tagCode']
mutable_data['region'] = program['areaCode']

serializer = ReviewSerializer(data=mutable_data)
if not serializer.is_valid():
return ResponseDto(status=400, msg=serializer.errors)
Expand All @@ -40,6 +48,12 @@ def put_review(request, review) -> ResponseDto:
# Review serializer & save
mutable_data = request.data.copy()
mutable_data['writer'] = request.user.id

# 봉사 정보 찾아와서 Review DB에 넣어주기
program = callByRegistNo(mutable_data['progrmRegistNo'])
mutable_data['tag'] = program['tagCode']
mutable_data['region'] = program['areaCode']

serializer = ReviewSerializer(review, data=mutable_data)
if not serializer.is_valid():
return ResponseDto(status=400, msg=serializer.errors)
Expand All @@ -56,46 +70,67 @@ def put_review(request, review) -> ResponseDto:
return ResponseDto(status=200, data=data, msg=message['ReviewPutSuccess'])


def get_all_review_list() -> ResponseDto:
# Code Refactoring: 반복되는 코드: 리뷰 리스트 조회하기
def get_reviews(reviews):
review_list = []
reviews = Review.objects.filter(is_public=True).order_by('-created_at')
for review in reviews:
images = Image.objects.filter(review__rid=review.rid)
review_data = ReviewSerializer(review).data
review_data["images"] = [str(image.image) for image in images]

# 작성자 이름, 작성자 프로필 가져오기
user = User.objects.get(id=review_data['writer'])
user_info = get_userinfo(user)
review_data['writer_username'] = user.username
review_data['writer_profile_img'] = str(user.profile_img)

review_data['num_cheer'] = get_cheered_review_count(review)
review_data['num_comment'] = get_comment_count(review)

# 맞춤 후기인지 검사
if review_data['tag'] in user_info['user_tags'] or review_data['region'] in user_info['user_regions']:
review_data['is_customized'] = True
else:
review_data['is_customized'] = False

review_list.append(review_data)
return review_list

def get_cheered_review_count(review):
cheered_count = Cheered_Review.objects.filter(review=review).count()
return cheered_count

def get_comment_count(review):
comment_count = Comment.objects.filter(review=review).count()
return comment_count


def get_all_review_list() -> ResponseDto:
reviews = Review.objects.filter(is_public=True).order_by('-created_at')
review_list = get_reviews(reviews)
return ResponseDto(status=200, data=review_list, msg=message['AllReviewListGetSuccess'])


def get_user_review_list(user) -> ResponseDto:
review_list = []
reviews = Review.objects.filter(writer=user).order_by('-created_at') # created_at 필드 기준으로 내림차순 정렬
for review in reviews:
images = Image.objects.filter(review__rid=review.rid)
review_data = ReviewSerializer(review).data
review_data["images"] = [str(image.image) for image in images]
review_list.append(review_data)
review_list = get_reviews(reviews)
return ResponseDto(status=200, data=review_list, msg=message['UserReviewListGetSuccess'])


def get_review_list_in_progrm(progrmRegistNo) -> ResponseDto:
review_list = []
reviews = Review.objects.filter(progrmRegistNo=progrmRegistNo).order_by('-created_at') # created_at 필드 기준으로 내림차순 정렬
for review in reviews:
images = Image.objects.filter(review__rid=review.rid)
review_data = ReviewSerializer(review).data
review_data["images"] = [str(image.image) for image in images]
review_list.append(review_data)
review_list = get_reviews(reviews)
return ResponseDto(status=200, data=review_list, msg=message['ReviewListInProgramGetSuccess'])


def get_one_review(rid) -> ResponseDto:
try:
review = Review.objects.get(rid=rid)
images = Image.objects.filter(review__rid=rid)
review_data = ReviewSerializer(review).data
review_data["images"] = [str(image.image) for image in images]
return ResponseDto(status=200, data=review_data, msg=message['ReviewGetSuccess'])
review_data = get_reviews([review])
# images = Image.objects.filter(review__rid=rid)
# review_data = ReviewSerializer(review).data
# review_data["images"] = [str(image.image) for image in images]
return ResponseDto(status=200, data=review_data[0], msg=message['ReviewGetSuccess'])
except Review.DoesNotExist:
return ResponseDto(status=404, msg=message['ReviewNotFound'])

Expand Down Expand Up @@ -124,6 +159,7 @@ def cheer_review(user, rid) -> ResponseDto:
else:
return ResponseDto(status=400, msg=message['AlreadyCheered'])


def cancel_cheering_review(user, rid) -> ResponseDto:
try:
review = Review.objects.get(rid=rid)
Expand Down
4 changes: 2 additions & 2 deletions review/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@

urlpatterns = [
path('', UserReviewList.as_view()),
path('cheer/', ReviewCheerGetView.as_view()),
path('user/', AuthenticatedUserGetList.as_view()),
path('user/cheer/', ReviewCheerGetView.as_view()),
path('user/cheer/<int:rid>/', ReviewCheerView.as_view()),

path('<int:rid>/', UserReviewDetail.as_view()),
path('<int:rid>/comment/', CommentList.as_view()),
path('<int:rid>/comment/<int:cid>/', CommentDetail.as_view()),
path('<int:rid>/cheer/', ReviewCheerView.as_view()),
]
4 changes: 2 additions & 2 deletions review/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def post(self, request):
'''
## 리뷰 생성
- 필수 필드: images, title, content, is_public, progrmRegistNo
- rid, writer 등의 필드는 백엔드에서 자동으로 넣습니다
- rid, writer, tag, region 등의 필드는 백엔드에서 자동으로 넣습니다
(현재 이미지는 Swagger로 못 보냄, Postman으로 테스트 가능)
- 유저는 봉사 당 하나의 리뷰만 남길 수 있음
- '내가 한 봉사 목록'에 있는 봉사에만 리뷰를 남길 수 있음
Expand Down Expand Up @@ -134,7 +134,7 @@ def put(self, request, rid):
'''
## 리뷰 수정
- 필수 필드: images, title, content, is_public, progrmRegistNo
- rid, writer 등의 필드는 백엔드에서 자동으로 넣습니다
- rid, writer, tag, region 등의 필드는 백엔드에서 자동으로 넣습니다
(현재 이미지는 Swagger로 못 보냄, Postman으로 테스트 가능)
'''
review = get_object_or_404(Review, rid=rid)
Expand Down
5 changes: 2 additions & 3 deletions user/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def google_callback_signup(email, profile_img) -> ResponseDto:


### 유저 관련 ###
def get_userinfo(user) -> ResponseDto:
def get_userinfo(user):
serializer = UserSerializer(user)
user_info = serializer.data

Expand All @@ -84,8 +84,7 @@ def get_userinfo(user) -> ResponseDto:

user_info['user_tags'] = [tag['tag'] for tag in user_tags_serializer.data]
user_info['user_regions'] = [region['region'] for region in user_regions_serializer.data]

return ResponseDto(status=200, data=user_info, msg=message["UserInfoGetSuccess"])
return user_info

def update_username(request):
new_name = request.data.get('username')
Expand Down
3 changes: 2 additions & 1 deletion user/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ def get(self, request):
"user_regions": [ "관심지역3" ]
`
'''
res = get_userinfo(request.user)
user_info = get_userinfo(request.user)
res = ResponseDto(status=200, data=user_info, msg=message["UserInfoGetSuccess"])
return responseFactory(res)

class UsernameView(GenericAPIView):
Expand Down

0 comments on commit 903ef53

Please sign in to comment.