Exam
This commit is contained in:
parent
e8ddadfd0a
commit
d354dbb27f
@ -4,6 +4,7 @@ const (
|
|||||||
BASE_URL = "http://localhost:3030"
|
BASE_URL = "http://localhost:3030"
|
||||||
PORT = ":3030"
|
PORT = ":3030"
|
||||||
DATABASE_URL = "learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@tcp(localhost:3306)/learnsteam_quiz?charset=utf8&parseTime=True&loc=Local"
|
DATABASE_URL = "learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@tcp(localhost:3306)/learnsteam_quiz?charset=utf8&parseTime=True&loc=Local"
|
||||||
|
//DATABASE_URL = "root:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@tcp(learnsteam-quiz-db:3306)/learnsteam_quiz?charset=utf8&parseTime=True&loc=Local"
|
||||||
|
|
||||||
KAKAO_CLIENT_ID = "986830"
|
KAKAO_CLIENT_ID = "986830"
|
||||||
KAKAO_CLIENT_SECRET = "14f63a8e91c4e0fe88bc40e3ff348233"
|
KAKAO_CLIENT_SECRET = "14f63a8e91c4e0fe88bc40e3ff348233"
|
||||||
|
@ -3,8 +3,8 @@ package config
|
|||||||
const (
|
const (
|
||||||
BASE_URL = "http://localhost:3030"
|
BASE_URL = "http://localhost:3030"
|
||||||
PORT = ":3030"
|
PORT = ":3030"
|
||||||
//DATABASE_URL = "learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@tcp(localhost:3306)/learnsteam_quiz?charset=utf8&parseTime=True&loc=Local"
|
DATABASE_URL = "learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@tcp(localhost:3306)/learnsteam_quiz?charset=utf8&parseTime=True&loc=Local"
|
||||||
DATABASE_URL = "root:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@tcp(learnsteam-quiz-db:3306)/learnsteam_quiz?charset=utf8&parseTime=True&loc=Local"
|
//DATABASE_URL = "root:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@tcp(learnsteam-quiz-db:3306)/learnsteam_quiz?charset=utf8&parseTime=True&loc=Local"
|
||||||
|
|
||||||
KAKAO_CLIENT_ID = "986830"
|
KAKAO_CLIENT_ID = "986830"
|
||||||
KAKAO_CLIENT_SECRET = "14f63a8e91c4e0fe88bc40e3ff348233"
|
KAKAO_CLIENT_SECRET = "14f63a8e91c4e0fe88bc40e3ff348233"
|
||||||
|
774
docs/docs.go
774
docs/docs.go
@ -20,7 +20,7 @@ const docTemplate = `{
|
|||||||
"paths": {
|
"paths": {
|
||||||
"/auth/login": {
|
"/auth/login": {
|
||||||
"post": {
|
"post": {
|
||||||
"description": "username, password 를 입력하여 로그인",
|
"description": "사용자가 로그인합니다.",
|
||||||
"consumes": [
|
"consumes": [
|
||||||
"application/json"
|
"application/json"
|
||||||
],
|
],
|
||||||
@ -30,24 +30,15 @@ const docTemplate = `{
|
|||||||
"tags": [
|
"tags": [
|
||||||
"로그인"
|
"로그인"
|
||||||
],
|
],
|
||||||
"summary": "로그인",
|
"summary": "사용자 로그인 로그인",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "username",
|
"description": "Login Body",
|
||||||
"name": "username",
|
"name": "loginBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.LoginRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "비밀번호",
|
|
||||||
"name": "password",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -76,30 +67,12 @@ const docTemplate = `{
|
|||||||
"summary": "회원가입",
|
"summary": "회원가입",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "username",
|
"description": "Register Body",
|
||||||
"name": "username",
|
"name": "registerBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.RegisterRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "이름",
|
|
||||||
"name": "name",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "비밀번호",
|
|
||||||
"name": "password",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -113,6 +86,177 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/exam": {
|
||||||
|
"get": {
|
||||||
|
"description": "응시 목록을 가져옵니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "응시 목록 가져오기",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "검색어",
|
||||||
|
"name": "q",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "페이지",
|
||||||
|
"name": "page",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "페이지 사이즈",
|
||||||
|
"name": "limit",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamListResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"put": {
|
||||||
|
"description": "퀴즈 프로그램을 수정합니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "퀴즈 프로그램 수정",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "Exam Update Body",
|
||||||
|
"name": "examUpdateBody",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamUpdateRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"post": {
|
||||||
|
"description": "응시 매칭을 만듭니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "응시 매칭 생성",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "Exam Body",
|
||||||
|
"name": "examBody",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"patch": {
|
||||||
|
"description": "퀴즈 프로그램 정보를 변경합니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "퀴즈 프로그램 정보 변경",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "Exam Patch Body (변경할 필드만 입력)",
|
||||||
|
"name": "examPatchBody",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamPatchRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/exam/{id}": {
|
||||||
|
"get": {
|
||||||
|
"description": "ID로 응시 정보를 가져옵니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "응시(시험) 정보 가져오기",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "응시 ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/program": {
|
"/program": {
|
||||||
"get": {
|
"get": {
|
||||||
"description": "퀴즈 프로그램 목록을 가져옵니다.",
|
"description": "퀴즈 프로그램 목록을 가져옵니다.",
|
||||||
@ -175,60 +319,12 @@ const docTemplate = `{
|
|||||||
"summary": "퀴즈 프로그램 수정",
|
"summary": "퀴즈 프로그램 수정",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "프로그램 제목",
|
"description": "Program Body",
|
||||||
"name": "subject",
|
"name": "programUpdateBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ProgramRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 코스",
|
|
||||||
"name": "course",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 내용",
|
|
||||||
"name": "content",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 태그",
|
|
||||||
"name": "tag",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 상태 on 또는 off",
|
|
||||||
"name": "status",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 발행 날짜",
|
|
||||||
"name": "publish_at",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -255,60 +351,12 @@ const docTemplate = `{
|
|||||||
"summary": "퀴즈 프로그램 생성",
|
"summary": "퀴즈 프로그램 생성",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "프로그램 제목",
|
"description": "Program Body",
|
||||||
"name": "subject",
|
"name": "programBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ProgramRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 코스",
|
|
||||||
"name": "course",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 내용",
|
|
||||||
"name": "content",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 태그",
|
|
||||||
"name": "tag",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 상태 on 또는 off",
|
|
||||||
"name": "status",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 발행 날짜",
|
|
||||||
"name": "publish_at",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -417,88 +465,12 @@ const docTemplate = `{
|
|||||||
"summary": "퀴즈 수정",
|
"summary": "퀴즈 수정",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"description": "Quiz Body",
|
||||||
"description": "퀴즈 ID",
|
"name": "quizBody",
|
||||||
"name": "id",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 ID",
|
|
||||||
"name": "program_id",
|
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.QuizRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 순서",
|
|
||||||
"name": "sequence",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "integer"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 타입 : choice, check, ox, input",
|
|
||||||
"name": "quiz_type",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 문제",
|
|
||||||
"name": "question",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 선택지 : ['선택1','선택2','선택3', '선택4']",
|
|
||||||
"name": "choice",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 정답 : [1,3]",
|
|
||||||
"name": "answer",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 힌트",
|
|
||||||
"name": "hint",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 해설",
|
|
||||||
"name": "comment",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -525,81 +497,12 @@ const docTemplate = `{
|
|||||||
"summary": "퀴즈 생성",
|
"summary": "퀴즈 생성",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "프로그램 ID",
|
"description": "Quiz Body",
|
||||||
"name": "program_id",
|
"name": "quizBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.QuizRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 순서",
|
|
||||||
"name": "sequence",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "integer"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 타입 : choice, check, ox, input",
|
|
||||||
"name": "quiz_type",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 문제",
|
|
||||||
"name": "question",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 선택지 : ['선택1','선택2','선택3', '선택4']",
|
|
||||||
"name": "choice",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 정답 : [1,3]",
|
|
||||||
"name": "answer",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 힌트",
|
|
||||||
"name": "hint",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 해설",
|
|
||||||
"name": "comment",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -756,6 +659,221 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.Exam": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"end_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ef74c59a-c707-4162-a52b-455906c81ec1"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "홍길순"
|
||||||
|
},
|
||||||
|
"program": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "파이썬 초급 과정"
|
||||||
|
},
|
||||||
|
"program_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "7f9329f5-2e36-4638-92d2-73064b7291a4"
|
||||||
|
},
|
||||||
|
"score": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"start_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ready"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "출력 Print"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"user_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "f95159dd-c42c-490d-ac6b-ca5d88a266bb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamListResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"data": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.Exam"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 1
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 10
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 999
|
||||||
|
},
|
||||||
|
"totalPage": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 99
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamPatchRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"end_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:25:00+09:00"
|
||||||
|
},
|
||||||
|
"score": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 4
|
||||||
|
},
|
||||||
|
"start_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:10:00+09:00"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "rating"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"program_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "7f9329f5-2e36-4638-92d2-73064b7291a4"
|
||||||
|
},
|
||||||
|
"users": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"end_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:25:00+09:00"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ef74c59a-c707-4162-a52b-455906c81ec1"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "홍길순"
|
||||||
|
},
|
||||||
|
"program": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "파이썬 초급 과정"
|
||||||
|
},
|
||||||
|
"program_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "7f9329f5-2e36-4638-92d2-73064b7291a4"
|
||||||
|
},
|
||||||
|
"score": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"start_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:10:00+09:00"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ready"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "출력 Print"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"user_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "f95159dd-c42c-490d-ac6b-ca5d88a266bb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamUpdateRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"end_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:25:00+09:00"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "홍길순"
|
||||||
|
},
|
||||||
|
"program": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "파이썬 초급 과정"
|
||||||
|
},
|
||||||
|
"program_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "7f9329f5-2e36-4638-92d2-73064b7291a4"
|
||||||
|
},
|
||||||
|
"score": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"start_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:10:00+09:00"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ready"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "출력 Print"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"user_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "f95159dd-c42c-490d-ac6b-ca5d88a266bb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.LoginRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"password": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"learnsteam_learsteam-quiz-api_internal_models.LoginResponse": {
|
"learnsteam_learsteam-quiz-api_internal_models.LoginResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -834,6 +952,37 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ProgramRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"content": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "코스 설명"
|
||||||
|
},
|
||||||
|
"course": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "코스 이름"
|
||||||
|
},
|
||||||
|
"publish_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T00:00:00+09:00"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "on"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "프로그램 제목"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"learnsteam_learsteam-quiz-api_internal_models.ProgramResponse": {
|
"learnsteam_learsteam-quiz-api_internal_models.ProgramResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -945,6 +1094,41 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.QuizRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"answer": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"choice": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"comment": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"hint": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"program_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"question": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"quiz_type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sequence": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"learnsteam_learsteam-quiz-api_internal_models.QuizResponse": {
|
"learnsteam_learsteam-quiz-api_internal_models.QuizResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -990,6 +1174,20 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.RegisterRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"learnsteam_learsteam-quiz-api_internal_models.RegisterResponse": {
|
"learnsteam_learsteam-quiz-api_internal_models.RegisterResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
"paths": {
|
"paths": {
|
||||||
"/auth/login": {
|
"/auth/login": {
|
||||||
"post": {
|
"post": {
|
||||||
"description": "username, password 를 입력하여 로그인",
|
"description": "사용자가 로그인합니다.",
|
||||||
"consumes": [
|
"consumes": [
|
||||||
"application/json"
|
"application/json"
|
||||||
],
|
],
|
||||||
@ -22,24 +22,15 @@
|
|||||||
"tags": [
|
"tags": [
|
||||||
"로그인"
|
"로그인"
|
||||||
],
|
],
|
||||||
"summary": "로그인",
|
"summary": "사용자 로그인 로그인",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "username",
|
"description": "Login Body",
|
||||||
"name": "username",
|
"name": "loginBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.LoginRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "비밀번호",
|
|
||||||
"name": "password",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -68,30 +59,12 @@
|
|||||||
"summary": "회원가입",
|
"summary": "회원가입",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "username",
|
"description": "Register Body",
|
||||||
"name": "username",
|
"name": "registerBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.RegisterRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "이름",
|
|
||||||
"name": "name",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "비밀번호",
|
|
||||||
"name": "password",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -105,6 +78,177 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/exam": {
|
||||||
|
"get": {
|
||||||
|
"description": "응시 목록을 가져옵니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "응시 목록 가져오기",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "검색어",
|
||||||
|
"name": "q",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "페이지",
|
||||||
|
"name": "page",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "페이지 사이즈",
|
||||||
|
"name": "limit",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamListResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"put": {
|
||||||
|
"description": "퀴즈 프로그램을 수정합니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "퀴즈 프로그램 수정",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "Exam Update Body",
|
||||||
|
"name": "examUpdateBody",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamUpdateRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"post": {
|
||||||
|
"description": "응시 매칭을 만듭니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "응시 매칭 생성",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "Exam Body",
|
||||||
|
"name": "examBody",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"patch": {
|
||||||
|
"description": "퀴즈 프로그램 정보를 변경합니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "퀴즈 프로그램 정보 변경",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "Exam Patch Body (변경할 필드만 입력)",
|
||||||
|
"name": "examPatchBody",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamPatchRequest"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/exam/{id}": {
|
||||||
|
"get": {
|
||||||
|
"description": "ID로 응시 정보를 가져옵니다.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Exam"
|
||||||
|
],
|
||||||
|
"summary": "응시(시험) 정보 가져오기",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "응시 ID",
|
||||||
|
"name": "id",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/program": {
|
"/program": {
|
||||||
"get": {
|
"get": {
|
||||||
"description": "퀴즈 프로그램 목록을 가져옵니다.",
|
"description": "퀴즈 프로그램 목록을 가져옵니다.",
|
||||||
@ -167,60 +311,12 @@
|
|||||||
"summary": "퀴즈 프로그램 수정",
|
"summary": "퀴즈 프로그램 수정",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "프로그램 제목",
|
"description": "Program Body",
|
||||||
"name": "subject",
|
"name": "programUpdateBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ProgramRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 코스",
|
|
||||||
"name": "course",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 내용",
|
|
||||||
"name": "content",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 태그",
|
|
||||||
"name": "tag",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 상태 on 또는 off",
|
|
||||||
"name": "status",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 발행 날짜",
|
|
||||||
"name": "publish_at",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -247,60 +343,12 @@
|
|||||||
"summary": "퀴즈 프로그램 생성",
|
"summary": "퀴즈 프로그램 생성",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "프로그램 제목",
|
"description": "Program Body",
|
||||||
"name": "subject",
|
"name": "programBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.ProgramRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 코스",
|
|
||||||
"name": "course",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 내용",
|
|
||||||
"name": "content",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 태그",
|
|
||||||
"name": "tag",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 상태 on 또는 off",
|
|
||||||
"name": "status",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 발행 날짜",
|
|
||||||
"name": "publish_at",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -409,88 +457,12 @@
|
|||||||
"summary": "퀴즈 수정",
|
"summary": "퀴즈 수정",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"description": "Quiz Body",
|
||||||
"description": "퀴즈 ID",
|
"name": "quizBody",
|
||||||
"name": "id",
|
|
||||||
"in": "path",
|
|
||||||
"required": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "프로그램 ID",
|
|
||||||
"name": "program_id",
|
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.QuizRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 순서",
|
|
||||||
"name": "sequence",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "integer"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 타입 : choice, check, ox, input",
|
|
||||||
"name": "quiz_type",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 문제",
|
|
||||||
"name": "question",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 선택지 : ['선택1','선택2','선택3', '선택4']",
|
|
||||||
"name": "choice",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 정답 : [1,3]",
|
|
||||||
"name": "answer",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 힌트",
|
|
||||||
"name": "hint",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 해설",
|
|
||||||
"name": "comment",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -517,81 +489,12 @@
|
|||||||
"summary": "퀴즈 생성",
|
"summary": "퀴즈 생성",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "프로그램 ID",
|
"description": "Quiz Body",
|
||||||
"name": "program_id",
|
"name": "quizBody",
|
||||||
"in": "body",
|
"in": "body",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.QuizRequest"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 순서",
|
|
||||||
"name": "sequence",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "integer"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 타입 : choice, check, ox, input",
|
|
||||||
"name": "quiz_type",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 문제",
|
|
||||||
"name": "question",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 선택지 : ['선택1','선택2','선택3', '선택4']",
|
|
||||||
"name": "choice",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 정답 : [1,3]",
|
|
||||||
"name": "answer",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 힌트",
|
|
||||||
"name": "hint",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "퀴즈 해설",
|
|
||||||
"name": "comment",
|
|
||||||
"in": "body",
|
|
||||||
"required": true,
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -748,6 +651,221 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.Exam": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"end_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ef74c59a-c707-4162-a52b-455906c81ec1"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "홍길순"
|
||||||
|
},
|
||||||
|
"program": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "파이썬 초급 과정"
|
||||||
|
},
|
||||||
|
"program_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "7f9329f5-2e36-4638-92d2-73064b7291a4"
|
||||||
|
},
|
||||||
|
"score": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"start_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ready"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "출력 Print"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"user_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "f95159dd-c42c-490d-ac6b-ca5d88a266bb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamListResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"data": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/learnsteam_learsteam-quiz-api_internal_models.Exam"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 1
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 10
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 999
|
||||||
|
},
|
||||||
|
"totalPage": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 99
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamPatchRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"end_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:25:00+09:00"
|
||||||
|
},
|
||||||
|
"score": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 4
|
||||||
|
},
|
||||||
|
"start_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:10:00+09:00"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "rating"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"program_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "7f9329f5-2e36-4638-92d2-73064b7291a4"
|
||||||
|
},
|
||||||
|
"users": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"end_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:25:00+09:00"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ef74c59a-c707-4162-a52b-455906c81ec1"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "홍길순"
|
||||||
|
},
|
||||||
|
"program": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "파이썬 초급 과정"
|
||||||
|
},
|
||||||
|
"program_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "7f9329f5-2e36-4638-92d2-73064b7291a4"
|
||||||
|
},
|
||||||
|
"score": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"start_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:10:00+09:00"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ready"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "출력 Print"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"user_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "f95159dd-c42c-490d-ac6b-ca5d88a266bb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ExamUpdateRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"end_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:25:00+09:00"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "홍길순"
|
||||||
|
},
|
||||||
|
"program": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "파이썬 초급 과정"
|
||||||
|
},
|
||||||
|
"program_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "7f9329f5-2e36-4638-92d2-73064b7291a4"
|
||||||
|
},
|
||||||
|
"score": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"start_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T13:10:00+09:00"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "ready"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "출력 Print"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 5
|
||||||
|
},
|
||||||
|
"user_id": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "f95159dd-c42c-490d-ac6b-ca5d88a266bb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.LoginRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"password": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"learnsteam_learsteam-quiz-api_internal_models.LoginResponse": {
|
"learnsteam_learsteam-quiz-api_internal_models.LoginResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -826,6 +944,37 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.ProgramRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"content": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "코스 설명"
|
||||||
|
},
|
||||||
|
"course": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "코스 이름"
|
||||||
|
},
|
||||||
|
"publish_at": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "2023-11-10T00:00:00+09:00"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "on"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "프로그램 제목"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"learnsteam_learsteam-quiz-api_internal_models.ProgramResponse": {
|
"learnsteam_learsteam-quiz-api_internal_models.ProgramResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -937,6 +1086,41 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.QuizRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"answer": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"choice": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"comment": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"hint": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"program_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"question": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"quiz_type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sequence": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"learnsteam_learsteam-quiz-api_internal_models.QuizResponse": {
|
"learnsteam_learsteam-quiz-api_internal_models.QuizResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -982,6 +1166,20 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"learnsteam_learsteam-quiz-api_internal_models.RegisterRequest": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"learnsteam_learsteam-quiz-api_internal_models.RegisterResponse": {
|
"learnsteam_learsteam-quiz-api_internal_models.RegisterResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -1,4 +1,158 @@
|
|||||||
definitions:
|
definitions:
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.Exam:
|
||||||
|
properties:
|
||||||
|
end_at:
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
example: ef74c59a-c707-4162-a52b-455906c81ec1
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
example: 홍길순
|
||||||
|
type: string
|
||||||
|
program:
|
||||||
|
example: 파이썬 초급 과정
|
||||||
|
type: string
|
||||||
|
program_id:
|
||||||
|
example: 7f9329f5-2e36-4638-92d2-73064b7291a4
|
||||||
|
type: string
|
||||||
|
score:
|
||||||
|
example: 5
|
||||||
|
type: integer
|
||||||
|
start_at:
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
example: ready
|
||||||
|
type: string
|
||||||
|
subject:
|
||||||
|
example: 출력 Print
|
||||||
|
type: string
|
||||||
|
total:
|
||||||
|
example: 5
|
||||||
|
type: integer
|
||||||
|
user_id:
|
||||||
|
example: f95159dd-c42c-490d-ac6b-ca5d88a266bb
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.ExamListResponse:
|
||||||
|
properties:
|
||||||
|
data:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.Exam'
|
||||||
|
type: array
|
||||||
|
page:
|
||||||
|
example: 1
|
||||||
|
type: integer
|
||||||
|
pageSize:
|
||||||
|
example: 10
|
||||||
|
type: integer
|
||||||
|
total:
|
||||||
|
example: 999
|
||||||
|
type: integer
|
||||||
|
totalPage:
|
||||||
|
example: 99
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.ExamPatchRequest:
|
||||||
|
properties:
|
||||||
|
end_at:
|
||||||
|
example: "2023-11-10T13:25:00+09:00"
|
||||||
|
type: string
|
||||||
|
score:
|
||||||
|
example: 4
|
||||||
|
type: integer
|
||||||
|
start_at:
|
||||||
|
example: "2023-11-10T13:10:00+09:00"
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
example: rating
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.ExamRequest:
|
||||||
|
properties:
|
||||||
|
program_id:
|
||||||
|
example: 7f9329f5-2e36-4638-92d2-73064b7291a4
|
||||||
|
type: string
|
||||||
|
users:
|
||||||
|
items:
|
||||||
|
type: integer
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.ExamResponse:
|
||||||
|
properties:
|
||||||
|
end_at:
|
||||||
|
example: "2023-11-10T13:25:00+09:00"
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
example: ef74c59a-c707-4162-a52b-455906c81ec1
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
example: 홍길순
|
||||||
|
type: string
|
||||||
|
program:
|
||||||
|
example: 파이썬 초급 과정
|
||||||
|
type: string
|
||||||
|
program_id:
|
||||||
|
example: 7f9329f5-2e36-4638-92d2-73064b7291a4
|
||||||
|
type: string
|
||||||
|
score:
|
||||||
|
example: 5
|
||||||
|
type: integer
|
||||||
|
start_at:
|
||||||
|
example: "2023-11-10T13:10:00+09:00"
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
example: ready
|
||||||
|
type: string
|
||||||
|
subject:
|
||||||
|
example: 출력 Print
|
||||||
|
type: string
|
||||||
|
total:
|
||||||
|
example: 5
|
||||||
|
type: integer
|
||||||
|
user_id:
|
||||||
|
example: f95159dd-c42c-490d-ac6b-ca5d88a266bb
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.ExamUpdateRequest:
|
||||||
|
properties:
|
||||||
|
end_at:
|
||||||
|
example: "2023-11-10T13:25:00+09:00"
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
example: 홍길순
|
||||||
|
type: string
|
||||||
|
program:
|
||||||
|
example: 파이썬 초급 과정
|
||||||
|
type: string
|
||||||
|
program_id:
|
||||||
|
example: 7f9329f5-2e36-4638-92d2-73064b7291a4
|
||||||
|
type: string
|
||||||
|
score:
|
||||||
|
example: 5
|
||||||
|
type: integer
|
||||||
|
start_at:
|
||||||
|
example: "2023-11-10T13:10:00+09:00"
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
example: ready
|
||||||
|
type: string
|
||||||
|
subject:
|
||||||
|
example: 출력 Print
|
||||||
|
type: string
|
||||||
|
total:
|
||||||
|
example: 5
|
||||||
|
type: integer
|
||||||
|
user_id:
|
||||||
|
example: f95159dd-c42c-490d-ac6b-ca5d88a266bb
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.LoginRequest:
|
||||||
|
properties:
|
||||||
|
password:
|
||||||
|
type: string
|
||||||
|
username:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
learnsteam_learsteam-quiz-api_internal_models.LoginResponse:
|
learnsteam_learsteam-quiz-api_internal_models.LoginResponse:
|
||||||
properties:
|
properties:
|
||||||
refresh_token:
|
refresh_token:
|
||||||
@ -54,6 +208,28 @@ definitions:
|
|||||||
example: 99
|
example: 99
|
||||||
type: integer
|
type: integer
|
||||||
type: object
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.ProgramRequest:
|
||||||
|
properties:
|
||||||
|
content:
|
||||||
|
example: 코스 설명
|
||||||
|
type: string
|
||||||
|
course:
|
||||||
|
example: 코스 이름
|
||||||
|
type: string
|
||||||
|
publish_at:
|
||||||
|
example: "2023-11-10T00:00:00+09:00"
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
example: "on"
|
||||||
|
type: string
|
||||||
|
subject:
|
||||||
|
example: 프로그램 제목
|
||||||
|
type: string
|
||||||
|
tag:
|
||||||
|
items:
|
||||||
|
type: integer
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
learnsteam_learsteam-quiz-api_internal_models.ProgramResponse:
|
learnsteam_learsteam-quiz-api_internal_models.ProgramResponse:
|
||||||
properties:
|
properties:
|
||||||
content:
|
content:
|
||||||
@ -133,6 +309,29 @@ definitions:
|
|||||||
example: 1
|
example: 1
|
||||||
type: integer
|
type: integer
|
||||||
type: object
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.QuizRequest:
|
||||||
|
properties:
|
||||||
|
answer:
|
||||||
|
items:
|
||||||
|
type: integer
|
||||||
|
type: array
|
||||||
|
choice:
|
||||||
|
items:
|
||||||
|
type: integer
|
||||||
|
type: array
|
||||||
|
comment:
|
||||||
|
type: string
|
||||||
|
hint:
|
||||||
|
type: string
|
||||||
|
program_id:
|
||||||
|
type: string
|
||||||
|
question:
|
||||||
|
type: string
|
||||||
|
quiz_type:
|
||||||
|
type: string
|
||||||
|
sequence:
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
learnsteam_learsteam-quiz-api_internal_models.QuizResponse:
|
learnsteam_learsteam-quiz-api_internal_models.QuizResponse:
|
||||||
properties:
|
properties:
|
||||||
answer:
|
answer:
|
||||||
@ -165,6 +364,15 @@ definitions:
|
|||||||
example: 5
|
example: 5
|
||||||
type: integer
|
type: integer
|
||||||
type: object
|
type: object
|
||||||
|
learnsteam_learsteam-quiz-api_internal_models.RegisterRequest:
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
password:
|
||||||
|
type: string
|
||||||
|
username:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
learnsteam_learsteam-quiz-api_internal_models.RegisterResponse:
|
learnsteam_learsteam-quiz-api_internal_models.RegisterResponse:
|
||||||
properties:
|
properties:
|
||||||
refresh_token:
|
refresh_token:
|
||||||
@ -222,20 +430,14 @@ paths:
|
|||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
description: username, password 를 입력하여 로그인
|
description: 사용자가 로그인합니다.
|
||||||
parameters:
|
parameters:
|
||||||
- description: username
|
- description: Login Body
|
||||||
in: body
|
in: body
|
||||||
name: username
|
name: loginBody
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.LoginRequest'
|
||||||
- description: 비밀번호
|
|
||||||
in: body
|
|
||||||
name: password
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@ -243,7 +445,7 @@ paths:
|
|||||||
description: OK
|
description: OK
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.LoginResponse'
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.LoginResponse'
|
||||||
summary: 로그인
|
summary: 사용자 로그인 로그인
|
||||||
tags:
|
tags:
|
||||||
- 로그인
|
- 로그인
|
||||||
/auth/register:
|
/auth/register:
|
||||||
@ -252,24 +454,12 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: username, name, password 를 입력하여 회원가입
|
description: username, name, password 를 입력하여 회원가입
|
||||||
parameters:
|
parameters:
|
||||||
- description: username
|
- description: Register Body
|
||||||
in: body
|
in: body
|
||||||
name: username
|
name: registerBody
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.RegisterRequest'
|
||||||
- description: 이름
|
|
||||||
in: body
|
|
||||||
name: name
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 비밀번호
|
|
||||||
in: body
|
|
||||||
name: password
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@ -280,6 +470,118 @@ paths:
|
|||||||
summary: 회원가입
|
summary: 회원가입
|
||||||
tags:
|
tags:
|
||||||
- 회원가입
|
- 회원가입
|
||||||
|
/exam:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 응시 목록을 가져옵니다.
|
||||||
|
parameters:
|
||||||
|
- description: 검색어
|
||||||
|
in: query
|
||||||
|
name: q
|
||||||
|
type: string
|
||||||
|
- description: 페이지
|
||||||
|
in: query
|
||||||
|
name: page
|
||||||
|
type: integer
|
||||||
|
- description: 페이지 사이즈
|
||||||
|
in: query
|
||||||
|
name: limit
|
||||||
|
type: integer
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamListResponse'
|
||||||
|
summary: 응시 목록 가져오기
|
||||||
|
tags:
|
||||||
|
- Exam
|
||||||
|
patch:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 퀴즈 프로그램 정보를 변경합니다.
|
||||||
|
parameters:
|
||||||
|
- description: Exam Patch Body (변경할 필드만 입력)
|
||||||
|
in: body
|
||||||
|
name: examPatchBody
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamPatchRequest'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse'
|
||||||
|
summary: 퀴즈 프로그램 정보 변경
|
||||||
|
tags:
|
||||||
|
- Exam
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 응시 매칭을 만듭니다.
|
||||||
|
parameters:
|
||||||
|
- description: Exam Body
|
||||||
|
in: body
|
||||||
|
name: examBody
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamRequest'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse'
|
||||||
|
summary: 응시 매칭 생성
|
||||||
|
tags:
|
||||||
|
- Exam
|
||||||
|
put:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 퀴즈 프로그램을 수정합니다.
|
||||||
|
parameters:
|
||||||
|
- description: Exam Update Body
|
||||||
|
in: body
|
||||||
|
name: examUpdateBody
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamUpdateRequest'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse'
|
||||||
|
summary: 퀴즈 프로그램 수정
|
||||||
|
tags:
|
||||||
|
- Exam
|
||||||
|
/exam/{id}:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: ID로 응시 정보를 가져옵니다.
|
||||||
|
parameters:
|
||||||
|
- description: 응시 ID
|
||||||
|
in: path
|
||||||
|
name: id
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ExamResponse'
|
||||||
|
summary: 응시(시험) 정보 가져오기
|
||||||
|
tags:
|
||||||
|
- Exam
|
||||||
/program:
|
/program:
|
||||||
get:
|
get:
|
||||||
consumes:
|
consumes:
|
||||||
@ -317,44 +619,12 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 퀴즈 프로그램을 만듭니다.
|
description: 퀴즈 프로그램을 만듭니다.
|
||||||
parameters:
|
parameters:
|
||||||
- description: 프로그램 제목
|
- description: Program Body
|
||||||
in: body
|
in: body
|
||||||
name: subject
|
name: programBody
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ProgramRequest'
|
||||||
- description: 프로그램 코스
|
|
||||||
in: body
|
|
||||||
name: course
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 프로그램 내용
|
|
||||||
in: body
|
|
||||||
name: content
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 프로그램 태그
|
|
||||||
in: body
|
|
||||||
name: tag
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
- description: 프로그램 상태 on 또는 off
|
|
||||||
in: body
|
|
||||||
name: status
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 프로그램 발행 날짜
|
|
||||||
in: body
|
|
||||||
name: publish_at
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@ -370,44 +640,12 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 퀴즈 프로그램을 수정합니다.
|
description: 퀴즈 프로그램을 수정합니다.
|
||||||
parameters:
|
parameters:
|
||||||
- description: 프로그램 제목
|
- description: Program Body
|
||||||
in: body
|
in: body
|
||||||
name: subject
|
name: programUpdateBody
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.ProgramRequest'
|
||||||
- description: 프로그램 코스
|
|
||||||
in: body
|
|
||||||
name: course
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 프로그램 내용
|
|
||||||
in: body
|
|
||||||
name: content
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 프로그램 태그
|
|
||||||
in: body
|
|
||||||
name: tag
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
- description: 프로그램 상태 on 또는 off
|
|
||||||
in: body
|
|
||||||
name: status
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 프로그램 발행 날짜
|
|
||||||
in: body
|
|
||||||
name: publish_at
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@ -477,58 +715,12 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 퀴즈를 만듭니다.
|
description: 퀴즈를 만듭니다.
|
||||||
parameters:
|
parameters:
|
||||||
- description: 프로그램 ID
|
- description: Quiz Body
|
||||||
in: body
|
in: body
|
||||||
name: program_id
|
name: quizBody
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.QuizRequest'
|
||||||
- description: 퀴즈 순서
|
|
||||||
in: body
|
|
||||||
name: sequence
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
- description: '퀴즈 타입 : choice, check, ox, input'
|
|
||||||
in: body
|
|
||||||
name: quiz_type
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 퀴즈 문제
|
|
||||||
in: body
|
|
||||||
name: question
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: '퀴즈 선택지 : [''선택1'',''선택2'',''선택3'', ''선택4'']'
|
|
||||||
in: body
|
|
||||||
name: choice
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
- description: '퀴즈 정답 : [1,3]'
|
|
||||||
in: body
|
|
||||||
name: answer
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
- description: 퀴즈 힌트
|
|
||||||
in: body
|
|
||||||
name: hint
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 퀴즈 해설
|
|
||||||
in: body
|
|
||||||
name: comment
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@ -544,63 +736,12 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 퀴즈를 수정합니다.
|
description: 퀴즈를 수정합니다.
|
||||||
parameters:
|
parameters:
|
||||||
- description: 퀴즈 ID
|
- description: Quiz Body
|
||||||
in: path
|
|
||||||
name: id
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
- description: 프로그램 ID
|
|
||||||
in: body
|
in: body
|
||||||
name: program_id
|
name: quizBody
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
$ref: '#/definitions/learnsteam_learsteam-quiz-api_internal_models.QuizRequest'
|
||||||
- description: 퀴즈 순서
|
|
||||||
in: body
|
|
||||||
name: sequence
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
- description: '퀴즈 타입 : choice, check, ox, input'
|
|
||||||
in: body
|
|
||||||
name: quiz_type
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 퀴즈 문제
|
|
||||||
in: body
|
|
||||||
name: question
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: '퀴즈 선택지 : [''선택1'',''선택2'',''선택3'', ''선택4'']'
|
|
||||||
in: body
|
|
||||||
name: choice
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
- description: '퀴즈 정답 : [1,3]'
|
|
||||||
in: body
|
|
||||||
name: answer
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
- description: 퀴즈 힌트
|
|
||||||
in: body
|
|
||||||
name: hint
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- description: 퀴즈 해설
|
|
||||||
in: body
|
|
||||||
name: comment
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
|
@ -34,9 +34,7 @@ func NewAuthController(service services.AuthService, tokenService services.Token
|
|||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
//
|
//
|
||||||
// @Param username body string true "username"
|
// @Param registerBody body models.RegisterRequest true "Register Body"
|
||||||
// @Param name body string true "이름"
|
|
||||||
// @Param password body string true "비밀번호"
|
|
||||||
//
|
//
|
||||||
// @Success 200 {object} models.RegisterResponse
|
// @Success 200 {object} models.RegisterResponse
|
||||||
// @Router /auth/register [post]
|
// @Router /auth/register [post]
|
||||||
@ -69,8 +67,7 @@ func (controller *authController) Register(c *gin.Context) {
|
|||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
//
|
//
|
||||||
// @Param username body string true "username"
|
// @Param loginBody body models.LoginRequest true "Login Body"
|
||||||
// @Param password body string true "비밀번호"
|
|
||||||
//
|
//
|
||||||
// @Success 200 {object} models.LoginResponse
|
// @Success 200 {object} models.LoginResponse
|
||||||
// @Router /auth/login [post]
|
// @Router /auth/login [post]
|
||||||
|
306
internal/controllers/exam.go
Normal file
306
internal/controllers/exam.go
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/models"
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/services"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ExamController interface {
|
||||||
|
List(*gin.Context)
|
||||||
|
Find(*gin.Context)
|
||||||
|
Create(*gin.Context)
|
||||||
|
Update(*gin.Context)
|
||||||
|
Patch(*gin.Context)
|
||||||
|
}
|
||||||
|
|
||||||
|
type examController struct {
|
||||||
|
service services.ExamService
|
||||||
|
userService services.UserService
|
||||||
|
programService services.ProgramService
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewExamController(service services.ExamService, userService services.UserService, programService services.ProgramService) ExamController {
|
||||||
|
return &examController{
|
||||||
|
service: service,
|
||||||
|
userService: userService,
|
||||||
|
programService: programService,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exam List
|
||||||
|
//
|
||||||
|
// @Summary 응시 목록 가져오기
|
||||||
|
// @Description 응시 목록을 가져옵니다.
|
||||||
|
// @Tags Exam
|
||||||
|
//
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
//
|
||||||
|
// @Param q query string false "검색어"
|
||||||
|
// @Param page query int false "페이지"
|
||||||
|
// @Param limit query int false "페이지 사이즈"
|
||||||
|
//
|
||||||
|
// @Success 200 {object} models.ExamListResponse
|
||||||
|
// @Router /exam [get]
|
||||||
|
func (controller *examController) List(c *gin.Context) {
|
||||||
|
q := c.DefaultQuery("q", "")
|
||||||
|
page, err := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("error : page")
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
limit, err := strconv.Atoi(c.DefaultQuery("limit", "10"))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("error : limit")
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := controller.service.List(q, page, limit)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
totalNumber, err := controller.service.Total(q)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("error : list")
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
totalPage := int64(totalNumber/int64(limit) + 1)
|
||||||
|
|
||||||
|
response := models.ExamListResponse{
|
||||||
|
Data: *result,
|
||||||
|
Total: totalNumber,
|
||||||
|
Page: page,
|
||||||
|
TotalPage: totalPage,
|
||||||
|
PageSize: limit,
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, response)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get exam
|
||||||
|
//
|
||||||
|
// @Summary 응시(시험) 정보 가져오기
|
||||||
|
// @Description ID로 응시 정보를 가져옵니다.
|
||||||
|
// @Tags Exam
|
||||||
|
//
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
//
|
||||||
|
// @Param id path string true "응시 ID"
|
||||||
|
//
|
||||||
|
// @Success 200 {object} models.ExamResponse
|
||||||
|
// @Router /exam/{id} [get]
|
||||||
|
func (controller *examController) Find(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
|
||||||
|
result, err := controller.service.Find(id)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, result)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create Exam
|
||||||
|
//
|
||||||
|
// @Summary 응시 매칭 생성
|
||||||
|
// @Description 응시 매칭을 만듭니다.
|
||||||
|
// @Tags Exam
|
||||||
|
//
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
//
|
||||||
|
// @Param examBody body models.ExamRequest true "Exam Body"
|
||||||
|
//
|
||||||
|
// @Success 200 {object} models.ExamResponse
|
||||||
|
// @Router /exam [post]
|
||||||
|
func (controller *examController) Create(c *gin.Context) {
|
||||||
|
var request models.ExamRequest
|
||||||
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("users", request.Users)
|
||||||
|
|
||||||
|
program, err := controller.programService.Find(request.ProgramID)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var users []string
|
||||||
|
err = json.Unmarshal(request.Users, &users)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
count := 0
|
||||||
|
for _, user_id := range users {
|
||||||
|
user, err := controller.userService.Find(user_id)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
exam := &models.Exam{
|
||||||
|
ID: uuid.NewString(),
|
||||||
|
ProgramID: program.ID,
|
||||||
|
UserID: user_id,
|
||||||
|
Subject: program.Subject,
|
||||||
|
Program: program.Course,
|
||||||
|
Name: user.Name,
|
||||||
|
Score: 0,
|
||||||
|
Total: 5,
|
||||||
|
Status: "ready",
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = controller.service.Create(exam)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
count += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, gin.H{"count": count})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update Exam
|
||||||
|
//
|
||||||
|
// @Summary 퀴즈 프로그램 수정
|
||||||
|
// @Description 퀴즈 프로그램을 수정합니다.
|
||||||
|
// @Tags Exam
|
||||||
|
//
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
//
|
||||||
|
// @Param examUpdateBody body models.ExamUpdateRequest true "Exam Update Body"
|
||||||
|
//
|
||||||
|
// @Success 200 {object} models.ExamResponse
|
||||||
|
// @Router /exam [put]
|
||||||
|
func (controller *examController) Update(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
var request models.ExamUpdateRequest
|
||||||
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("request", request)
|
||||||
|
exam, err := controller.service.Find(id)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
exam.ProgramID = request.ProgramID
|
||||||
|
exam.UserID = request.UserID
|
||||||
|
exam.Subject = request.Subject
|
||||||
|
exam.Program = request.Program
|
||||||
|
exam.Name = request.Name
|
||||||
|
exam.Status = request.Status
|
||||||
|
exam.Score = request.Score
|
||||||
|
exam.Total = request.Total
|
||||||
|
|
||||||
|
if request.StartAt != "" {
|
||||||
|
fmt.Println("request.StartAt", request.StartAt)
|
||||||
|
start_at, err := time.Parse("2006-01-02T15:04:05-07:00", request.StartAt)
|
||||||
|
if err == nil {
|
||||||
|
exam.StartAt = &start_at
|
||||||
|
}
|
||||||
|
fmt.Println("start_at", start_at)
|
||||||
|
}
|
||||||
|
|
||||||
|
if request.EndAt != "" {
|
||||||
|
fmt.Println("request.EndAt", request.EndAt)
|
||||||
|
end_at, err := time.Parse("2006-01-02T15:04:05-07:00", request.EndAt)
|
||||||
|
if err == nil {
|
||||||
|
exam.EndAt = &end_at
|
||||||
|
}
|
||||||
|
fmt.Println("end_at", end_at)
|
||||||
|
}
|
||||||
|
fmt.Println("exam", exam)
|
||||||
|
result, err := controller.service.Update(exam)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("result", result)
|
||||||
|
c.JSON(http.StatusOK, result)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch Exam
|
||||||
|
//
|
||||||
|
// @Summary 퀴즈 프로그램 정보 변경
|
||||||
|
// @Description 퀴즈 프로그램 정보를 변경합니다.
|
||||||
|
// @Tags Exam
|
||||||
|
//
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
//
|
||||||
|
// @Param examPatchBody body models.ExamPatchRequest true "Exam Patch Body (변경할 필드만 입력)"
|
||||||
|
//
|
||||||
|
// @Success 200 {object} models.ExamResponse
|
||||||
|
// @Router /exam [patch]
|
||||||
|
func (controller *examController) Patch(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
var request models.ExamPatchRequest
|
||||||
|
if err := c.ShouldBindJSON(&request); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("request", request)
|
||||||
|
exam, err := controller.service.Find(id)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if request.Status != "" {
|
||||||
|
exam.Status = request.Status
|
||||||
|
}
|
||||||
|
|
||||||
|
if request.StartAt != "" {
|
||||||
|
fmt.Println("request.StartAt", request.StartAt)
|
||||||
|
start_at, err := time.Parse("2006-01-02T15:04:05-07:00", request.StartAt)
|
||||||
|
if err == nil {
|
||||||
|
exam.StartAt = &start_at
|
||||||
|
}
|
||||||
|
fmt.Println("start_at", start_at)
|
||||||
|
}
|
||||||
|
|
||||||
|
if request.EndAt != "" {
|
||||||
|
fmt.Println("request.EndAt", request.EndAt)
|
||||||
|
end_at, err := time.Parse("2006-01-02T15:04:05-07:00", request.EndAt)
|
||||||
|
if err == nil {
|
||||||
|
exam.EndAt = &end_at
|
||||||
|
}
|
||||||
|
fmt.Println("end_at", end_at)
|
||||||
|
}
|
||||||
|
fmt.Println("exam", exam)
|
||||||
|
result, err := controller.service.Update(exam)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("result", result)
|
||||||
|
c.JSON(http.StatusOK, result)
|
||||||
|
}
|
@ -121,12 +121,7 @@ func (controller *programController) Find(c *gin.Context) {
|
|||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
//
|
//
|
||||||
// @Param subject body string true "프로그램 제목"
|
// @Param programBody body models.ProgramRequest true "Program Body"
|
||||||
// @Param course body string true "프로그램 코스"
|
|
||||||
// @Param content body string true "프로그램 내용"
|
|
||||||
// @Param tag body []string true "프로그램 태그"
|
|
||||||
// @Param status body string true "프로그램 상태 on 또는 off"
|
|
||||||
// @Param publish_at body string true "프로그램 발행 날짜"
|
|
||||||
//
|
//
|
||||||
// @Success 200 {object} models.ProgramResponse
|
// @Success 200 {object} models.ProgramResponse
|
||||||
// @Router /program [post]
|
// @Router /program [post]
|
||||||
@ -174,12 +169,7 @@ func (controller *programController) Create(c *gin.Context) {
|
|||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
//
|
//
|
||||||
// @Param subject body string true "프로그램 제목"
|
// @Param programUpdateBody body models.ProgramRequest true "Program Body"
|
||||||
// @Param course body string true "프로그램 코스"
|
|
||||||
// @Param content body string true "프로그램 내용"
|
|
||||||
// @Param tag body []string true "프로그램 태그"
|
|
||||||
// @Param status body string true "프로그램 상태 on 또는 off"
|
|
||||||
// @Param publish_at body string true "프로그램 발행 날짜"
|
|
||||||
//
|
//
|
||||||
// @Success 200 {object} models.ProgramResponse
|
// @Success 200 {object} models.ProgramResponse
|
||||||
// @Router /program [put]
|
// @Router /program [put]
|
||||||
|
@ -112,14 +112,7 @@ func (controller *quizController) Find(c *gin.Context) {
|
|||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
//
|
//
|
||||||
// @Param program_id body string true "프로그램 ID"
|
// @Param quizBody body models.QuizRequest true "Quiz Body"
|
||||||
// @Param sequence body int true "퀴즈 순서"
|
|
||||||
// @Param quiz_type body string true "퀴즈 타입 : choice, check, ox, input"
|
|
||||||
// @Param question body string true "퀴즈 문제"
|
|
||||||
// @Param choice body []string true "퀴즈 선택지 : ['선택1','선택2','선택3', '선택4']"
|
|
||||||
// @Param answer body []string true "퀴즈 정답 : [1,3]"
|
|
||||||
// @Param hint body string true "퀴즈 힌트"
|
|
||||||
// @Param comment body string true "퀴즈 해설"
|
|
||||||
//
|
//
|
||||||
// @Success 200 {object} models.QuizResponse
|
// @Success 200 {object} models.QuizResponse
|
||||||
// @Router /quiz [post]
|
// @Router /quiz [post]
|
||||||
@ -162,15 +155,7 @@ func (controller *quizController) Create(c *gin.Context) {
|
|||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
//
|
//
|
||||||
// @Param id path string true "퀴즈 ID"
|
// @Param quizBody body models.QuizRequest true "Quiz Body"
|
||||||
// @Param program_id body string true "프로그램 ID"
|
|
||||||
// @Param sequence body int true "퀴즈 순서"
|
|
||||||
// @Param quiz_type body string true "퀴즈 타입 : choice, check, ox, input"
|
|
||||||
// @Param question body string true "퀴즈 문제"
|
|
||||||
// @Param choice body []string true "퀴즈 선택지 : ['선택1','선택2','선택3', '선택4']"
|
|
||||||
// @Param answer body []string true "퀴즈 정답 : [1,3]"
|
|
||||||
// @Param hint body string true "퀴즈 힌트"
|
|
||||||
// @Param comment body string true "퀴즈 해설"
|
|
||||||
//
|
//
|
||||||
// @Success 200 {object} models.QuizResponse
|
// @Success 200 {object} models.QuizResponse
|
||||||
// @Router /quiz [put]
|
// @Router /quiz [put]
|
||||||
|
@ -40,5 +40,6 @@ func AutoMigrate() {
|
|||||||
&models.Token{},
|
&models.Token{},
|
||||||
&models.Program{},
|
&models.Program{},
|
||||||
&models.Quiz{},
|
&models.Quiz{},
|
||||||
|
&models.Exam{},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
70
internal/models/exam.go
Normal file
70
internal/models/exam.go
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gorm.io/datatypes"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Exam struct {
|
||||||
|
ID string `json:"id" db:"id" example:"ef74c59a-c707-4162-a52b-455906c81ec1" gorm:"column:id;size:255;primary_key;"`
|
||||||
|
ProgramID string `json:"program_id" db:"program_id" example:"7f9329f5-2e36-4638-92d2-73064b7291a4" gorm:"column:program_id;size:255;uniqueIndex:idx_exam;"`
|
||||||
|
UserID string `json:"user_id" db:"user_id" example:"f95159dd-c42c-490d-ac6b-ca5d88a266bb" gorm:"column:user_id;size:255;uniqueIndex:idx_exam;"`
|
||||||
|
Subject string `json:"subject" db:"subject" example:"출력 Print" gorm:"column:subject;size:255;index;"`
|
||||||
|
Program string `json:"program" db:"program" example:"파이썬 초급 과정" gorm:"column:program;size:255;index;"`
|
||||||
|
Name string `json:"name" db:"name" example:"홍길순" gorm:"column:name;size:255;index;"`
|
||||||
|
Score int `json:"score" db:"score" example:"5" gorm:"column:score;"`
|
||||||
|
Total int `json:"total" db:"total" example:"5" gorm:"column:total;"`
|
||||||
|
Status string `json:"status" example:"ready" gorm:"column:status;size:10;index;"`
|
||||||
|
StartAt *time.Time `json:"start_at" gorm:"column:start_at;index;"`
|
||||||
|
EndAt *time.Time `json:"end_at" gorm:"column:end_at;index;"`
|
||||||
|
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false"`
|
||||||
|
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExamRequest struct {
|
||||||
|
ProgramID string `json:"program_id" example:"7f9329f5-2e36-4638-92d2-73064b7291a4"`
|
||||||
|
Users datatypes.JSON `json:"users"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExamResponse struct {
|
||||||
|
ID string `json:"id" db:"id" example:"ef74c59a-c707-4162-a52b-455906c81ec1"`
|
||||||
|
ProgramID string `json:"program_id" example:"7f9329f5-2e36-4638-92d2-73064b7291a4"`
|
||||||
|
UserID string `json:"user_id" example:"f95159dd-c42c-490d-ac6b-ca5d88a266bb"`
|
||||||
|
Subject string `json:"subject" example:"출력 Print"`
|
||||||
|
Program string `json:"program" example:"파이썬 초급 과정"`
|
||||||
|
Name string `json:"name" example:"홍길순"`
|
||||||
|
Score int `json:"score" example:"5"`
|
||||||
|
Total int `json:"total" example:"5"`
|
||||||
|
Status string `json:"status" example:"ready"`
|
||||||
|
StartAt string `json:"start_at,omitempty" example:"2023-11-10T13:10:00+09:00"`
|
||||||
|
EndAt string `json:"end_at,omitempty" example:"2023-11-10T13:25:00+09:00"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExamUpdateRequest struct {
|
||||||
|
ProgramID string `json:"program_id" example:"7f9329f5-2e36-4638-92d2-73064b7291a4"`
|
||||||
|
UserID string `json:"user_id" example:"f95159dd-c42c-490d-ac6b-ca5d88a266bb"`
|
||||||
|
Subject string `json:"subject" example:"출력 Print"`
|
||||||
|
Program string `json:"program" example:"파이썬 초급 과정"`
|
||||||
|
Name string `json:"name" example:"홍길순"`
|
||||||
|
Score int `json:"score" example:"5"`
|
||||||
|
Total int `json:"total" example:"5"`
|
||||||
|
Status string `json:"status" example:"ready"`
|
||||||
|
StartAt string `json:"start_at,omitempty" example:"2023-11-10T13:10:00+09:00"`
|
||||||
|
EndAt string `json:"end_at,omitempty" example:"2023-11-10T13:25:00+09:00"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExamPatchRequest struct {
|
||||||
|
Score int `json:"score,omitempty" example:"4"`
|
||||||
|
Status string `json:"status,omitempty" example:"rating"`
|
||||||
|
StartAt string `json:"start_at,omitempty" example:"2023-11-10T13:10:00+09:00"`
|
||||||
|
EndAt string `json:"end_at,omitempty" example:"2023-11-10T13:25:00+09:00"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExamListResponse struct {
|
||||||
|
Data []Exam `json:"data"`
|
||||||
|
Total int64 `json:"total" example:"999"`
|
||||||
|
Page int `json:"page" example:"1"`
|
||||||
|
TotalPage int64 `json:"totalPage" example:"99"`
|
||||||
|
PageSize int `json:"pageSize" example:"10"`
|
||||||
|
}
|
@ -15,8 +15,8 @@ type Program struct {
|
|||||||
Tags string `json:"-" db:"tags" gorm:"column:tags;index;"`
|
Tags string `json:"-" db:"tags" gorm:"column:tags;index;"`
|
||||||
Status string `json:"status" example:"on" gorm:"column:status;size:10;index;"`
|
Status string `json:"status" example:"on" gorm:"column:status;size:10;index;"`
|
||||||
PublishAt time.Time `json:"publish_at" example:"2023-11-10T00:00:00+09:00" gorm:"column:publish_at;index;"`
|
PublishAt time.Time `json:"publish_at" example:"2023-11-10T00:00:00+09:00" gorm:"column:publish_at;index;"`
|
||||||
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;index;"`
|
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false"`
|
||||||
CreatedAt time.Time `json:"-" gorm:"column:created_at;index;"`
|
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProgramRequest struct {
|
type ProgramRequest struct {
|
||||||
|
@ -16,8 +16,8 @@ type Quiz struct {
|
|||||||
Answer datatypes.JSON `json:"answer" db:"answer" gorm:"column:answer;"`
|
Answer datatypes.JSON `json:"answer" db:"answer" gorm:"column:answer;"`
|
||||||
Hint string `json:"hint" db:"hint" example:"퀴즈 힌트" gorm:"column:answer;size:1024;"`
|
Hint string `json:"hint" db:"hint" example:"퀴즈 힌트" gorm:"column:answer;size:1024;"`
|
||||||
Comment string `json:"comment" db:"comment" example:"퀴즈 해설" gorm:"column:comment;size:1024;"`
|
Comment string `json:"comment" db:"comment" example:"퀴즈 해설" gorm:"column:comment;size:1024;"`
|
||||||
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;index;"`
|
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false"`
|
||||||
CreatedAt time.Time `json:"-" gorm:"column:created_at;index;"`
|
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type QuizRequest struct {
|
type QuizRequest struct {
|
||||||
|
@ -8,8 +8,8 @@ type User struct {
|
|||||||
Name string `json:"name" db:"name" example:"홍길동" gorm:"column:name;size:50;"`
|
Name string `json:"name" db:"name" example:"홍길동" gorm:"column:name;size:50;"`
|
||||||
Score int32 `json:"score" db:"score" example:"9999" gorm:"column:score;"`
|
Score int32 `json:"score" db:"score" example:"9999" gorm:"column:score;"`
|
||||||
Password string `json:"-" db:"password" gorm:"column:password;size:255;not null;"`
|
Password string `json:"-" db:"password" gorm:"column:password;size:255;not null;"`
|
||||||
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;index;"`
|
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false"`
|
||||||
CreatedAt time.Time `json:"-" gorm:"column:created_at;index;"`
|
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserListResponse struct {
|
type UserListResponse struct {
|
||||||
|
81
internal/repositories/exam.go
Normal file
81
internal/repositories/exam.go
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
package repositories
|
||||||
|
|
||||||
|
import (
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/models"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type examRepository struct {
|
||||||
|
DB *gorm.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewExamRepository(db *gorm.DB) ExamRepository {
|
||||||
|
return &examRepository{
|
||||||
|
DB: db,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExamRepository interface {
|
||||||
|
List(string, int, int) (*[]models.Exam, error)
|
||||||
|
Total(string) (int64, error)
|
||||||
|
|
||||||
|
Find(string) (*models.Exam, error)
|
||||||
|
Create(*models.Exam) (*models.Exam, error)
|
||||||
|
Update(*models.Exam) (*models.Exam, error)
|
||||||
|
Delete(string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *examRepository) List(q string, page int, limit int) (*[]models.Exam, error) {
|
||||||
|
var exams *[]models.Exam
|
||||||
|
var err error
|
||||||
|
offset := limit * (page - 1)
|
||||||
|
if q != "" {
|
||||||
|
err = r.DB.Offset(offset).Limit(limit).Order("created_at DESC").Where("subject LIKE ? OR program LIKE ? OR name LIKE ?", "%"+q+"%", "%"+q+"%", "%"+q+"%").Find(&exams).Error
|
||||||
|
} else {
|
||||||
|
err = r.DB.Offset(offset).Limit(limit).Order("created_at DESC").Find(&exams).Error
|
||||||
|
}
|
||||||
|
return exams, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *examRepository) Total(q string) (int64, error) {
|
||||||
|
var total int64
|
||||||
|
var err error
|
||||||
|
if q != "" {
|
||||||
|
err = r.DB.Model(&models.Exam{}).Where("subject LIKE ? OR program LIKE ? OR name LIKE ?", "%"+q+"%", "%"+q+"%", "%"+q+"%").Count(&total).Error
|
||||||
|
} else {
|
||||||
|
err = r.DB.Model(&models.Exam{}).Count(&total).Error
|
||||||
|
}
|
||||||
|
|
||||||
|
return total, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *examRepository) Find(id string) (*models.Exam, error) {
|
||||||
|
var exam *models.Exam
|
||||||
|
err := r.DB.Where("id = ?", id).First(&exam).Error
|
||||||
|
return exam, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *examRepository) Create(exam *models.Exam) (*models.Exam, error) {
|
||||||
|
err := r.DB.Create(&exam).Error
|
||||||
|
return exam, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *examRepository) Update(exam *models.Exam) (*models.Exam, error) {
|
||||||
|
var row *models.Exam
|
||||||
|
if err := r.DB.Where("id=?", exam.ID).First(&row).Error; err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err := r.DB.Model(&row).Select("*").Updates(&exam).Error
|
||||||
|
return row, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *examRepository) Delete(id string) error {
|
||||||
|
var exam *models.Exam
|
||||||
|
if err := r.DB.Where("id=?", id).First(&exam).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err := r.DB.Delete(&exam).Error
|
||||||
|
return err
|
||||||
|
}
|
65
internal/routers/exam.go
Normal file
65
internal/routers/exam.go
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package routers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/controllers"
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/middleware"
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/repositories"
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/services"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func InitExamRouter(db *gorm.DB, router *gin.Engine) {
|
||||||
|
r := NewExamRouter(db, router)
|
||||||
|
r.SetExamRouter(db, router)
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExamRouter interface {
|
||||||
|
SetRouter(db *gorm.DB, router *gin.Engine)
|
||||||
|
}
|
||||||
|
|
||||||
|
type examRouter struct {
|
||||||
|
db *gorm.DB
|
||||||
|
repository repositories.ExamRepository
|
||||||
|
programRepository repositories.ProgramRepository
|
||||||
|
userRepository repositories.UserRepository
|
||||||
|
|
||||||
|
service services.ExamService
|
||||||
|
programService services.ProgramService
|
||||||
|
userService services.UserService
|
||||||
|
|
||||||
|
controller controllers.ExamController
|
||||||
|
|
||||||
|
router *gin.Engine
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewExamRouter(db *gorm.DB, router *gin.Engine) *examRouter {
|
||||||
|
repository := repositories.NewExamRepository(db)
|
||||||
|
programRepository := repositories.NewProgramRepository(db)
|
||||||
|
tokenRepository := repositories.NewTokenRepository(db)
|
||||||
|
userRepository := repositories.NewUserRepository(db)
|
||||||
|
|
||||||
|
service := services.NewExamService(repository)
|
||||||
|
programService := services.NewProgramService(programRepository)
|
||||||
|
userService := services.NewUserService(userRepository, tokenRepository)
|
||||||
|
|
||||||
|
controller := controllers.NewExamController(service, userService, programService)
|
||||||
|
|
||||||
|
return &examRouter{
|
||||||
|
db: db,
|
||||||
|
repository: repository,
|
||||||
|
service: service,
|
||||||
|
controller: controller,
|
||||||
|
router: router,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *examRouter) SetExamRouter(db *gorm.DB, router *gin.Engine) {
|
||||||
|
group := router.Group("/exam")
|
||||||
|
group.GET("", middleware.Auth(), r.controller.List)
|
||||||
|
group.GET("/:id", middleware.Auth(), r.controller.Find)
|
||||||
|
group.POST("", middleware.Auth(), r.controller.Create)
|
||||||
|
group.PUT("/:id", middleware.Auth(), r.controller.Update)
|
||||||
|
group.PATCH("/:id", middleware.Auth(), r.controller.Patch)
|
||||||
|
}
|
@ -25,6 +25,7 @@ func Init() {
|
|||||||
InitUserRouter(maindb, Router)
|
InitUserRouter(maindb, Router)
|
||||||
InitProgramRouter(maindb, Router)
|
InitProgramRouter(maindb, Router)
|
||||||
InitQuizRouter(maindb, Router)
|
InitQuizRouter(maindb, Router)
|
||||||
|
InitExamRouter(maindb, Router)
|
||||||
|
|
||||||
InitSwaggerRouter(Router)
|
InitSwaggerRouter(Router)
|
||||||
}
|
}
|
||||||
|
56
internal/services/exam.go
Normal file
56
internal/services/exam.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package services
|
||||||
|
|
||||||
|
import (
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/models"
|
||||||
|
"learnsteam/learsteam-quiz-api/internal/repositories"
|
||||||
|
)
|
||||||
|
|
||||||
|
type examService struct {
|
||||||
|
repository repositories.ExamRepository
|
||||||
|
}
|
||||||
|
|
||||||
|
type ExamService interface {
|
||||||
|
List(string, int, int) (*[]models.Exam, error)
|
||||||
|
Total(string) (int64, error)
|
||||||
|
|
||||||
|
Find(string) (*models.Exam, error)
|
||||||
|
Create(*models.Exam) (*models.Exam, error)
|
||||||
|
Update(*models.Exam) (*models.Exam, error)
|
||||||
|
Delete(string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewExamService(repository repositories.ExamRepository) ExamService {
|
||||||
|
return &examService{
|
||||||
|
repository: repository,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *examService) List(q string, page int, limit int) (*[]models.Exam, error) {
|
||||||
|
return s.repository.List(q, page, limit)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *examService) Total(q string) (int64, error) {
|
||||||
|
return s.repository.Total(q)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *examService) Find(id string) (*models.Exam, error) {
|
||||||
|
return s.repository.Find(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *examService) Create(exam *models.Exam) (*models.Exam, error) {
|
||||||
|
result, err := s.repository.Create(exam)
|
||||||
|
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *examService) Update(exam *models.Exam) (*models.Exam, error) {
|
||||||
|
result, err := s.repository.Update(exam)
|
||||||
|
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *examService) Delete(id string) error {
|
||||||
|
err := s.repository.Delete(id)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user