Skip to content

Commit dadb7f2

Browse files
authored
Merge pull request #40 from TUK-DP/refactor/19
[refactor] Quizs 테이블을 Questions과 Keywords로 분리
2 parents f3b37a2 + 3a4fb0b commit dadb7f2

File tree

4 files changed

+81
-17
lines changed

4 files changed

+81
-17
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Generated by Django 5.0.2 on 2024-03-06 08:50
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('diary', '0003_remove_diary_content_alter_sentences_diary_quizs_and_more'),
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name='Keywords',
16+
fields=[
17+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18+
('created_at', models.DateTimeField(auto_now_add=True)),
19+
('updated_at', models.DateTimeField(auto_now=True)),
20+
('keyword', models.CharField(max_length=100)),
21+
('sentence', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='keywords', to='diary.sentences')),
22+
],
23+
options={
24+
'abstract': False,
25+
},
26+
),
27+
migrations.CreateModel(
28+
name='Questions',
29+
fields=[
30+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
31+
('created_at', models.DateTimeField(auto_now_add=True)),
32+
('updated_at', models.DateTimeField(auto_now=True)),
33+
('question', models.TextField()),
34+
('keyword', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='diary.keywords')),
35+
],
36+
options={
37+
'abstract': False,
38+
},
39+
),
40+
migrations.DeleteModel(
41+
name='Quizs',
42+
),
43+
]

diary/models.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@ class Sentences(BaseModel):
2020

2121
diary = models.ForeignKey('diary.Diary', related_name='sentences', on_delete=models.CASCADE)
2222

23-
class Quizs(BaseModel):
23+
class Keywords(BaseModel):
24+
keyword = models.CharField(max_length=100)
25+
26+
sentence = models.ForeignKey('diary.Sentences', related_name='keywords', on_delete=models.CASCADE)
27+
28+
class Questions(BaseModel):
2429
question = models.TextField()
25-
answer = models.CharField(max_length=50)
2630

27-
sentence = models.ForeignKey('diary.Sentences', related_name='quizs', on_delete=models.CASCADE)
31+
keyword = models.ForeignKey('diary.Keywords', related_name='questions', on_delete=models.CASCADE)

diary/serializers.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from users.models import User
44
from users.serializers import UserSafeSerializer
5-
from .models import Diary, Sentences, Quizs
5+
from .models import Diary, Sentences, Keywords, Questions
66

77

88
class DiarySerializer(serializers.ModelSerializer):
@@ -33,11 +33,18 @@ class Meta:
3333
model = Sentences
3434
fields = ['id', 'diary', 'sentence']
3535

36-
class QuizSerializer(serializers.ModelSerializer):
37-
sentences = SentenceSerializer(read_only=True)
36+
class KeywordSerializer(serializers.ModelSerializer):
37+
sentence = SentenceSerializer(read_only=True)
3838

3939
class Meta:
40-
model = Quizs
40+
model = Keywords
41+
fields = '__all__'
42+
43+
class QuestionSerializer(serializers.ModelSerializer):
44+
keyword = KeywordSerializer(read_only=True)
45+
46+
class Meta:
47+
model = Questions
4148
fields = '__all__'
4249

4350
class DiaryCreateRequest(serializers.ModelSerializer):

diary/views.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from rest_framework.response import Response
77
from rest_framework import status
88

9-
from diary.models import Diary, Sentences, Quizs
9+
from diary.models import Diary, Sentences, Keywords, Questions
1010
from diary.serializers import *
1111
from users.models import User
1212

@@ -54,9 +54,10 @@ def post(self, request):
5454
sentence = Sentences.objects.create(sentence=content, diary=diary)
5555

5656
memory = TextRank(content=content)
57-
question, answer = make_quiz(memory, keyword_size=5)
57+
question, keyword = make_quiz(memory, keyword_size=5)
5858

59-
Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)])
59+
keywords = Keywords.objects.bulk_create([Keywords(keyword=k, sentence=sentence) for k in keyword])
60+
Questions.objects.bulk_create([Questions(question=q, keyword=k) for q, k in zip(question, keywords)])
6061

6162
return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED)
6263

@@ -87,9 +88,10 @@ def post(self, request):
8788
sentence = Sentences.objects.create(sentence=content, diary=diary)
8889

8990
memory = TextRank(content=content)
90-
question, answer = make_quiz(memory, keyword_size=5)
91+
question, keyword = make_quiz(memory, keyword_size=5)
9192

92-
Quizs.objects.bulk_create([Quizs(question=q, answer=a, sentence=sentence) for q, a in zip(question, answer)])
93+
keywords = Keywords.objects.bulk_create([Keywords(keyword=k, sentence=sentence) for k in keyword])
94+
Questions.objects.bulk_create([Questions(question=q, keyword=k) for q, k in zip(question, keywords)])
9395

9496
return JsonResponse({'isSuccess': True, 'result': SentenceSimpleSerializer(sentence).data}, status=status.HTTP_201_CREATED)
9597
except Diary.DoesNotExist:
@@ -127,13 +129,21 @@ def get(self, request):
127129
return JsonResponse({'isSuccess': False, 'message': '해당 일기를 찾을 수 없습니다.'}, status=status.HTTP_404_NOT_FOUND)
128130

129131
sentences = diary.sentences.all()
130-
quizs = []
132+
133+
q = []
134+
a = []
131135

132136
for sentence in sentences:
133-
quizs.extend(sentence.quizs.all())
134-
135-
serializer = QuizSerializer(quizs, many=True)
137+
keywords = sentence.keywords.all()
138+
a.extend(keywords)
139+
for keyword in keywords:
140+
questions = keyword.questions.all()
141+
q.extend(questions)
142+
143+
result = []
144+
for question_obj, keyword_obj in zip(q, a):
145+
result.append({"Q": question_obj.question, "A": keyword_obj.keyword})
136146

137-
return JsonResponse(serializer.data, safe=False, status=status.HTTP_200_OK)
147+
return JsonResponse({'result': result}, status=status.HTTP_200_OK)
138148

139149
return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

0 commit comments

Comments
 (0)