Skip to content

Commit

Permalink
Merge pull request #32 from DowaDream/feat/#29-tagRegion
Browse files Browse the repository at this point in the history
[FEAT] 유저 관심태그/지역 설정
  • Loading branch information
separk314 authored Aug 15, 2023
2 parents 5f1143e + aab2abd commit 1e7aa55
Show file tree
Hide file tree
Showing 16 changed files with 293 additions and 106 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Generated by Django 4.2.3 on 2023-08-14 07:40

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("program", "0002_rename_reviewed_program_interaction_clipped"),
]

operations = [
migrations.AlterField(
model_name="program_interaction",
name="cheered",
field=models.BooleanField(
choices=[(True, "True"), (False, "False")],
default=False,
verbose_name="봉사 응원 여부",
),
),
migrations.AlterField(
model_name="program_interaction",
name="clipped",
field=models.BooleanField(
choices=[(True, "True"), (False, "False")],
default=False,
verbose_name="봉사 스크랩 여부",
),
),
migrations.AlterField(
model_name="program_interaction",
name="participated",
field=models.BooleanField(
choices=[(True, "True"), (False, "False")],
default=False,
verbose_name="봉사 참여 여부",
),
),
migrations.AlterField(
model_name="program_interaction",
name="user",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
verbose_name="사용자",
),
),
]
15 changes: 15 additions & 0 deletions review/migrations/0009_remove_review_region_remove_review_tag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Generated by Django 4.2.3 on 2023-08-14 07:40

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("review", "0008_rename_category_review_tag_remove_review_actplace_and_more"),
]

operations = [
migrations.RemoveField(model_name="review", name="region",),
migrations.RemoveField(model_name="review", name="tag",),
]
4 changes: 2 additions & 2 deletions review/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,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="봉사 태그")
region = models.CharField(max_length=30, verbose_name="봉사 지역(시군구 코드)")
# tag = models.CharField(max_length=60, verbose_name="봉사 태그")
# region = models.CharField(max_length=30, verbose_name="봉사 지역(시군구 코드)")
# actPlace = models.CharField(max_length=60, verbose_name="봉사 장소")


Expand Down
16 changes: 8 additions & 8 deletions review/review_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def put_review(request, review) -> ResponseDto:

def get_all_review_list() -> ResponseDto:
review_list = []
reviews = Review.objects.all()
reviews = Review.objects.all().order_by('-created_at') # created_at 필드 기준으로 내림차순 정렬
for review in reviews:
images = Image.objects.filter(review__rid=review.rid)
review_data = ReviewSerializer(review).data
Expand All @@ -67,14 +67,14 @@ def get_all_review_list() -> ResponseDto:


def get_user_review_list(user) -> ResponseDto:
reviews = Review.objects.filter(writer=user) # 해당 유저가 쓴 리뷰들 가져오기
reviews = Review.objects.filter(writer=user).order_by('-created_at') # created_at 필드 기준으로 내림차순 정렬
serializer = ReviewSerializer(reviews, many=True) # Review 객체들을 직렬화
return ResponseDto(status=200, data=serializer.data, msg=message['UserReviewListGetSuccess'])


def get_review_list_in_progrm(progrmRegistNo) -> ResponseDto:
review_list = []
reviews = Review.objects.filter(progrmRegistNo=progrmRegistNo)
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
Expand All @@ -94,7 +94,7 @@ def get_one_review(rid) -> ResponseDto:
return ResponseDto(status=404, msg=message['ReviewNotFound'])


def delete_review(review):
def delete_review(review) -> ResponseDto:
res = delete_images_db(review.rid)
review.delete()
if res == 204: # 삭제 성공
Expand All @@ -106,23 +106,23 @@ def delete_review(review):


### 리뷰 응원하기
def cheer_review(user, rid):
def cheer_review(user, rid) -> ResponseDto:
try:
review = Review.objects.get(rid=rid)
except Review.DoesNotExist:
return ResponseDto(status=400, msg=message['ReviewNotFound'])
return ResponseDto(status=404, msg=message['ReviewNotFound'])

cheer, is_created = Cheered_Review.objects.get_or_create(writer=user, review=review)
if is_created:
return ResponseDto(status=201, msg=message['CheerReviewSuccess'])
else:
return ResponseDto(status=400, msg=message['AlreadyCheered'])

def cancel_cheering_review(user, rid):
def cancel_cheering_review(user, rid) -> ResponseDto:
try:
review = Review.objects.get(rid=rid)
except Review.DoesNotExist:
return ResponseDto(status=400, msg=message['ReviewNotFound'])
return ResponseDto(status=404, msg=message['ReviewNotFound'])

try:
cheered_review = Cheered_Review.objects.get(writer=user, review=review)
Expand Down
18 changes: 17 additions & 1 deletion review/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,17 @@ class ReviewSerializer(serializers.ModelSerializer):
class Meta:
model = Review
fields = "__all__"

def validate(self, data):
# 봉사 당 하나의 리뷰만 남길 수 있음
writer = data.get('writer')
progrmRegistNo = data.get('progrmRegistNo')
review = Review.objects.filter(writer=writer, progrmRegistNo=progrmRegistNo)
if review.exists():
raise serializers.ValidationError("이미 객체가 존재함")

#
return data

class CommentSerializer(serializers.ModelSerializer):
class Meta:
Expand All @@ -45,4 +56,9 @@ class Meta:
class ReviewSwaggerSerializer(serializers.ModelSerializer):
class Meta:
model = Review
exclude = ('rid', 'writer')
exclude = ('rid', 'writer')

class DefaultSwaggerSerializer(serializers.ModelSerializer):
class Meta:
model = Cheered_Review
fields = []
47 changes: 44 additions & 3 deletions review/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ def post(self, request):
@swagger_auto_schema(
responses= {
200: '리뷰 리스트 조회 성공',
400: 'Bad Request',
401: '권한 없음'
400: 'Bad Request'
})
def get(self, request):
'''
Expand Down Expand Up @@ -151,6 +150,7 @@ def put(self, request, rid):
manual_parameters = [parameter_token],
responses= {
204: message['ReviewDeleteSuccess'],
401: '권한 없음',
404: message['ReviewNotFound']
}
)
Expand Down Expand Up @@ -192,6 +192,7 @@ def get(self, request, rid):
response = {
201: message['CommentCreateSuccess'],
400: 'Bad Request',
401: '권한 없음',
404: message['ReviewNotFound']
}
)
Expand All @@ -214,6 +215,7 @@ class CommentDetail(GenericAPIView):
response = {
200: message['CommentPutSuccess'],
400: 'Bad Request',
401: '권한 없음',
404: message['ReviewNotFound']
}
)
Expand All @@ -234,6 +236,7 @@ def put(self, request, rid, cid):
manual_parameters = [parameter_token],
response = {
204: message['CommentDeleteSuccess'],
401: '권한 없음',
404: 'Not Found'
}
)
Expand All @@ -250,10 +253,22 @@ def delete(self, request, rid, cid):


### 리뷰 응원하기 ###
class ReviewCheerGetView(APIView):
class ReviewCheerGetView(GenericAPIView):
permission_classes = [IsAuthenticated]
serializer_class = DefaultSwaggerSerializer

@swagger_auto_schema(
manual_parameters = [parameter_token],
response = {
200: message['CheeredReviewListGetSuccess'],
401: '권한 없음',
404: 'Not Found'
}
)
def get(self, request):
'''
## 로그인한 유저가 응원한 리뷰 리스트 조회
'''
cheered_reviews = Cheered_Review.objects.filter(writer=request.user)
review_id_list = list(cheered_reviews.values_list('review', flat=True))
res = ResponseDto(status=200, data=review_id_list, msg=message["CheeredReviewListGetSuccess"])
Expand All @@ -262,13 +277,39 @@ def get(self, request):

class ReviewCheerView(APIView):
permission_classes = [IsAuthenticated]
serializer_class = DefaultSwaggerSerializer

@swagger_auto_schema(
manual_parameters = [parameter_token],
response = {
201: message['CheerReviewSuccess'],
400: 'Bad Request',
401: '권한 없음',
404: message['ReviewNotFound']
}
)
def post(self, request, rid):
'''
## 특정 리뷰를 응원하기
'''
user = request.user
res = cheer_review(user, rid)
return responseFactory(res)


@swagger_auto_schema(
manual_parameters = [parameter_token],
response = {
200: message['CancelCheeringSuccess'],
400: 'Bad Request',
401: '권한 없음',
404: message['ReviewNotFound']
}
)
def delete(self, request, rid):
'''
## 특정 리뷰 응원 취소하기
'''
user = request.user
res = cancel_cheering_review(user, rid)
return responseFactory(res)
47 changes: 39 additions & 8 deletions user/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# Generated by Django 4.2.3 on 2023-08-03 21:10
# Generated by Django 4.2.3 on 2023-08-14 07:52

from django.conf import settings
import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone


Expand Down Expand Up @@ -98,14 +100,13 @@ class Migration(migrations.Migration):
),
),
(
"category",
models.CharField(max_length=150, null=True, verbose_name="카테고리"),
),
(
"region",
models.CharField(max_length=150, null=True, verbose_name="지역"),
"profile_img",
models.ImageField(
default=None, upload_to="", verbose_name="구글 프로필 이미지"
),
),
("age", models.IntegerField(null=True, verbose_name="나이")),
("fighting", models.IntegerField(default=0, verbose_name="파이팅 지수")),
("resol_msg", models.CharField(max_length=100, verbose_name="다짐 메세지")),
(
"groups",
models.ManyToManyField(
Expand Down Expand Up @@ -136,4 +137,34 @@ class Migration(migrations.Migration):
},
managers=[("objects", django.contrib.auth.models.UserManager()),],
),
migrations.CreateModel(
name="User_Tag",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("tag", models.CharField(max_length=10, verbose_name="봉사분야코드")),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
verbose_name="유저",
),
),
],
),
migrations.CreateModel(
name="User_Region",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
("region", models.CharField(max_length=20, verbose_name="시군구 코드")),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
verbose_name="유저",
),
),
],
),
]

This file was deleted.

18 changes: 0 additions & 18 deletions user/migrations/0003_alter_user_resol_msg.py

This file was deleted.

Loading

0 comments on commit 1e7aa55

Please sign in to comment.