Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
e52c99c
modify faker library logging level
Scanf-s Jan 19, 2025
0d8d079
주석 추가
Scanf-s Jan 22, 2025
bf77401
number of orders for specific service API
Scanf-s Jan 22, 2025
82db332
modify service image upload api, add attribute on service image relat…
Scanf-s Jan 22, 2025
ab26aba
black, isort
Scanf-s Jan 22, 2025
75ac665
인프라 문제 해결될 때 까지 CI/CD 비활성화
Scanf-s Jan 23, 2025
50305e1
정상화
Scanf-s Jan 25, 2025
6f52be2
github actions script 수정
Scanf-s Jan 25, 2025
447bbd7
오타 수정
Scanf-s Jan 25, 2025
b471b9e
deploy만 테스트
Scanf-s Jan 25, 2025
fddc450
Merge branch 'main' into dev/order
Scanf-s Jan 25, 2025
95d37b8
deploy만 테스트 2
Scanf-s Jan 25, 2025
6fc6c34
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into dev/o…
Scanf-s Jan 25, 2025
5b1d6ab
Merge branch 'dev/order' of https://github.com/sdp-tech/UPCY_BE into …
Scanf-s Jan 25, 2025
296dc5d
add test code
haeunia Jan 26, 2025
f33895b
CI 추가
Scanf-s Jan 26, 2025
229c8c1
Merge branch 'upcy-14th-backend-dev' of https://github.com/sdp-tech/U…
Scanf-s Jan 26, 2025
6b1d0a7
order status update, delivery status update API 추가
Scanf-s Jan 28, 2025
28a935f
테스트 코드 수정.. 로컬에서는 전부 통과 확인
Scanf-s Jan 28, 2025
0abfbf6
테스트 코드 수정.. 로컬에서는 전부 통과 확인 2
Scanf-s Jan 28, 2025
9692d96
S3 권한 설정 수정
Scanf-s Jan 31, 2025
d47d306
image model 수정 및 image size 제거
Scanf-s Jan 31, 2025
f0d7c4a
code lint
Scanf-s Jan 31, 2025
77fe2cc
충돌 해결
Scanf-s Jan 31, 2025
a7921d6
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into dev/o…
Scanf-s Feb 3, 2025
04b6bc2
remove image_size
Scanf-s Feb 4, 2025
f8a8b92
로거 수정
Scanf-s Feb 4, 2025
0286a62
response body json dump
Scanf-s Feb 4, 2025
113ee4a
fix conflict
Scanf-s Feb 4, 2025
4230d87
fix logger
Scanf-s Feb 4, 2025
e31f2c9
cloudwatch log request body 먹통 문제
Scanf-s Feb 4, 2025
2c5119d
logger 수정
Scanf-s Feb 4, 2025
1506168
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into fix/l…
Scanf-s Feb 4, 2025
153d2ae
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into fix/l…
Scanf-s Feb 4, 2025
28514e7
제발 좀 돼라
Scanf-s Feb 4, 2025
09d928a
Dockerfile 최적화, 시간 설정 변경
Scanf-s Feb 5, 2025
2f0add7
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into fix/l…
Scanf-s Feb 5, 2025
4192a26
locale 변경, 로그 분리좀 해보자
Scanf-s Feb 5, 2025
9c70c85
code lint
Scanf-s Feb 5, 2025
cd3ff64
충돌 해결
Scanf-s Feb 5, 2025
f6602d7
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into fix/l…
Scanf-s Feb 5, 2025
b4dc7dc
settings 수정
Scanf-s Feb 5, 2025
2ca8190
temporary field update 안되던거 수정
Scanf-s Feb 5, 2025
eaa9a3a
url 빼먹은거 추가
Scanf-s Feb 5, 2025
97958a4
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into fix/s…
Scanf-s Feb 5, 2025
13b7ac6
order api 수정
Scanf-s Feb 6, 2025
1ca25ba
Order get api response 구조 수정
Scanf-s Feb 6, 2025
c45fb13
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into fix/o…
Scanf-s Feb 6, 2025
c15bd72
update poetry
Scanf-s Feb 8, 2025
a935aa4
Merge branch 'main' of https://github.com/sdp-tech/UPCY_BE into fix/r…
Scanf-s Feb 8, 2025
0636d95
report api 수정 및 모델 구조 변경
Scanf-s Feb 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion core/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.core.exceptions import ObjectDoesNotExist
from django.db import IntegrityError
from rest_framework import status
from rest_framework.exceptions import ValidationError
from rest_framework.exceptions import NotFound, ValidationError
from rest_framework.response import Response


Expand Down Expand Up @@ -36,6 +36,14 @@ def wrapper(*args, **kwargs):
},
status=status.HTTP_400_BAD_REQUEST,
)
except NotFound as e:
return Response(
data={
"error": "Not Found",
"error_message": str(e),
},
status=status.HTTP_404_NOT_FOUND,
)
except ObjectDoesNotExist as e:
return Response(
data={
Expand Down
10 changes: 0 additions & 10 deletions market/models.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import uuid

from django.conf import settings
from django.contrib.auth.models import User
from django.db import models

from core.models import TimeStampedModel
from market.managers import MarketManager, ServiceManager, ServiceMaterialManager
from users.models.reformer import Reformer


def get_market_thumbnail_upload_path(instance, filename):
Expand Down Expand Up @@ -158,23 +155,16 @@ class Meta:
db_table = "market_service_option_image"


import uuid

from django.db import models


class Report(models.Model):
reported_user = models.ForeignKey(
"users.User",
related_name="reports_received",
on_delete=models.CASCADE,
to_field="id", # UUID 필드 참조
)
reporter_user = models.ForeignKey(
"users.User",
related_name="reports_made",
on_delete=models.CASCADE,
to_field="id", # UUID 필드 참조
)
reason = models.CharField(max_length=255)
details = models.TextField(blank=True, null=True)
Expand Down
12 changes: 11 additions & 1 deletion market/serializers/report_serializer/reporter_serializer.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
from rest_framework import serializers

from market.models import Report
from users.models import User


class ReportSerializer(serializers.ModelSerializer):
class Meta:
model = Report
fields = ["reported_user", "reporter_user", "reason", "details"]
fields = ["reason", "details"]

def create(self, validated_data):
reporter: User = self.context.get("reporter")
reported_user: User = self.context.get("reported_user")
report: Report = Report.objects.create(
reporter_user=reporter, reported_user=reported_user, **validated_data
)
reported_user.update_report_count()
return report
40 changes: 29 additions & 11 deletions market/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,17 +284,35 @@ def test_delete_market_info(self, mock_boto3_client: MagicMock):
self.assertEqual(Market.objects.filter(market_uuid=market_uuid).count(), 0)

def test_report_market(self):
# 마켓 신고가 정상적으로 작동하는 것
response = self.client.post(
path="/api/market/report",
data={
"reported_user_id": self.test_user.id,
"reason": "허위 정보 게시",
"details": "잘못된 정보를 포함한 마켓 설명",
},
)
self.assertEqual(response.data["reported_user"], self.test_user.id)
self.assertEqual(response.data["reason"], "허위 정보 게시")
# 마켓 신고가 정상적으로 작동하는지 확인
for i in range(3):
response = self.customer_client.post(
path="/api/market/report",
data={
"reported_user_id": self.test_user.id,
"reason": "허위 정보 게시",
"details": "잘못된 정보를 포함한 마켓 설명",
},
)
self.assertEqual(response.status_code, 201)
self.test_user.refresh_from_db()
self.assertEqual(self.test_user.report_count, 3)

def test_report_market_if_exceed_threshold(self):
for i in range(5):
response = self.customer_client.post(
path="/api/market/report",
data={
"reported_user_id": self.test_user.id,
"reason": "허위 정보 게시",
"details": "잘못된 정보를 포함한 마켓 설명",
},
)
self.assertEqual(response.status_code, 201)

self.test_user.refresh_from_db()
self.assertEqual(self.test_user.report_count, 5)
self.assertEqual(self.test_user.is_active, False)

def test_get_service_list(self):
# 서비스 리스트 가져오기 테스트
Expand Down
62 changes: 26 additions & 36 deletions market/views/report_views.py
Original file line number Diff line number Diff line change
@@ -1,47 +1,37 @@
# market/views/report_views.py

from rest_framework import status
from rest_framework.exceptions import NotFound
from rest_framework.response import Response
from rest_framework.serializers import ValidationError
from rest_framework.views import APIView

from market.models import Report
from core.exceptions import view_exception_handler
from market.serializers.report_serializer.reporter_serializer import ReportSerializer
from users.models.user import User


class ReportUserView(APIView):
def post(self, request):
data = request.data
try:
reported_user = User.objects.get(id=data["reported_user_id"])
reporter_user = User.objects.get(id=request.user.id)

report: Report = Report.objects.create(
reported_user=reported_user,
reporter_user=reporter_user,
reason=data["reason"],
details=data.get("details", ""),
)
serializer = ReportSerializer(instance=report)

report_count = Report.objects.filter(reported_user=reported_user).count()
serializer.data["report_count"] = report_count

if report_count >= 5:
reported_user.is_active = False
reported_user.save()

return Response(data=serializer.data, status=status.HTTP_200_OK)

return Response(data=serializer.data, status=status.HTTP_201_CREATED)

except User.DoesNotExist:
return Response(
{"status": "error", "message": "사용자를 찾을 수 없습니다."},
status=status.HTTP_404_NOT_FOUND,
)
except Exception as e:
return Response(
data={"status": "error", "details": str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
)
@view_exception_handler
def post(self, request):
# 신고대상
reported_user_id: str = request.data.get("reported_user_id")
if not reported_user_id:
raise ValidationError("reported_user_id is required")
reported_user: User = User.objects.filter(id=reported_user_id).first()
if not reported_user:
raise NotFound("reported_user does not exist")

# 신고자
reporter: User = request.user

# 신고 인스턴스 생성 및 신고 횟수 누적
data = request.data.copy()
data.pop("reported_user_id", None)
serializer = ReportSerializer(
data=request.data,
context={"reporter": reporter, "reported_user": reported_user},
)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(status=status.HTTP_201_CREATED)
Loading