From 2088e2d55c40053e847d74a334f4642daa8b95cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9B=90=EC=B0=AC?= Date: Tue, 5 Mar 2024 20:29:42 +0900 Subject: [PATCH 01/24] =?UTF-8?q?[fix]=20=EB=AC=B8=EC=9E=A5=20=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=ED=94=84=EB=A5=BC=20=EB=BD=91=EC=A7=80=EC=95=8A?= =?UTF-8?q?=EC=9D=8C=EC=9C=BC=EB=A1=9C=20=EC=97=90=EB=9F=AC=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/textrank.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/diary/textrank.py b/diary/textrank.py index 9876e85..b5bba35 100644 --- a/diary/textrank.py +++ b/diary/textrank.py @@ -86,8 +86,8 @@ def __init__(self, sentence): # 단어 가중치 그래프, 단어 사전 을 저장 && 단어 사전 = {index: 단어} self.words_graph_vocab = np.dot(cnt_vec_mat.T, cnt_vec_mat), {vocab[word]: word for word in vocab} - def get_sent_graph_vocab(self): - return self.sent_graph_vocab + # def get_sent_graph_vocab(self): + # return self.sent_graph_vocab def get_words_graph_vocab(self): return self.words_graph_vocab @@ -120,15 +120,15 @@ def __init__(self, content): # 가중치 그래프 객체 생성 matrix = GraphMatrix(nouns) - # 문장별 가중치 그래프 - sent_graph, snet_vocab = matrix.get_sent_graph_vocab() - # 단어별 가중치 그래프 + # 문장별 가중치 그래프 [문장수, 문장수], {index: 문장} 사전 + # sent_graph, sent_vocab = matrix.get_sent_graph_vocab() + # 단어별 가중치 그래프 [단어수, 단어수], {index: 단어} 사전 words_graph, word_vocab = matrix.get_words_graph_vocab() # (문장, index, 가중치) 리스트 생성 - sent_rank = [(snet_vocab[index], index, weight) for index, weight in Rank.get_ranks(sent_graph).items()] + # sent_rank = [(sent_vocab[index], index, weight) for index, weight in (Rank.get_ranks(sent_graph).items())] # weight 기준으로 정렬 - self.sorted_sent_rank = sorted(sent_rank, key=lambda k: k[2], reverse=True) + # self.sorted_sent_rank = sorted(sent_rank, key=lambda k: k[2], reverse=True) # (단어, index, 가중치) 리스트 생성 word_rank_idx = [(word_vocab[index], index, weight) for index, weight in Rank.get_ranks(words_graph).items()] @@ -136,8 +136,8 @@ def __init__(self, content): self.sorted_word_rank = sorted(word_rank_idx, key=lambda k: k[2], reverse=True) # sent_size 개의 문장 요약 - def summarize(self, sent_size=3): - return [sentence for sentence, index, weight in self.sorted_sent_rank[:sent_size]] + # def summarize(self, sent_size=3): + # return [sentence for sentence, index, weight in self.sorted_sent_rank[:sent_size]] def get_keywords(self, keyword_size=3): # 단어 가중치 상위 word_size개 word만 추출 From fa860d1393dbe3eb04c2ec1f5be7bb8b24edfd1b Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 14:46:30 +0900 Subject: [PATCH 02/24] =?UTF-8?q?[fix]=20=EC=9D=BC=EA=B8=B0=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=EC=8B=9C=202=EB=B2=88=20=EC=A0=80=EC=9E=A5=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/serializers.py | 18 ------------------ diary/views.py | 14 ++++++++------ 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/diary/serializers.py b/diary/serializers.py index a72db12..b220fce 100644 --- a/diary/serializers.py +++ b/diary/serializers.py @@ -58,24 +58,6 @@ class WriteRequest(serializers.Serializer): title = serializers.CharField(max_length=100) content = serializers.CharField() - class Meta: - model = Diary - fields = '__all__' - - def create(self, validated_data): - user_id = validated_data.pop('userId') - try: - user = User.objects.get(pk=user_id) - except User.DoesNotExist: - raise serializers.ValidationError("유저가 존재하지 않습니다.") - - validated_data['user'] = user - content_data = validated_data.pop('content') - diary = Diary.objects.create(**validated_data) - Sentences.objects.create(diary=diary, sentence=content_data) - - return diary - class UpdateRequest(serializers.Serializer): diaryId = serializers.IntegerField() userId = serializers.IntegerField() diff --git a/diary/views.py b/diary/views.py index a4d5563..34df0b4 100644 --- a/diary/views.py +++ b/diary/views.py @@ -47,16 +47,18 @@ def post(self, request): except User.DoesNotExist: return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, status=status.HTTP_400_BAD_REQUEST) - diary = serializer.save() + diary = Diary.objects.create(user=user, title=serializer.validated_data.get('title')) - content = Sentences.objects.create(sentence=serializer.validated_data.get('content'), diary=diary) - memory = TextRank(content.sentence) + content = serializer.validated_data.get('content') + + sentence = Sentences.objects.create(sentence=content, diary=diary) + + memory = TextRank(content=content) question, answer = make_quiz(memory, keyword_size=5) - for q, a in zip(question, answer): - Quizs.objects.create(question=q, answer=a, sentence=content) + Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) - return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(content).data}, status=status.HTTP_201_CREATED) + return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) From 4a0cb47efa20f10888941d52c938ab31eeee39f3 Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 14:51:48 +0900 Subject: [PATCH 03/24] =?UTF-8?q?[fix]=20=EC=9D=BC=EA=B8=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=EC=8B=9C=202=EB=B2=88=20=EC=A0=80=EC=9E=A5=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/serializers.py | 19 ------------------- diary/views.py | 14 ++++++++------ 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/diary/serializers.py b/diary/serializers.py index b220fce..ff17dbc 100644 --- a/diary/serializers.py +++ b/diary/serializers.py @@ -64,25 +64,6 @@ class UpdateRequest(serializers.Serializer): title = serializers.CharField(max_length=100) content = serializers.CharField() - class Meta: - model = Diary - fields = '__all__' - - def create(self, validated_data): - diary_id = validated_data.pop('diaryId') - user_id = validated_data.pop('userId') - try: - user = User.objects.get(pk=user_id) - except User.DoesNotExist: - raise serializers.ValidationError("유저가 존재하지 않습니다.") - - validated_data['user'] = user - content_data = validated_data.pop('content') - new_diary = Diary.objects.create(**validated_data) - Sentences.objects.create(diary=new_diary, sentence=content_data) - - return new_diary - class GetUserRequest(serializers.Serializer): userId = serializers.IntegerField() diff --git a/diary/views.py b/diary/views.py index 34df0b4..1fd95ec 100644 --- a/diary/views.py +++ b/diary/views.py @@ -80,16 +80,18 @@ def post(self, request): deleteDiary = Diary.objects.get(id=diary_id) Diary.delete(deleteDiary) - updateDiary = serializer.save() + diary = Diary.objects.create(user=user, title=serializer.validated_data.get('title')) - content = Sentences.objects.create(sentence=serializer.validated_data.get('content'), diary=updateDiary) - memory = TextRank(content.sentence) + content = serializer.validated_data.get('content') + + sentence = Sentences.objects.create(sentence=content, diary=diary) + + memory = TextRank(content=content) question, answer = make_quiz(memory, keyword_size=5) - for q, a in zip(question, answer): - Quizs.objects.create(question=q, answer=a, sentence=content) + Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) - return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(content).data}, status=status.HTTP_201_CREATED) + return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) except Diary.DoesNotExist: return JsonResponse({'isSuccess': False, 'message': '일기를 찾을 수 없습니다.'}, status=status.HTTP_400_BAD_REQUEST) return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) From 76320ef8ec18383cdd58f2eec74fbfbfe2ea17b9 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 16:28:12 +0900 Subject: [PATCH 04/24] =?UTF-8?q?[fix]=20import,=20=EB=9D=BC=EC=9D=B8=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 59 ++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/diary/views.py b/diary/views.py index 1fd95ec..a81c0fa 100644 --- a/diary/views.py +++ b/diary/views.py @@ -1,19 +1,17 @@ from django.core.handlers.wsgi import WSGIRequest from django.http import HttpResponse, JsonResponse from django.views.decorators.csrf import csrf_exempt +from drf_yasg.utils import swagger_auto_schema +from rest_framework import status from rest_framework.parsers import JSONParser -from rest_framework.views import APIView from rest_framework.response import Response -from rest_framework import status +from rest_framework.views import APIView -from diary.models import Diary, Sentences, Quizs from diary.serializers import * from users.models import User - -from drf_yasg.utils import swagger_auto_schema - from .textrank import TextRank, make_quiz + class DiaryView(APIView): def get(self, request: WSGIRequest) -> HttpResponse: findDiaries = Diary.objects.all() @@ -36,7 +34,7 @@ def post(self, request: WSGIRequest) -> HttpResponse: class WriteView(APIView): - @swagger_auto_schema(operation_description="일기 작성", request_body=WriteRequest, responses={"201":'작성 성공'}) + @swagger_auto_schema(operation_description="일기 작성", request_body=WriteRequest, responses={"201": '작성 성공'}) def post(self, request): serializer = WriteRequest(data=request.data) @@ -45,7 +43,8 @@ def post(self, request): try: user = User.objects.get(id=user_id) except User.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, status=status.HTTP_400_BAD_REQUEST) + return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, + status=status.HTTP_400_BAD_REQUEST) diary = Diary.objects.create(user=user, title=serializer.validated_data.get('title')) @@ -56,15 +55,17 @@ def post(self, request): memory = TextRank(content=content) question, answer = make_quiz(memory, keyword_size=5) - Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) + Quizs.objects.bulk_create( + [Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) + + return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, + status=status.HTTP_201_CREATED) - return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) - return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class UpdateView(APIView): - @swagger_auto_schema(operation_description="일기 수정", request_body=UpdateRequest, responses={"201":'작성 성공'}) + @swagger_auto_schema(operation_description="일기 수정", request_body=UpdateRequest, responses={"201": '작성 성공'}) def post(self, request): serializer = UpdateRequest(data=request.data) @@ -74,7 +75,8 @@ def post(self, request): try: user = User.objects.get(id=user_id) except User.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, status=status.HTTP_400_BAD_REQUEST) + return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, + status=status.HTTP_400_BAD_REQUEST) try: deleteDiary = Diary.objects.get(id=diary_id) @@ -89,16 +91,20 @@ def post(self, request): memory = TextRank(content=content) question, answer = make_quiz(memory, keyword_size=5) - Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) + Quizs.objects.bulk_create( + [Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) - return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) + return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, + status=status.HTTP_201_CREATED) except Diary.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '일기를 찾을 수 없습니다.'}, status=status.HTTP_400_BAD_REQUEST) + return JsonResponse({'isSuccess': False, 'message': '일기를 찾을 수 없습니다.'}, + status=status.HTTP_400_BAD_REQUEST) return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class GetDiarybyUserView(APIView): - @swagger_auto_schema(operation_description="유저의 일기 조회", query_serializer=GetUserRequest, responses={"200":DiarySerializer}) + @swagger_auto_schema(operation_description="유저의 일기 조회", query_serializer=GetUserRequest, + responses={"200": DiarySerializer}) def get(self, request): serializer = GetUserRequest(data=request.query_params) @@ -109,13 +115,13 @@ def get(self, request): serializer = DiarySerializer(diaries, many=True) return JsonResponse(serializer.data, safe=False, status=status.HTTP_200_OK) except User.DoesNotExist: - return JsonResponse({'isSuccess' : False, 'message' : '사용자를 찾을 수 없습니다.'}, status=status.HTTP_201_CREATED) - + return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, status=status.HTTP_201_CREATED) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - + + class GetQuizView(APIView): - @swagger_auto_schema(operation_description="일기회상 퀴즈", query_serializer=GetDiaryRequest, responses={"200":"퀴즈"}) + @swagger_auto_schema(operation_description="일기회상 퀴즈", query_serializer=GetDiaryRequest, responses={"200": "퀴즈"}) def get(self, request): serializer = GetDiaryRequest(data=request.query_params) @@ -124,16 +130,17 @@ def get(self, request): try: diary = Diary.objects.get(id=diary_id) except Diary.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '해당 일기를 찾을 수 없습니다.'}, status=status.HTTP_404_NOT_FOUND) + return JsonResponse({'isSuccess': False, 'message': '해당 일기를 찾을 수 없습니다.'}, + status=status.HTTP_404_NOT_FOUND) sentences = diary.sentences.all() quizs = [] for sentence in sentences: quizs.extend(sentence.quizs.all()) - + serializer = QuizSerializer(quizs, many=True) return JsonResponse(serializer.data, safe=False, status=status.HTTP_200_OK) - - return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) \ No newline at end of file + + return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) From 2686b955c67b4a5120830ab0e0e02ddaf503059d Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 16:45:40 +0900 Subject: [PATCH 05/24] =?UTF-8?q?[fix]=20=EC=95=88=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8A=94=20ViewClass=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/urls.py | 6 ++---- diary/views.py | 26 +------------------------- 2 files changed, 3 insertions(+), 29 deletions(-) diff --git a/diary/urls.py b/diary/urls.py index eb8ea25..f45d28b 100644 --- a/diary/urls.py +++ b/diary/urls.py @@ -1,9 +1,7 @@ -from django.urls import path, include -from rest_framework.routers import DefaultRouter -from .views import DiaryView, WriteView, GetDiarybyUserView, GetQuizView, UpdateView +from django.urls import path +from .views import WriteView, GetDiarybyUserView, GetQuizView, UpdateView urlpatterns = [ - path('', DiaryView.as_view()), path('write', WriteView.as_view()), path('list', GetDiarybyUserView.as_view()), path('quiz', GetQuizView.as_view()), diff --git a/diary/views.py b/diary/views.py index a81c0fa..c463504 100644 --- a/diary/views.py +++ b/diary/views.py @@ -1,9 +1,6 @@ -from django.core.handlers.wsgi import WSGIRequest -from django.http import HttpResponse, JsonResponse -from django.views.decorators.csrf import csrf_exempt +from django.http import JsonResponse from drf_yasg.utils import swagger_auto_schema from rest_framework import status -from rest_framework.parsers import JSONParser from rest_framework.response import Response from rest_framework.views import APIView @@ -12,27 +9,6 @@ from .textrank import TextRank, make_quiz -class DiaryView(APIView): - def get(self, request: WSGIRequest) -> HttpResponse: - findDiaries = Diary.objects.all() - serializer = DiarySerializer(findDiaries, many=True) - return JsonResponse(serializer.data, safe=False) - - @csrf_exempt - def post(self, request: WSGIRequest) -> HttpResponse: - data = JSONParser().parse(request) - request = DiaryCreateRequest(data=data) - is_valid = request.is_valid() - print(request.data) - if is_valid: - findUser = User.objects.get(pk=request.data["userId"]) - newDiary = request.to_diary(findUser) - - return JsonResponse(newDiary.data, status=201) - else: - return JsonResponse(DiarySerializer(data=data).errors, status=400) - - class WriteView(APIView): @swagger_auto_schema(operation_description="일기 작성", request_body=WriteRequest, responses={"201": '작성 성공'}) def post(self, request): From 1169f6d5ae7502a31361d22d7b49b3897b91b3dc Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 17:24:22 +0900 Subject: [PATCH 06/24] =?UTF-8?q?[refactor]=20Quizs=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=EC=9D=84=20Keywords=EC=99=80=20Questions=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/models.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/diary/models.py b/diary/models.py index fae0902..1dc62a7 100644 --- a/diary/models.py +++ b/diary/models.py @@ -20,8 +20,12 @@ class Sentences(BaseModel): diary = models.ForeignKey('diary.Diary', related_name='sentences', on_delete=models.CASCADE) -class Quizs(BaseModel): +class Keywords(BaseModel): + keyword = models.CharField() + + sentence = models.ForeignKey('diary.Sentences', related_name='keywords', on_delete=models.CASCADE) + +class Questions(BaseModel): question = models.TextField() - answer = models.CharField(max_length=50) - sentence = models.ForeignKey('diary.Sentences', related_name='quizs', on_delete=models.CASCADE) \ No newline at end of file + keyword = models.ForeignKey('diary.Keywords', related_name='questions', on_delete=models.CASCADE) \ No newline at end of file From beeb1b1c8cb6ee5875da2d79b1735e0267401d21 Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 17:36:54 +0900 Subject: [PATCH 07/24] =?UTF-8?q?[refactor]=20=EC=9D=BC=EA=B8=B0=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=EA=B3=BC=20=EC=88=98=EC=A0=95=EC=8B=9C=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=EB=90=98=EB=8A=94=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/serializers.py | 15 +++++++++++---- diary/views.py | 12 +++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/diary/serializers.py b/diary/serializers.py index ff17dbc..df4ffe5 100644 --- a/diary/serializers.py +++ b/diary/serializers.py @@ -2,7 +2,7 @@ from users.models import User from users.serializers import UserSafeSerializer -from .models import Diary, Sentences, Quizs +from .models import Diary, Sentences, Keywords, Questions class DiarySerializer(serializers.ModelSerializer): @@ -33,11 +33,18 @@ class Meta: model = Sentences fields = ['id', 'diary', 'sentence'] -class QuizSerializer(serializers.ModelSerializer): - sentences = SentenceSerializer(read_only=True) +class KeywordSerializer(serializers.ModelSerializer): + sentence = SentenceSerializer(read_only=True) class Meta: - model = Quizs + model = Keywords + fields = '__all__' + +class QuestionSerializer(serializers.ModelSerializer): + keyword = KeywordSerializer(read_only=True) + + class Meta: + model = Questions fields = '__all__' class DiaryCreateRequest(serializers.ModelSerializer): diff --git a/diary/views.py b/diary/views.py index 1fd95ec..f8b1c35 100644 --- a/diary/views.py +++ b/diary/views.py @@ -6,7 +6,7 @@ from rest_framework.response import Response from rest_framework import status -from diary.models import Diary, Sentences, Quizs +from diary.models import Diary, Sentences, Keywords, Questions from diary.serializers import * from users.models import User @@ -54,9 +54,10 @@ def post(self, request): sentence = Sentences.objects.create(sentence=content, diary=diary) memory = TextRank(content=content) - question, answer = make_quiz(memory, keyword_size=5) + question, keyword = make_quiz(memory, keyword_size=5) - Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) + keywords = Keywords.objects.bulk_create([Keywords(keyword=k, sentence=sentence) for k in keyword]) + Questions.objects.bulk_create([Questions(question=q, keyword=k) for q, k in zip(question, keywords)]) return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) @@ -87,9 +88,10 @@ def post(self, request): sentence = Sentences.objects.create(sentence=content, diary=diary) memory = TextRank(content=content) - question, answer = make_quiz(memory, keyword_size=5) + question, keyword = make_quiz(memory, keyword_size=5) - Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) + keywords = Keywords.objects.bulk_create([Keywords(keyword=k, sentence=sentence) for k in keyword]) + Questions.objects.bulk_create([Questions(question=q, keyword=k) for q, k in zip(question, keywords)]) return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) except Diary.DoesNotExist: From fca493018d2cc1432e3d6248b749c3026ddc71dd Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 17:48:38 +0900 Subject: [PATCH 08/24] =?UTF-8?q?[refactor]=20=ED=80=B4=EC=A6=88=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=8B=9C=20=EB=B6=88=EB=9F=AC=EC=98=A4?= =?UTF-8?q?=EB=8A=94=20=EA=B0=9D=EC=B2=B4=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/diary/views.py b/diary/views.py index f8b1c35..4854270 100644 --- a/diary/views.py +++ b/diary/views.py @@ -129,13 +129,21 @@ def get(self, request): return JsonResponse({'isSuccess': False, 'message': '해당 일기를 찾을 수 없습니다.'}, status=status.HTTP_404_NOT_FOUND) sentences = diary.sentences.all() - quizs = [] + + q = [] + a = [] for sentence in sentences: - quizs.extend(sentence.quizs.all()) - - serializer = QuizSerializer(quizs, many=True) + keywords = sentence.keywords.all() + a.extend(keywords) + for keyword in keywords: + questions = keyword.questions.all() + q.extend(questions) + + result = [] + for question_obj, keyword_obj in zip(q, a): + result.append({"Q": question_obj.question, "A": keyword_obj.keyword}) - return JsonResponse(serializer.data, safe=False, status=status.HTTP_200_OK) + return JsonResponse({'result': result}, status=status.HTTP_200_OK) return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) \ No newline at end of file From 3a4fb0bb7258b27bd64c78e2eda5be4ef256762b Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 17:51:16 +0900 Subject: [PATCH 09/24] =?UTF-8?q?[refactor]=20migration=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0004_keywords_questions_delete_quizs.py | 43 +++++++++++++++++++ diary/models.py | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 diary/migrations/0004_keywords_questions_delete_quizs.py diff --git a/diary/migrations/0004_keywords_questions_delete_quizs.py b/diary/migrations/0004_keywords_questions_delete_quizs.py new file mode 100644 index 0000000..122c6b4 --- /dev/null +++ b/diary/migrations/0004_keywords_questions_delete_quizs.py @@ -0,0 +1,43 @@ +# Generated by Django 5.0.2 on 2024-03-06 08:50 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('diary', '0003_remove_diary_content_alter_sentences_diary_quizs_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Keywords', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('keyword', models.CharField(max_length=100)), + ('sentence', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='keywords', to='diary.sentences')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Questions', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('question', models.TextField()), + ('keyword', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='diary.keywords')), + ], + options={ + 'abstract': False, + }, + ), + migrations.DeleteModel( + name='Quizs', + ), + ] diff --git a/diary/models.py b/diary/models.py index 1dc62a7..0b7af6a 100644 --- a/diary/models.py +++ b/diary/models.py @@ -21,7 +21,7 @@ class Sentences(BaseModel): diary = models.ForeignKey('diary.Diary', related_name='sentences', on_delete=models.CASCADE) class Keywords(BaseModel): - keyword = models.CharField() + keyword = models.CharField(max_length=100) sentence = models.ForeignKey('diary.Sentences', related_name='keywords', on_delete=models.CASCADE) From 0d6c10f75a8669f8d1caa5f8cf96b45ebbc8159c Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 17:57:00 +0900 Subject: [PATCH 10/24] =?UTF-8?q?[chore]=20baseModel=20=EC=97=90=20ApiResp?= =?UTF-8?q?onse=20Class=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/basemodel.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/config/basemodel.py b/config/basemodel.py index 8c7b0dd..b22417d 100644 --- a/config/basemodel.py +++ b/config/basemodel.py @@ -1,10 +1,23 @@ from django.db import models +from django.http import JsonResponse +from rest_framework import status class BaseModel(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) + # deleted_at = models.DateTimeField(blank=True, null=True) class Meta: abstract = True + + +class ApiResponse: + @staticmethod + def on_success(result, response_status=status.HTTP_200_OK): + return JsonResponse({'isSuccess': True, 'result': result}, status=response_status) + + @staticmethod + def on_fail(message, response_status=status.HTTP_400_BAD_REQUEST): + return JsonResponse({'isSuccess': False, 'message': message}, status=response_status) From 0b0aa0be793c38521fbf797ae9a271e8e5414016 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 17:58:45 +0900 Subject: [PATCH 11/24] =?UTF-8?q?[refactor]=20WriteView.post=20is=5Fvalid?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98=EC=A0=95=EA=B3=BC=20?= =?UTF-8?q?=ED=95=A8=EA=BB=98=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/serializers.py | 51 ++++++++++++++++++++++++++++++++++++++++++-- diary/views.py | 48 ++++++++++++++++++++++++----------------- 2 files changed, 78 insertions(+), 21 deletions(-) diff --git a/diary/serializers.py b/diary/serializers.py index ff17dbc..e8de56b 100644 --- a/diary/serializers.py +++ b/diary/serializers.py @@ -1,4 +1,4 @@ -from rest_framework import serializers +from rest_framework import serializers, status from users.models import User from users.serializers import UserSafeSerializer @@ -12,6 +12,7 @@ class Meta: model = Diary fields = '__all__' + class DiarySimpleSerializer(serializers.ModelSerializer): user = UserSafeSerializer(read_only=True) @@ -19,6 +20,7 @@ class Meta: model = Diary fields = ['id', 'user', 'title'] + class SentenceSerializer(serializers.ModelSerializer): diay = DiarySerializer(read_only=True) @@ -26,6 +28,7 @@ class Meta: model = Sentences fields = '__all__' + class SentenceSimpleSerializer(serializers.ModelSerializer): diary = DiarySimpleSerializer(read_only=True) @@ -33,6 +36,7 @@ class Meta: model = Sentences fields = ['id', 'diary', 'sentence'] + class QuizSerializer(serializers.ModelSerializer): sentences = SentenceSerializer(read_only=True) @@ -40,6 +44,7 @@ class Meta: model = Quizs fields = '__all__' + class DiaryCreateRequest(serializers.ModelSerializer): userId = serializers.IntegerField() @@ -53,19 +58,61 @@ def to_diary(self, user: User) -> DiarySerializer: newDiary.save(user=user) return newDiary + class WriteRequest(serializers.Serializer): userId = serializers.IntegerField() title = serializers.CharField(max_length=100) content = serializers.CharField() + def is_valid(self, raise_exception=False): + super_valid = super().is_valid() + # 유효하지 않다면 False, 400 반환 + if not super_valid: + return False, status.HTTP_400_BAD_REQUEST + + # 유효하다면 userId가 존재하는지 확인 + is_user_exist = User.objects.filter(id=self.data['userId']).exists() + + # 존재하지 않는다면 False, 404 반환 + if not is_user_exist: + self._errors['userId'] = [f'userId: {self.data.get("userId")} 가 존재하지 않습니다.'] + return False, status.HTTP_404_NOT_FOUND + + return True, status.HTTP_200_OK + + class UpdateRequest(serializers.Serializer): diaryId = serializers.IntegerField() userId = serializers.IntegerField() title = serializers.CharField(max_length=100) content = serializers.CharField() + def is_valid(self, raise_exception=False): + super_valid = super().is_valid() + # 유효하지 않다면 False, 400 반환 + if not super_valid: + return False, status.HTTP_400_BAD_REQUEST + + # userId가 존재하는지 확인 + is_user_exist = User.objects.filter(id=self.data['userId']).exists() + # 존재하지 않는다면 False, 404 반환 + if not is_user_exist: + self._errors['userId'] = [f'userId: {self.data.get("userId")} 가 존재하지 않습니다.'] + return False, status.HTTP_404_NOT_FOUND + + # diaryId가 존재하는지 확인 + is_diary_exist = Diary.objects.filter(id=self.data['diaryId']).exists() + # 존재하지 않는다면 False, 404 반환 + if not is_diary_exist: + self._errors['diaryId'] = [f'diaryId: {self.data.get("diaryId")} 가 존재하지 않습니다.'] + return False, status.HTTP_404_NOT_FOUND + + return True, status.HTTP_200_OK + + class GetUserRequest(serializers.Serializer): userId = serializers.IntegerField() + class GetDiaryRequest(serializers.Serializer): - diaryId = serializers.IntegerField() \ No newline at end of file + diaryId = serializers.IntegerField() diff --git a/diary/views.py b/diary/views.py index c463504..acbf018 100644 --- a/diary/views.py +++ b/diary/views.py @@ -1,9 +1,9 @@ from django.http import JsonResponse from drf_yasg.utils import swagger_auto_schema -from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView +from config.basemodel import ApiResponse from diary.serializers import * from users.models import User from .textrank import TextRank, make_quiz @@ -12,32 +12,42 @@ class WriteView(APIView): @swagger_auto_schema(operation_description="일기 작성", request_body=WriteRequest, responses={"201": '작성 성공'}) def post(self, request): - serializer = WriteRequest(data=request.data) + requestSerial = WriteRequest(data=request.data) - if serializer.is_valid(): - user_id = serializer.validated_data.get('userId') - try: - user = User.objects.get(id=user_id) - except User.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, - status=status.HTTP_400_BAD_REQUEST) + isValid, response_status = requestSerial.is_valid() + # 유효성 검사 통과하지 못한 경우 + if not isValid: + return ApiResponse.on_fail(requestSerial.errors, response_status=response_status) - diary = Diary.objects.create(user=user, title=serializer.validated_data.get('title')) + request = requestSerial.validated_data - content = serializer.validated_data.get('content') + # user 가져오기 + user_id = request.get('userId') + findUser = User.objects.get(id=user_id) - sentence = Sentences.objects.create(sentence=content, diary=diary) + # Diary 객체 생성 + newDiary = Diary.objects.create(user=findUser, title=request.get('title')) - memory = TextRank(content=content) - question, answer = make_quiz(memory, keyword_size=5) + sentence = request.get('content') - Quizs.objects.bulk_create( - [Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) + # Sentences 객체 생성 + newSentence = Sentences.objects.create(sentence=sentence, diary=newDiary) - return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, - status=status.HTTP_201_CREATED) + # 키워드 추출 + memory = TextRank(content=sentence) - return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + # 키워드 추출 후 가중치가 높은 키워드 5개로 퀴즈 생성 + question, answer = make_quiz(memory, keyword_size=5) + + # Quizs 객체 생성 + Quizs.objects.bulk_create( + [Quizs(question=q, answer=a, sentence=newSentence) for q, a in zip(question, answer)] + ) + + return ApiResponse.on_success( + result=SentenceSimpleSerializer(newSentence).data, + response_status=status.HTTP_201_CREATED + ) class UpdateView(APIView): From 4d6812bb0eb03941f263e0ec1568c2c36b36c14a Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 18:14:06 +0900 Subject: [PATCH 12/24] =?UTF-8?q?[refactor]=20UpdateView.post=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20is=5Fvalid=20=EC=99=80=20=ED=95=A8?= =?UTF-8?q?=EA=BB=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 52 ++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/diary/views.py b/diary/views.py index acbf018..8b6afcc 100644 --- a/diary/views.py +++ b/diary/views.py @@ -53,39 +53,41 @@ def post(self, request): class UpdateView(APIView): @swagger_auto_schema(operation_description="일기 수정", request_body=UpdateRequest, responses={"201": '작성 성공'}) def post(self, request): - serializer = UpdateRequest(data=request.data) + requestSerial = UpdateRequest(data=request.data) - if serializer.is_valid(): - user_id = serializer.validated_data.get('userId') - diary_id = serializer.validated_data.get('diaryId') - try: - user = User.objects.get(id=user_id) - except User.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, - status=status.HTTP_400_BAD_REQUEST) + isValid, response_status = requestSerial.is_valid() - try: - deleteDiary = Diary.objects.get(id=diary_id) - Diary.delete(deleteDiary) + # 유효성 검사 통과하지 못한 경우 + if not isValid: + return ApiResponse.on_fail(requestSerial.errors, response_status=response_status) - diary = Diary.objects.create(user=user, title=serializer.validated_data.get('title')) + # 유효성 검사 통과한 경우 + request = requestSerial.validated_data + # User 가져오기 + user_id = request.get('userId') + findUser = User.objects.get(id=user_id) - content = serializer.validated_data.get('content') + # Diary 가져오기 + diary_id = request.get('diaryId') + findDiary = Diary.objects.get(id=diary_id) - sentence = Sentences.objects.create(sentence=content, diary=diary) + # Diary와 연관된 모든 Sentence 삭제 + findDiary.sentences.all().delete() - memory = TextRank(content=content) - question, answer = make_quiz(memory, keyword_size=5) + content = request.get('content') + newSentence = Sentences.objects.create(sentence=content, diary=findDiary) - Quizs.objects.bulk_create( - [Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) + memory = TextRank(content=content) + question, answer = make_quiz(memory, keyword_size=5) - return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, - status=status.HTTP_201_CREATED) - except Diary.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '일기를 찾을 수 없습니다.'}, - status=status.HTTP_400_BAD_REQUEST) - return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + Quizs.objects.bulk_create( + [Quizs(question=q, answer=a, sentence=newSentence) for q, a in zip(question, answer)] + ) + + return ApiResponse.on_success( + result=SentenceSimpleSerializer(newSentence).data, + response_status=status.HTTP_201_CREATED + ) class GetDiarybyUserView(APIView): From eb3804219d54442df6ffb9aeba7abe1849e6a8b9 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 18:32:09 +0900 Subject: [PATCH 13/24] =?UTF-8?q?[refactor]=20GetQuizView.get=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20is=5Fvalid=20=EC=99=80=20=ED=95=A8?= =?UTF-8?q?=EA=BB=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/serializers.py | 15 +++++++++++++++ diary/views.py | 38 ++++++++++++++++++++------------------ 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/diary/serializers.py b/diary/serializers.py index e8de56b..02c1d9b 100644 --- a/diary/serializers.py +++ b/diary/serializers.py @@ -116,3 +116,18 @@ class GetUserRequest(serializers.Serializer): class GetDiaryRequest(serializers.Serializer): diaryId = serializers.IntegerField() + + def is_valid(self, raise_exception=False): + super_valid = super().is_valid() + # 유효하지 않다면 False, 400 반환 + if not super_valid: + return False, status.HTTP_400_BAD_REQUEST + + # diaryId가 존재하는지 확인 + is_diary_exist = Diary.objects.filter(id=self.data['diaryId']).exists() + # 존재하지 않는다면 False, 404 반환 + if not is_diary_exist: + self._errors['diaryId'] = [f'diaryId: {self.data.get("diaryId")} 가 존재하지 않습니다.'] + return False, status.HTTP_404_NOT_FOUND + + return True, status.HTTP_200_OK \ No newline at end of file diff --git a/diary/views.py b/diary/views.py index 8b6afcc..b957248 100644 --- a/diary/views.py +++ b/diary/views.py @@ -63,9 +63,6 @@ def post(self, request): # 유효성 검사 통과한 경우 request = requestSerial.validated_data - # User 가져오기 - user_id = request.get('userId') - findUser = User.objects.get(id=user_id) # Diary 가져오기 diary_id = request.get('diaryId') @@ -109,26 +106,31 @@ def get(self, request): class GetQuizView(APIView): - @swagger_auto_schema(operation_description="일기회상 퀴즈", query_serializer=GetDiaryRequest, responses={"200": "퀴즈"}) + @swagger_auto_schema(operation_description="일기회상 퀴즈", query=GetDiaryRequest, + responses={"200": "퀴즈"}) def get(self, request): - serializer = GetDiaryRequest(data=request.query_params) + requestSerial = GetDiaryRequest(data=request.query_params) - if serializer.is_valid(): - diary_id = serializer.validated_data.get('diaryId') - try: - diary = Diary.objects.get(id=diary_id) - except Diary.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '해당 일기를 찾을 수 없습니다.'}, - status=status.HTTP_404_NOT_FOUND) + isValid, response_status = requestSerial.is_valid() + if not isValid: + return ApiResponse.on_fail(requestSerial.errors, response_status=response_status) - sentences = diary.sentences.all() - quizs = [] + # 유효성 검사 통과한 경우 + request = requestSerial.validated_data - for sentence in sentences: - quizs.extend(sentence.quizs.all()) + # Diary 가져오기 + diary_id = request.get('diaryId') + findDiary = Diary.objects.get(id=diary_id) - serializer = QuizSerializer(quizs, many=True) + # Diary와 연관된 모든 Sentence 가져오기 + sentences = findDiary.sentences.all() - return JsonResponse(serializer.data, safe=False, status=status.HTTP_200_OK) + # 모든 Sentence와 연관된 Quiz 가져오기 == [Quizs, Quizs, Quizs, ...] + quizzes = sum([sentence.quizs.all() for sentence in sentences], []) + + return ApiResponse.on_success( + result=QuizSerializer(quizzes, many=True).data, + response_status=status.HTTP_200_OK + ) return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) From 28385309d3720bb1509a5bda60e75c755bb41ec8 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 18:35:46 +0900 Subject: [PATCH 14/24] =?UTF-8?q?[refactor]=20GetDiaryByUserView.get=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20is=5Fvalid=20=EC=99=80=20?= =?UTF-8?q?=ED=95=A8=EA=BB=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/serializers.py | 15 +++++++++++++++ diary/urls.py | 4 ++-- diary/views.py | 42 ++++++++++++++++++++++++++---------------- 3 files changed, 43 insertions(+), 18 deletions(-) diff --git a/diary/serializers.py b/diary/serializers.py index 02c1d9b..34d32bc 100644 --- a/diary/serializers.py +++ b/diary/serializers.py @@ -113,6 +113,21 @@ def is_valid(self, raise_exception=False): class GetUserRequest(serializers.Serializer): userId = serializers.IntegerField() + def is_valid(self, raise_exception=False): + super_valid = super().is_valid() + # 유효하지 않다면 False, 400 반환 + if not super_valid: + return False, status.HTTP_400_BAD_REQUEST + + # userId가 존재하는지 확인 + is_user_exist = User.objects.filter(id=self.data['userId']).exists() + # 존재하지 않는다면 False, 404 반환 + if not is_user_exist: + self._errors['userId'] = [f'userId: {self.data.get("userId")} 가 존재하지 않습니다.'] + return False, status.HTTP_404_NOT_FOUND + + return True, status.HTTP_200_OK + class GetDiaryRequest(serializers.Serializer): diaryId = serializers.IntegerField() diff --git a/diary/urls.py b/diary/urls.py index f45d28b..ed90009 100644 --- a/diary/urls.py +++ b/diary/urls.py @@ -1,9 +1,9 @@ from django.urls import path -from .views import WriteView, GetDiarybyUserView, GetQuizView, UpdateView +from .views import WriteView, GetDiaryByUserView, GetQuizView, UpdateView urlpatterns = [ path('write', WriteView.as_view()), - path('list', GetDiarybyUserView.as_view()), + path('list', GetDiaryByUserView.as_view()), path('quiz', GetQuizView.as_view()), path('update', UpdateView.as_view()) ] diff --git a/diary/views.py b/diary/views.py index b957248..41180a3 100644 --- a/diary/views.py +++ b/diary/views.py @@ -1,6 +1,4 @@ -from django.http import JsonResponse from drf_yasg.utils import swagger_auto_schema -from rest_framework.response import Response from rest_framework.views import APIView from config.basemodel import ApiResponse @@ -87,22 +85,32 @@ def post(self, request): ) -class GetDiarybyUserView(APIView): - @swagger_auto_schema(operation_description="유저의 일기 조회", query_serializer=GetUserRequest, - responses={"200": DiarySerializer}) +class GetDiaryByUserView(APIView): + @swagger_auto_schema(operation_description="유저의 일기 조회", query=GetUserRequest, + response={"200": DiarySerializer}) def get(self, request): - serializer = GetUserRequest(data=request.query_params) + requestSerial = GetUserRequest(data=request.query_params) - if serializer.is_valid(): - try: - user = User.objects.get(id=serializer.validated_data.get('userId')) - diaries = Diary.objects.filter(user=user) - serializer = DiarySerializer(diaries, many=True) - return JsonResponse(serializer.data, safe=False, status=status.HTTP_200_OK) - except User.DoesNotExist: - return JsonResponse({'isSuccess': False, 'message': '사용자를 찾을 수 없습니다.'}, status=status.HTTP_201_CREATED) + isValid, response_status = requestSerial.is_valid() + + # 유효성 검사 통과하지 못한 경우 + if not isValid: + return ApiResponse.on_fail(requestSerial.errors, response_status=response_status) + + # 유효성 검사 통과한 경우 + request = requestSerial.validated_data - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + # User 가져오기 + user_id = request.get('userId') + findUser = User.objects.get(id=user_id) + + # User와 연관된 모든 Diary 가져오기 + findDiaries = Diary.objects.filter(user=findUser) + + return ApiResponse.on_success( + result=DiarySerializer(findDiaries, many=True).data, + response_status=status.HTTP_200_OK + ) class GetQuizView(APIView): @@ -133,4 +141,6 @@ def get(self, request): response_status=status.HTTP_200_OK ) - return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + +""" +떠나는 길에 네가 내게 말했지\n너는 바라는 게 너무나 많아\n잠깐이라도 널 안 바라보면\n머리에 불이 나버린다니까\n나는 흐르려는 눈물을 참고\n하려던 얘길 어렵게 누르고\n그래, 미안해라는 한 마디로\n너랑 나눈 날들 마무리했었지\n달디달고, 달디달고, 달디단, 밤양갱, 밤양갱\n내가 먹고 싶었던 건, 달디단, 밤양갱, 밤양갱이야\n떠나는 길에 네가 내게 말했지\n너는 바라는 게 너무나 많아\n아냐, 내가 늘 바란 건 하나야\n한 개뿐이야, 달디단, 밤양갱\n달디달고, 달디달고, 달디단, 밤양갱, 밤양갱\n내가 먹고 싶었던 건, 달디단, 밤양갱, 밤양갱이야\n상다리가 부러지고\n둘이서 먹다 하나가 쓰러져버려도\n나라는 사람을 몰랐던 넌\n떠나가다가 돌아서서 말했지\n너는 바라는 게 너무나 많아\n아냐, 내가 늘 바란 건 하나야\n한 개뿐이야, 달디단, 밤양갱\n""" From a82bf14e03f66962cef86dee157579d5e543cc49 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 18:37:10 +0900 Subject: [PATCH 15/24] =?UTF-8?q?[fix]=20query=5Fserializer=20=EB=A1=9C=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/diary/views.py b/diary/views.py index 41180a3..cad0dbf 100644 --- a/diary/views.py +++ b/diary/views.py @@ -86,7 +86,7 @@ def post(self, request): class GetDiaryByUserView(APIView): - @swagger_auto_schema(operation_description="유저의 일기 조회", query=GetUserRequest, + @swagger_auto_schema(operation_description="유저의 일기 조회", query_serializer=GetUserRequest, response={"200": DiarySerializer}) def get(self, request): requestSerial = GetUserRequest(data=request.query_params) @@ -114,7 +114,7 @@ def get(self, request): class GetQuizView(APIView): - @swagger_auto_schema(operation_description="일기회상 퀴즈", query=GetDiaryRequest, + @swagger_auto_schema(operation_description="일기회상 퀴즈", query_serializer=GetDiaryRequest, responses={"200": "퀴즈"}) def get(self, request): requestSerial = GetDiaryRequest(data=request.query_params) From 5eb3d7d29e8d77f077ed839194dddc90e6035b59 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 18:39:17 +0900 Subject: [PATCH 16/24] =?UTF-8?q?[fix]=20quizzes=20query=5Fset=20->=20list?= =?UTF-8?q?=CB=86=20=ED=83=80=EC=9E=85=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/diary/views.py b/diary/views.py index cad0dbf..7453d3e 100644 --- a/diary/views.py +++ b/diary/views.py @@ -133,8 +133,8 @@ def get(self, request): # Diary와 연관된 모든 Sentence 가져오기 sentences = findDiary.sentences.all() - # 모든 Sentence와 연관된 Quiz 가져오기 == [Quizs, Quizs, Quizs, ...] - quizzes = sum([sentence.quizs.all() for sentence in sentences], []) + # 모든 Sentence와 연관된 Quiz 가져오기 quizzes == [Quizs, Quizs, Quizs, ...] + quizzes = sum([list(sentence.quizs.all()) for sentence in sentences], []) return ApiResponse.on_success( result=QuizSerializer(quizzes, many=True).data, From de246c80560ffe6cad861c60f9c60ea2eefe43d8 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 18:43:34 +0900 Subject: [PATCH 17/24] =?UTF-8?q?[fix]=20=EB=B0=A4=EC=96=91=EA=B0=B1=20?= =?UTF-8?q?=EA=B0=80=EC=82=AC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/diary/views.py b/diary/views.py index 7453d3e..90812f0 100644 --- a/diary/views.py +++ b/diary/views.py @@ -139,8 +139,4 @@ def get(self, request): return ApiResponse.on_success( result=QuizSerializer(quizzes, many=True).data, response_status=status.HTTP_200_OK - ) - - -""" -떠나는 길에 네가 내게 말했지\n너는 바라는 게 너무나 많아\n잠깐이라도 널 안 바라보면\n머리에 불이 나버린다니까\n나는 흐르려는 눈물을 참고\n하려던 얘길 어렵게 누르고\n그래, 미안해라는 한 마디로\n너랑 나눈 날들 마무리했었지\n달디달고, 달디달고, 달디단, 밤양갱, 밤양갱\n내가 먹고 싶었던 건, 달디단, 밤양갱, 밤양갱이야\n떠나는 길에 네가 내게 말했지\n너는 바라는 게 너무나 많아\n아냐, 내가 늘 바란 건 하나야\n한 개뿐이야, 달디단, 밤양갱\n달디달고, 달디달고, 달디단, 밤양갱, 밤양갱\n내가 먹고 싶었던 건, 달디단, 밤양갱, 밤양갱이야\n상다리가 부러지고\n둘이서 먹다 하나가 쓰러져버려도\n나라는 사람을 몰랐던 넌\n떠나가다가 돌아서서 말했지\n너는 바라는 게 너무나 많아\n아냐, 내가 늘 바란 건 하나야\n한 개뿐이야, 달디단, 밤양갱\n""" + ) \ No newline at end of file From 54ca7e0f949966db2ea6ff5116ff3923d25ed1a2 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 18:45:52 +0900 Subject: [PATCH 18/24] =?UTF-8?q?[feat]=20=EC=A3=BC=EC=84=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/diary/views.py b/diary/views.py index 90812f0..a4e99d4 100644 --- a/diary/views.py +++ b/diary/views.py @@ -69,12 +69,16 @@ def post(self, request): # Diary와 연관된 모든 Sentence 삭제 findDiary.sentences.all().delete() + # Sentence 객체 생성 content = request.get('content') newSentence = Sentences.objects.create(sentence=content, diary=findDiary) + # 키워드 추출 memory = TextRank(content=content) + # 키워드 추출 후 가중치가 높은 키워드 5개로 퀴즈 생성 question, answer = make_quiz(memory, keyword_size=5) + # Quizs 객체 생성 Quizs.objects.bulk_create( [Quizs(question=q, answer=a, sentence=newSentence) for q, a in zip(question, answer)] ) From 5f090420f9f8c0f4b1162ed79a53a9254d8fe5c3 Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 19:01:34 +0900 Subject: [PATCH 19/24] =?UTF-8?q?[fix]=20=EB=82=B4=EC=9A=A9=EC=97=90=2010?= =?UTF-8?q?=EA=B8=80=EC=9E=90=20=EC=9D=B4=EC=83=81=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/diary/views.py b/diary/views.py index 1fd95ec..707a5e7 100644 --- a/diary/views.py +++ b/diary/views.py @@ -51,6 +51,9 @@ def post(self, request): content = serializer.validated_data.get('content') + if not content or len(content) < 10: + return JsonResponse({'isSuccess': False, 'message': '적어도 한 문장 이상 작성해주세요.'}, status=status.HTTP_400_BAD_REQUEST) + sentence = Sentences.objects.create(sentence=content, diary=diary) memory = TextRank(content=content) From 6cc421a1720fe56f6bfd046464471da9fac901b8 Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 19:08:02 +0900 Subject: [PATCH 20/24] =?UTF-8?q?[fix]=20=EC=9D=BC=EA=B8=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B6=80=EB=B6=84=EC=97=90=EB=8F=84=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=EB=AC=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/diary/views.py b/diary/views.py index 707a5e7..62814f4 100644 --- a/diary/views.py +++ b/diary/views.py @@ -87,6 +87,9 @@ def post(self, request): content = serializer.validated_data.get('content') + if not content or len(content) < 10: + return JsonResponse({'isSuccess': False, 'message': '적어도 한 문장 이상 작성해주세요.'}, status=status.HTTP_400_BAD_REQUEST) + sentence = Sentences.objects.create(sentence=content, diary=diary) memory = TextRank(content=content) From 6d563623821b1610056da65f8a2af80c3281f592 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 19:31:09 +0900 Subject: [PATCH 21/24] =?UTF-8?q?[fix]=20=EC=B6=A9=EB=8F=8C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/serializers.py | 5 +++- diary/views.py | 71 ++++++++++++++++++-------------------------- 2 files changed, 33 insertions(+), 43 deletions(-) diff --git a/diary/serializers.py b/diary/serializers.py index 6346e51..b333116 100644 --- a/diary/serializers.py +++ b/diary/serializers.py @@ -39,6 +39,8 @@ class Meta: class QuizSerializer(serializers.ModelSerializer): sentences = SentenceSerializer(read_only=True) + + class KeywordSerializer(serializers.ModelSerializer): sentence = SentenceSerializer(read_only=True) @@ -54,6 +56,7 @@ class Meta: model = Questions fields = '__all__' + class DiaryCreateRequest(serializers.ModelSerializer): userId = serializers.IntegerField() @@ -154,4 +157,4 @@ def is_valid(self, raise_exception=False): self._errors['diaryId'] = [f'diaryId: {self.data.get("diaryId")} 가 존재하지 않습니다.'] return False, status.HTTP_404_NOT_FOUND - return True, status.HTTP_200_OK \ No newline at end of file + return True, status.HTTP_200_OK diff --git a/diary/views.py b/diary/views.py index 230ad98..7e3c171 100644 --- a/diary/views.py +++ b/diary/views.py @@ -34,18 +34,13 @@ def post(self, request): # 키워드 추출 memory = TextRank(content=sentence) - - memory = TextRank(content=content) - question, keyword = make_quiz(memory, keyword_size=5) # 키워드 추출 후 가중치가 높은 키워드 5개로 퀴즈 생성 - question, answer = make_quiz(memory, keyword_size=5) + question, keyword = make_quiz(memory, keyword_size=5) - keywords = Keywords.objects.bulk_create([Keywords(keyword=k, sentence=sentence) for k in keyword]) - Questions.objects.bulk_create([Questions(question=q, keyword=k) for q, k in zip(question, keywords)]) - # Quizs 객체 생성 - Quizs.objects.bulk_create( - [Quizs(question=q, answer=a, sentence=newSentence) for q, a in zip(question, answer)] - ) + # 각 키워드별로 Question 생성 + for q, k in zip(question, keyword): + newKeyword = Keywords.objects.create(keyword=k, sentence=newSentence) + Questions.objects.create(question=q, keyword=newKeyword) return ApiResponse.on_success( result=SentenceSimpleSerializer(newSentence).data, @@ -71,26 +66,25 @@ def post(self, request): diary_id = request.get('diaryId') findDiary = Diary.objects.get(id=diary_id) - # Diary와 연관된 모든 Sentence 삭제 - findDiary.sentences.all().delete() + # Diary와 연관된 모든 Sentence, Question, Keyword 삭제 + sentences = findDiary.sentences.all() + for sentence in sentences: + sentence.keywords.all().delete() + sentence.delete() - memory = TextRank(content=content) - question, keyword = make_quiz(memory, keyword_size=5) # Sentence 객체 생성 content = request.get('content') newSentence = Sentences.objects.create(sentence=content, diary=findDiary) - keywords = Keywords.objects.bulk_create([Keywords(keyword=k, sentence=sentence) for k in keyword]) - Questions.objects.bulk_create([Questions(question=q, keyword=k) for q, k in zip(question, keywords)]) # 키워드 추출 memory = TextRank(content=content) # 키워드 추출 후 가중치가 높은 키워드 5개로 퀴즈 생성 - question, answer = make_quiz(memory, keyword_size=5) + question, keyword = make_quiz(memory, keyword_size=5) - # Quizs 객체 생성 - Quizs.objects.bulk_create( - [Quizs(question=q, answer=a, sentence=newSentence) for q, a in zip(question, answer)] - ) + # 각 키워드별로 Question 생성 + for q, k in zip(question, keyword): + newKeyword = Keywords.objects.create(keyword=k, sentence=newSentence) + Questions.objects.create(question=q, keyword=newKeyword) return ApiResponse.on_success( result=SentenceSimpleSerializer(newSentence).data, @@ -136,37 +130,30 @@ def get(self, request): if not isValid: return ApiResponse.on_fail(requestSerial.errors, response_status=response_status) - sentences = diary.sentences.all() # 유효성 검사 통과한 경우 request = requestSerial.validated_data - q = [] - a = [] - - for sentence in sentences: - keywords = sentence.keywords.all() - a.extend(keywords) - for keyword in keywords: - questions = keyword.questions.all() - q.extend(questions) # Diary 가져오기 diary_id = request.get('diaryId') findDiary = Diary.objects.get(id=diary_id) - result = [] - for question_obj, keyword_obj in zip(q, a): - result.append({"Q": question_obj.question, "A": keyword_obj.keyword}) - - return JsonResponse({'result': result}, status=status.HTTP_200_OK) - - return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # Diary와 연관된 모든 Sentence 가져오기 sentences = findDiary.sentences.all() - # 모든 Sentence와 연관된 Quiz 가져오기 quizzes == [Quizs, Quizs, Quizs, ...] - quizzes = sum([list(sentence.quizs.all()) for sentence in sentences], []) + # 모든 Sentence 와 연관된 Question 가져오기 + question_keyword = [] + for sentence in sentences: + for keyword in sentence.keywords.all(): + question_keyword.append({ + "Q": keyword.questions.first().question, + "A": keyword.keyword + }) return ApiResponse.on_success( - result=QuizSerializer(quizzes, many=True).data, + result=question_keyword, response_status=status.HTTP_200_OK - ) \ No newline at end of file + ) + + +""" +""" \ No newline at end of file From 8f1d3a211bf90b1ae68fb9f0ff7631e3c44a9c52 Mon Sep 17 00:00:00 2001 From: rvbear Date: Wed, 6 Mar 2024 19:35:20 +0900 Subject: [PATCH 22/24] =?UTF-8?q?[fix]=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=ED=9B=84=20=EB=AA=A8=EB=93=A0=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=EC=97=90=EC=84=9C=20=EC=9D=BC=EA=B8=B0=EA=B0=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/textrank.py | 30 ++++++++++++++---------------- diary/views.py | 9 +++++---- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/diary/textrank.py b/diary/textrank.py index b5bba35..c812434 100644 --- a/diary/textrank.py +++ b/diary/textrank.py @@ -118,22 +118,20 @@ def __init__(self, content): # 명사 추출 nouns = SentenceTokenizer.get_nouns(self.sentences) - # 가중치 그래프 객체 생성 - matrix = GraphMatrix(nouns) - # 문장별 가중치 그래프 [문장수, 문장수], {index: 문장} 사전 - # sent_graph, sent_vocab = matrix.get_sent_graph_vocab() - # 단어별 가중치 그래프 [단어수, 단어수], {index: 단어} 사전 - words_graph, word_vocab = matrix.get_words_graph_vocab() - - # (문장, index, 가중치) 리스트 생성 - # sent_rank = [(sent_vocab[index], index, weight) for index, weight in (Rank.get_ranks(sent_graph).items())] - # weight 기준으로 정렬 - # self.sorted_sent_rank = sorted(sent_rank, key=lambda k: k[2], reverse=True) - - # (단어, index, 가중치) 리스트 생성 - word_rank_idx = [(word_vocab[index], index, weight) for index, weight in Rank.get_ranks(words_graph).items()] - # weight 기준으로 정렬 - self.sorted_word_rank = sorted(word_rank_idx, key=lambda k: k[2], reverse=True) + if nouns: + # 가중치 그래프 객체 생성 + matrix = GraphMatrix(nouns) + # 문장별 가중치 그래프 [문장수, 문장수], {index: 문장} 사전 + # sent_graph, sent_vocab = matrix.get_sent_graph_vocab() + # 단어별 가중치 그래프 [단어수, 단어수], {index: 단어} 사전 + words_graph, word_vocab = matrix.get_words_graph_vocab() + + # (단어, index, 가중치) 리스트 생성 + word_rank_idx = [(word_vocab[index], index, weight) for index, weight in Rank.get_ranks(words_graph).items()] + # weight 기준으로 정렬 + self.sorted_word_rank = sorted(word_rank_idx, key=lambda k: k[2], reverse=True) + else: + self.sorted_word_rank = [] # sent_size 개의 문장 요약 # def summarize(self, sent_size=3): diff --git a/diary/views.py b/diary/views.py index 62814f4..1bbb6a3 100644 --- a/diary/views.py +++ b/diary/views.py @@ -51,12 +51,13 @@ def post(self, request): content = serializer.validated_data.get('content') - if not content or len(content) < 10: - return JsonResponse({'isSuccess': False, 'message': '적어도 한 문장 이상 작성해주세요.'}, status=status.HTTP_400_BAD_REQUEST) - sentence = Sentences.objects.create(sentence=content, diary=diary) memory = TextRank(content=content) + + if memory is None: + return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) + question, answer = make_quiz(memory, keyword_size=5) Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)]) @@ -88,7 +89,7 @@ def post(self, request): content = serializer.validated_data.get('content') if not content or len(content) < 10: - return JsonResponse({'isSuccess': False, 'message': '적어도 한 문장 이상 작성해주세요.'}, status=status.HTTP_400_BAD_REQUEST) + return JsonResponse({'isSuccess': False, 'message': '한 문장 이상 작성해주세요.'}, status=status.HTTP_400_BAD_REQUEST) sentence = Sentences.objects.create(sentence=content, diary=diary) From 715d6e050412264f185e22f3b89e7b5042c36574 Mon Sep 17 00:00:00 2001 From: Won Chan Lee Date: Wed, 6 Mar 2024 19:42:31 +0900 Subject: [PATCH 23/24] =?UTF-8?q?[refactor]=20QuizSerializer=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/serializers.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/diary/serializers.py b/diary/serializers.py index b333116..8155fb9 100644 --- a/diary/serializers.py +++ b/diary/serializers.py @@ -37,10 +37,6 @@ class Meta: fields = ['id', 'diary', 'sentence'] -class QuizSerializer(serializers.ModelSerializer): - sentences = SentenceSerializer(read_only=True) - - class KeywordSerializer(serializers.ModelSerializer): sentence = SentenceSerializer(read_only=True) From 2bd1234a5740704db8cf6b13fd56d0f20a50ade7 Mon Sep 17 00:00:00 2001 From: rvbear Date: Thu, 7 Mar 2024 11:37:59 +0900 Subject: [PATCH 24/24] =?UTF-8?q?[fix]=20=ED=95=A9=EB=B3=91=EC=8B=9C=20?= =?UTF-8?q?=EC=B6=A9=EB=8F=8C=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- diary/views.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/diary/views.py b/diary/views.py index 91adaef..0f97417 100644 --- a/diary/views.py +++ b/diary/views.py @@ -27,14 +27,18 @@ def post(self, request): # Diary 객체 생성 newDiary = Diary.objects.create(user=findUser, title=request.get('title')) + content = request.get('content') # Sentences 객체 생성 - newSentence = Sentences.objects.create(sentence=sentence, diary=newDiary) + newSentence = Sentences.objects.create(sentence=content, diary=newDiary) # 키워드 추출 - memory = TextRank(content=sentence) + memory = TextRank(content=content) if memory is None: - return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) + return ApiResponse.on_success( + result=SentenceSimpleSerializer(newSentence).data, + response_status=status.HTTP_201_CREATED + ) # 키워드 추출 후 가중치가 높은 키워드 5개로 퀴즈 생성 question, keyword = make_quiz(memory, keyword_size=5) @@ -81,7 +85,10 @@ def post(self, request): memory = TextRank(content=content) if memory is None: - return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED) + return ApiResponse.on_success( + result=SentenceSimpleSerializer(sentence).data, + response_status=status.HTTP_201_CREATED + ) # 키워드 추출 후 가중치가 높은 키워드 5개로 퀴즈 생성 question, keyword = make_quiz(memory, keyword_size=5)