Skip to content

Commit

Permalink
Merge pull request #82 from Z00One/refactor/quiz
Browse files Browse the repository at this point in the history
クイズ採点機能の修正
  • Loading branch information
Z00One authored Oct 28, 2024
2 parents 0c4cf12 + fd44ee3 commit 3e86141
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/*
Warnings:
- Added the required column `answer` to the `class_user_quizzes` table without a default value. This is not possible if the table is not empty.
*/
-- CreateEnum
CREATE TYPE "Answer" AS ENUM ('a', 'b', 'c', 'd');

-- AlterTable
ALTER TABLE "class_user_quizzes" ADD COLUMN "answer" "Answer" NOT NULL;
8 changes: 8 additions & 0 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,18 @@ model Quiz {
@@map("quizzes")
}

enum Answer {
a
b
c
d
}

model ClassUserQuiz {
result Boolean?
created_at DateTime @default(now())
updated_at DateTime @updatedAt
answer Answer
u_id BigInt @map("uid")
c_id BigInt @map("cid")
Expand Down
41 changes: 21 additions & 20 deletions src/modules/quiz/langchain/langchain.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { LangchainConfig } from '@common/configs/config.interface';
import { ConfigService } from '@nestjs/config';
import { ChatOpenAI } from '@langchain/openai';
import { QuizContent } from '../dto/create-update.dto';
import { Answer } from '@prisma/client';

@Injectable()
export class LangchainService {
Expand Down Expand Up @@ -60,52 +61,52 @@ export class LangchainService {
{{
question: '관계 데이터베이스 관리 시스템(RDBMS)과 NoSQL에 대한 설명으로 옳은 것은?',
answer: {{
a: 'RDBMS는 NoSQL보다 약한 스키마를 요구한다.',
b: 'NoSQL은 RDBMS보다 엄격한 일관성 모델을 보장한다.',
c: 'NoSQL은 RDBMS보다 정형 데이터를 저장하기에 적합하다.',
d: 'NoSQL 데이터 모델로 키-값(key-value), 문서 기반(document-based), 그래프 기반(graph-based) 모델이 있다.',
${Answer.a}: 'RDBMS는 NoSQL보다 약한 스키마를 요구한다.',
${Answer.b}: 'NoSQL은 RDBMS보다 엄격한 일관성 모델을 보장한다.',
${Answer.c}: 'NoSQL은 RDBMS보다 정형 데이터를 저장하기에 적합하다.',
${Answer.d}: 'NoSQL 데이터 모델로 키-값(key-value), 문서 기반(document-based), 그래프 기반(graph-based) 모델이 있다.',
}},
commentary: {{
correctAnswer: 'd',
correctAnswer: '${Answer.d}',
content: 'RDBMS는 NoSQL보다 구체적이고 엄격한 스키마를 요구하며, NoSQL보다 엄격하게 일관성을 보장한다. 또 RDBMS가 정형 데이터를 저장하기에 적합하다. D는 올바른 설명이다.',
}},
}},
{{
question: 'Python의 주요 특징 중 하나는 무엇인가요?',
answer: {{
a: 'Python은 정적 타이핑을 지원한다.',
b: 'Python은 객체 지향 언어이다.',
c: 'Python은 컴파일 언어이다.',
d: 'Python은 다중 스레딩을 지원하지 않는다.',
${Answer.a}: 'Python은 정적 타이핑을 지원한다.',
${Answer.b}: 'Python은 객체 지향 언어이다.',
${Answer.c}: 'Python은 컴파일 언어이다.',
${Answer.d}: 'Python은 다중 스레딩을 지원하지 않는다.',
}},
commentary: {{
correctAnswer: 'b',
correctAnswer: '${Answer.b}',
content: 'Python은 객체 지향 프로그래밍을 지원하는 동적 타이핑 언어입니다. B가 올바른 설명입니다.',
}},
}},
{{
question: '다음 중 프로그래밍 언어가 아닌 것은?',
answer: {{
a: 'Java',
b: 'Python',
c: 'HTML',
d: 'C++',
${Answer.a}: 'Java',
${Answer.b}: 'Python',
${Answer.c}: 'HTML',
${Answer.d}: 'C++',
}},
commentary: {{
correctAnswer: 'c',
correctAnswer: '${Answer.c}',
content: 'HTML은 마크업 언어로, 프로그래밍 언어가 아닙니다. C가 올바른 설명입니다.',
}}
}},
{{
question: 'CSS의 주요 목적은 무엇인가요?',
answer: {{
a: '웹 페이지의 기능을 정의한다.',
b: '웹 페이지의 스타일을 정의한다.',
c: '서버와 클라이언트 간의 통신을 담당한다.',
d: '데이터베이스를 관리한다.',
${Answer.a}: '웹 페이지의 기능을 정의한다.',
${Answer.b}: '웹 페이지의 스타일을 정의한다.',
${Answer.c}: '서버와 클라이언트 간의 통신을 담당한다.',
${Answer.d}: '데이터베이스를 관리한다.',
}},
commentary: {{
correctAnswer: 'b',
correctAnswer: '${Answer.b}',
content: 'CSS는 웹 페이지의 스타일을 정의하는 언어입니다. B가 올바른 설명입니다.',
}}
}},
Expand Down
13 changes: 11 additions & 2 deletions src/modules/set-quiz/dto/mark.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,17 @@ import {
import { ApiProperty } from '@nestjs/swagger';
import { Transform, Type } from 'class-transformer';
import { MAX_QUIZ_DATA_SIZE } from './create.dto';
import { Answer } from '@prisma/client';

@ValidatorConstraint({ async: true })
class IsQuizResultArrayConstraint {
async validate(value: any) {
if (!Array.isArray(value)) return false;
return value.every(
(v) =>
typeof v.q_id === 'bigint' &&
typeof v.result === 'boolean',
typeof v?.q_id === 'bigint' &&
typeof v?.result === 'boolean' &&
Object.values(Answer).includes(v?.answer),
);
}

Expand Down Expand Up @@ -65,6 +67,12 @@ export class QuizResult {
example: true,
})
result: boolean;

@IsNotEmpty()
@ApiProperty({
example: Answer.a,
})
answer: Answer;
}

export class MarkSetQuizDto {
Expand All @@ -86,6 +94,7 @@ export class MarkSetQuizDto {
{
q_id: 1,
result: true,
answer: Answer.a,
},
],
})
Expand Down
5 changes: 5 additions & 0 deletions src/modules/set-quiz/entity/quiz-result.entity.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ApiProperty } from '@nestjs/swagger';
import { Answer } from '@prisma/client';

class QuizContent {
@ApiProperty({
Expand All @@ -18,6 +19,9 @@ class QuizResult {

@ApiProperty()
result: boolean;

@ApiProperty()
answer: Answer;
}

export class QuizResultEntity {
Expand All @@ -34,6 +38,7 @@ export class QuizResultEntity {
question: 'What is the capital of Japan?',
},
result: true,
answer: Answer.a,
},
],
})
Expand Down
1 change: 1 addition & 0 deletions src/modules/set-quiz/set-quiz.controller.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@ describe('SetQuizController', () => {
{
q_id: BigInt(1),
result: true,
answer: 'a',
},
],
});
Expand Down
3 changes: 3 additions & 0 deletions src/modules/set-quiz/set-quiz.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ export class SetQuizRepository {
},
select: {
result: true,
answer: true,
class_user: {
select: {
u_id: true,
Expand All @@ -95,6 +96,7 @@ export class SetQuizRepository {
},
select: {
result: true,
answer: true,
class_user: {
select: {
u_id: true,
Expand Down Expand Up @@ -155,6 +157,7 @@ export class SetQuizRepository {
},
select: {
result: true,
answer: true,
q_id: true,
quizList: {
select: {
Expand Down
1 change: 1 addition & 0 deletions src/modules/set-quiz/set-quiz.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,7 @@ export class SetQuizService {
question,
},
result: r.result,
answer: r.answer,
};
});

Expand Down

0 comments on commit 3e86141

Please sign in to comment.