first commit
This commit is contained in:
29
internal/models/auth.go
Normal file
29
internal/models/auth.go
Normal file
@ -0,0 +1,29 @@
|
||||
package models
|
||||
|
||||
type LoginRequest struct {
|
||||
Username string `json:"user_name" example:"admin0"`
|
||||
Password string `json:"password" example:"testme"`
|
||||
}
|
||||
|
||||
type LoginResponse struct {
|
||||
User User `json:"user"`
|
||||
Token string `json:"token" example:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjE3MDI3MTMwMjcsInN1"`
|
||||
RefreshToken string `json:"refresh_token" example:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjE3MDc4OTcwMjcs"`
|
||||
}
|
||||
|
||||
type RegisterRequest struct {
|
||||
FirstName string `json:"first_name" example:"길순"`
|
||||
LastName string `json:"last_name" example:"홍"`
|
||||
Username string `json:"user_name" example:"gilsoon"`
|
||||
Password string `json:"password" example:"StrongPass!@#$"`
|
||||
Gender string `json:"gender" example:"F"`
|
||||
UserRole string `json:"user_role" example:"member"`
|
||||
Phone string `json:"phone_cs" example:"01012345678"`
|
||||
Image string `json:"upload_image" example:""`
|
||||
}
|
||||
|
||||
type RegisterResponse struct {
|
||||
User User `json:"user"`
|
||||
Token string `json:"token" example:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjE3MDI3MTMwMjcsInN1"`
|
||||
RefreshToken string `json:"refresh_token" example:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjE3MDc4OTcwMjcs"`
|
||||
}
|
57
internal/models/center.go
Normal file
57
internal/models/center.go
Normal file
@ -0,0 +1,57 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// CREATE TABLE `Centers` (
|
||||
// `id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
// `guid_id` varchar(36) DEFAULT '',
|
||||
// `center_title` varchar(50) DEFAULT '' COMMENT '강동런스팀로봇코딩학원',
|
||||
// `center_name` varchar(50) DEFAULT '' COMMENT 'learnsteam_kd',
|
||||
// `owner_id` bigint(20) DEFAULT 0,
|
||||
// `content_page` text DEFAULT '' COMMENT '학원상세페이지, html/마크다운/text',
|
||||
// `company_info` text DEFAULT '' COMMENT '사업자정보-json\r\n기타 정보 추가 가능\r\n\r\n{\r\n "company_ceo": "대표자이름",\r\n "company_code": "사업자번호",\r\n "company_phone": "대표전화번호",\r\n "company_email": "대표전자메일",\r\n "company_homepage": "대표홈페이지 url",\r\n "company_logo": "로고이미지 url",\r\n "company_cover_image": "대표 이미지", \r\n}',
|
||||
// `memo` varchar(256) DEFAULT '',
|
||||
// `created_at` timestamp NULL DEFAULT current_timestamp(),
|
||||
// `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
// `status` varchar(10) DEFAULT NULL,
|
||||
// PRIMARY KEY (`id`)
|
||||
// ) ENGINE=InnoDB AUTO_INCREMENT=1000005 DEFAULT CHARSET=utf8mb4 COMMENT='Centers의 이미지/영상은 Links에서 관리됨. ';
|
||||
|
||||
type Center struct {
|
||||
ID int64 `json:"id" db:"id" example:"100001" gorm:"column:id;primary_key;"`
|
||||
GUID string `json:"guid_id" db:"guid_id" example:"2036023a-fb56-4b6c-b3bb-c787c681ada6" gorm:"column:guid_id;size:255;index;"`
|
||||
Title string `json:"center_title" db:"center_title" example:"강동런스팀로봇코딩학원" gorm:"column:center_title;size:50;index;"`
|
||||
Name string `json:"center_name" db:"center_name" example:"learnsteam_kd" gorm:"column:center_name;size:50;index;"`
|
||||
OwnerID int64 `json:"owner_id" db:"owner_id" example:"100001" gorm:"column:owner_id;index;"`
|
||||
Content string `json:"content_page" db:"content_page" example:"학원상세페이지, html/마크다운/text" gorm:"column:content_page;size:2048;"`
|
||||
Info string `json:"company_info" db:"company_info" example:"사업자정보-json 기타 정보 추가 가능" gorm:"column:company_info;size:2048;"`
|
||||
Memo string `json:"memo" db:"memo" example:"메모" gorm:"column:memo;size:1024;"`
|
||||
Status string `json:"status" db:"status" example:"on" gorm:"column:status;size:10;index;"`
|
||||
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false"`
|
||||
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||
}
|
||||
|
||||
// 테이블이름 정의
|
||||
func (Center) TableName() string {
|
||||
return "Centers"
|
||||
}
|
||||
|
||||
type CenterRequest struct {
|
||||
Title string `json:"center_title" example:"강동런스팀로봇코딩학원"`
|
||||
Name string `json:"center_name" example:"learnsteam_kd"`
|
||||
OwnerID int64 `json:"owner_id" example:"100001"`
|
||||
Content string `json:"content_page" example:"학원상세페이지, html/마크다운/text"`
|
||||
Info string `json:"company_info" example:"사업자정보-json 기타 정보 추가 가능"`
|
||||
Memo string `json:"memo" example:"메모"`
|
||||
Status string `json:"status" example:"on"`
|
||||
}
|
||||
|
||||
type CenterListResponse struct {
|
||||
Data []Center `json:"data"`
|
||||
Total int64 `json:"total" example:"5"`
|
||||
Page int `json:"page" example:"1"`
|
||||
TotalPage int64 `json:"totalPage" example:"1"`
|
||||
PageSize int `json:"pageSize" example:"10"`
|
||||
}
|
78
internal/models/quiz.go
Normal file
78
internal/models/quiz.go
Normal file
@ -0,0 +1,78 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/datatypes"
|
||||
)
|
||||
|
||||
// 문항 json,
|
||||
// option1~4는 구분이름일 뿐, 실제로는 셔플되어서 반환됨.
|
||||
/*
|
||||
{
|
||||
"option1": {"content": "markdown 문서로 작성됨", "is_answer": false},
|
||||
"option2": {"content": "markdown 문서로 작성됨", "is_answer": false},
|
||||
"option3": {"content": "markdown 문서로 작성됨", "is_answer": false},
|
||||
"option4": {"content": "markdown 문서로 작성됨", "is_answer": true},
|
||||
"hint": "markdown문서로 작성됨",
|
||||
"score": 10
|
||||
}
|
||||
*/
|
||||
|
||||
type Quiz struct {
|
||||
ID int64 `json:"id" db:"id" example:"1000001" gorm:"column:id;primary_key;"`
|
||||
GUID string `json:"guid_id" db:"guid_id" example:"2036023a-fb56-4b6c-b3bb-c787c681ada6" gorm:"column:guid_id;size:255;index;"`
|
||||
CenterID int64 `json:"center_id" db:"center_id" example:"100001" gorm:"column:center_id;index;"`
|
||||
QuizPaperID int64 `json:"quiz_paper_id" db:"quiz_paper_id" example:"100001" gorm:"column:quiz_paper_id;index;"`
|
||||
No int `json:"vol_no" db:"vol_no" example:"5" gorm:"column:vol_no;index;"`
|
||||
QuestionType string `json:"question_type" db:"question_type" example:"choice" gorm:"column:question_type;size:10;index;"`
|
||||
Question string `json:"question" db:"question" example:"퀴즈 질문입니다." gorm:"column:question;size:512;"`
|
||||
Content datatypes.JSON `json:"content" db:"content" gorm:"column:content;"`
|
||||
Answer datatypes.JSON `json:"answer" db:"answer" gorm:"column:answer;"`
|
||||
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false"`
|
||||
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||
}
|
||||
|
||||
// 테이블이름 정의
|
||||
func (Quiz) TableName() string {
|
||||
return "Quizs"
|
||||
}
|
||||
|
||||
type QuizRequest struct {
|
||||
QuizPaperID int64 `json:"quiz_paper_id" example:"1000001"`
|
||||
CenterID int64 `json:"center_id" example:"1000001"`
|
||||
No int `json:"vol_no" example:"1"`
|
||||
QuestionType string `json:"question_type" example:"choice"`
|
||||
Question string `json:"question" example:"질문입니다."`
|
||||
Content QuizContent `json:"content"`
|
||||
Answer []string `json:"answer" example:"option1,option2"`
|
||||
}
|
||||
|
||||
type QuizResponse struct {
|
||||
ID int64 `json:"id" example:"1000001"`
|
||||
QuizPaperID int64 `json:"quiz_paper_id" example:"1000001"`
|
||||
No int `json:"vol_no" example:"5"`
|
||||
QuestionType string `json:"question_type" example:"check"`
|
||||
Question string `json:"question" example:"퀴즈 질문입니다."`
|
||||
Content QuizContent `json:"content"`
|
||||
Answer []string `json:"answer" example:"option1,option2"`
|
||||
}
|
||||
|
||||
type QuizListResponse struct {
|
||||
Data []Quiz `json:"data"`
|
||||
Total int64 `json:"total" example:"5"`
|
||||
Page int `json:"page" example:"1"`
|
||||
TotalPage int64 `json:"totalPage" example:"1"`
|
||||
PageSize int `json:"pageSize" example:"10"`
|
||||
}
|
||||
|
||||
type QuizContent struct {
|
||||
Option1 string `json:"option1" example:"markdown 문서로 작성됨"`
|
||||
Option2 string `json:"option2" example:"markdown 문서로 작성됨"`
|
||||
Option3 string `json:"option3" example:"markdown 문서로 작성됨"`
|
||||
Option4 string `json:"option4" example:"markdown 문서로 작성됨"`
|
||||
Hint string `json:"hint" example:"markdown문서로 작성됨"`
|
||||
}
|
||||
|
||||
type QuizAnswer struct {
|
||||
}
|
82
internal/models/quizpaper.go
Normal file
82
internal/models/quizpaper.go
Normal file
@ -0,0 +1,82 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/datatypes"
|
||||
)
|
||||
|
||||
// CREATE TABLE `QuizPapers` (
|
||||
// `id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
// `guid_id` char(36) NOT NULL DEFAULT '0',
|
||||
// `center_id` bigint(20) NOT NULL DEFAULT 0,
|
||||
// `manager_id` bigint(20) NOT NULL DEFAULT 0,
|
||||
// `title` varchar(256) NOT NULL DEFAULT '' COMMENT '퀴즈시트 제목',
|
||||
// `status` varchar(10) NOT NULL DEFAULT '0' COMMENT 'on/off',
|
||||
// `content` text NOT NULL DEFAULT '' COMMENT 'markdown 문서',
|
||||
// `tags` varchar(256) NOT NULL DEFAULT '' COMMENT '출력,hello world,for반복문...',
|
||||
// `category` varchar(256) NOT NULL DEFAULT '파이썬기본',
|
||||
// `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||
// `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
// PRIMARY KEY (`id`) USING BTREE,
|
||||
// KEY `guid_id` (`guid_id`) USING BTREE,
|
||||
// KEY `center_id` (`center_id`) USING BTREE,
|
||||
// KEY `manager_id` (`manager_id`) USING BTREE
|
||||
// ) ENGINE=InnoDB AUTO_INCREMENT=10000001 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='퀴즈시험지 관리 테이블\r\n\r\n';
|
||||
|
||||
type QuizPaper struct {
|
||||
ID int64 `json:"id" db:"id" example:"100001" gorm:"column:id;primary_key;"`
|
||||
GUID string `json:"guid_id" db:"guid_id" example:"ef74c59a-c707-4162-a52b-455906c81ec1" gorm:"column:guid_id;size:255;index;"`
|
||||
CenterID int64 `json:"center_id" db:"center_id" example:"100001" gorm:"column:center_id;index;"`
|
||||
ManagerID int64 `json:"manager_id" db:"manager_id" example:"100001" gorm:"column:manager_id;index;"`
|
||||
Title string `json:"title" db:"title" example:"퀴즈 시트 제목" gorm:"column:title;size:255;index;"`
|
||||
Content string `json:"content" db:"content" example:"퀴즈 시트 설명" gorm:"column:content;size:512;"`
|
||||
Category string `json:"category" db:"category" example:"파이썬기본" gorm:"column:title;size:255;"`
|
||||
Tag datatypes.JSON `json:"tag" db:"tag" gorm:"column:tag;"`
|
||||
Status string `json:"status" example:"on" gorm:"column:status;size:10;index;"`
|
||||
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false"`
|
||||
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||
}
|
||||
|
||||
// 테이블이름 정의
|
||||
func (QuizPaper) TableName() string {
|
||||
return "QuizPapers"
|
||||
}
|
||||
|
||||
type QuizPaperRequest struct {
|
||||
CenterID int64 `json:"center_id" example:"100001"`
|
||||
Title string `json:"title" example:"퀴즈 시트 제목"`
|
||||
Content string `json:"content" example:"퀴즈 시트 설명"`
|
||||
Category string `json:"category" example:"파이썬기본"`
|
||||
Tag datatypes.JSON `json:"tag"`
|
||||
Status string `json:"status" example:"on"`
|
||||
}
|
||||
|
||||
type QuizPaperResponse struct {
|
||||
ID int64 `json:"id" example:"100001"`
|
||||
CenterID int64 `json:"center_id" example:"100001"`
|
||||
ManagerID int64 `json:"manager_id" example:"100001"`
|
||||
Title string `json:"title" example:"퀴즈 시트 제목"`
|
||||
Content string `json:"content" example:"퀴즈 시트 설명"`
|
||||
Category string `json:"category" example:"파이썬기본"`
|
||||
Tag datatypes.JSON `json:"tag"`
|
||||
Status string `json:"status" example:"on"`
|
||||
}
|
||||
|
||||
type QuizPaperListResponse struct {
|
||||
Data []QuizPaper `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"`
|
||||
}
|
||||
|
||||
type QuizPaperCopyRequest struct {
|
||||
Title string `json:"title" example:"퀴즈 시트 제목"`
|
||||
CenterID int64 `json:"center_id" example:"100002"`
|
||||
}
|
||||
|
||||
type QuizPaperCopyResponse struct {
|
||||
QuizPaper QuizPaper `json:"quiz_paper"`
|
||||
Quiz []Quiz `json:"quiz"`
|
||||
}
|
46
internal/models/token.go
Normal file
46
internal/models/token.go
Normal file
@ -0,0 +1,46 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// CREATE TABLE `UserTokens` (
|
||||
// `id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
// `user_id` bigint(20) DEFAULT 0,
|
||||
// `token` varchar(256) DEFAULT '',
|
||||
// `refresh_token` varchar(256) DEFAULT '',
|
||||
// `status` varchar(3) DEFAULT 'on' COMMENT 'on/off',
|
||||
// `register_at` timestamp NULL DEFAULT current_timestamp(),
|
||||
// `ending_at` timestamp NULL DEFAULT NULL COMMENT '종료날짜',
|
||||
// PRIMARY KEY (`id`) USING BTREE
|
||||
// ) ENGINE=InnoDB AUTO_INCREMENT=1000017 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
|
||||
|
||||
type Token struct {
|
||||
ID int64 `json:"-" db:"id" gorm:"primary_key"`
|
||||
UserID int64 `json:"user_id" db:"user_id" gorm:"index;"`
|
||||
Token string `json:"token" db:"token" gorm:"size:255;index;"`
|
||||
RefreshToken string `json:"refresh_token" db:"refresh_token" gorm:"size:255;index;"`
|
||||
|
||||
Status string `json:"status" gorm:"size:3;index"`
|
||||
|
||||
RegisterAt time.Time `json:"register_at" db:"register_at"`
|
||||
EndingAt time.Time `json:"ending_at" db:"ending_at"`
|
||||
}
|
||||
|
||||
// 테이블이름 정의
|
||||
func (Token) TableName() string {
|
||||
return "UserTokens"
|
||||
}
|
||||
|
||||
type RefreshTokenRequest struct {
|
||||
RefreshToken string `json:"refresh_token" binding:"required"`
|
||||
}
|
||||
|
||||
type TokenResponse struct {
|
||||
Token string `json:"token"`
|
||||
TokenBody TokenBody `json:"tokenBody"`
|
||||
}
|
||||
|
||||
type TokenBody struct {
|
||||
ExpireAt time.Time `json:"tokenExpiredDate"`
|
||||
TokenIdx int `json:"tokenIdx"`
|
||||
TokenType int `json:"tokenType"`
|
||||
}
|
52
internal/models/user.go
Normal file
52
internal/models/user.go
Normal file
@ -0,0 +1,52 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// CREATE TABLE `Users` (
|
||||
// `id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
// `guid_id` longtext DEFAULT NULL,
|
||||
// `first_name` longtext DEFAULT NULL,
|
||||
// `last_name` longtext DEFAULT NULL,
|
||||
// `user_name` longtext DEFAULT NULL,
|
||||
// `password` longtext DEFAULT NULL,
|
||||
// `gender` char(1) DEFAULT 'M' COMMENT 'M(남)/F(여)',
|
||||
// `user_role` longtext DEFAULT NULL,
|
||||
// `memo_cs` longtext DEFAULT NULL,
|
||||
// `register_at` datetime(3) DEFAULT NULL,
|
||||
// `updated_at` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '업데이트될때마다 자동저장',
|
||||
// `phone_cs` longtext DEFAULT NULL,
|
||||
// `upload_image` longtext DEFAULT NULL,
|
||||
// PRIMARY KEY (`id`) USING BTREE,
|
||||
// KEY `guid_id` (`guid_id`(768)),
|
||||
// KEY `first_name` (`first_name`(768)),
|
||||
// KEY `last_name` (`last_name`(768)),
|
||||
// KEY `user_name` (`user_name`(768))
|
||||
// ) ENGINE=InnoDB AUTO_INCREMENT=1000023 DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
type User struct {
|
||||
ID int64 `json:"id" db:"id" example:"100001" gorm:"column:id;primary_key;"`
|
||||
GUID string `json:"guid_id" db:"guid_id" example:"137c1683-2ad6-4201-b256-253828b61c49" gorm:"column:guid_id;size:255;"`
|
||||
FirstName string `json:"first_name" db:"first_name" example:"길순" gorm:"column:first_name;size:255;"`
|
||||
LastName string `json:"last_name" db:"last_name" example:"홍" gorm:"column:last_name;size:255;"`
|
||||
Username string `json:"user_name" db:"user_name" example:"user0" gorm:"column:user_name;size:50;uniqueIndex;"`
|
||||
Password string `json:"-" db:"password" gorm:"column:password;size:255;not null;"`
|
||||
Gender string `json:"gender" db:"gender" example:"F" gorm:"column:gender;size:1;"`
|
||||
UserRole string `json:"user_role" db:"user_role" example:"member" gorm:"column:user_role;size:255;"`
|
||||
Memo string `json:"memo_cs" db:"memo_cs" example:"사용자 메모" gorm:"column:memo_cs;size:255;"`
|
||||
Phone string `json:"phone_cs" db:"phone_cs" example:"010-1234-5678" gorm:"column:phone_cs;size:255;"`
|
||||
Image string `json:"upload_image" db:"upload_image" example:"image_url" gorm:"column:upload_image;size:255;"`
|
||||
RegisterAt time.Time `json:"register_at" db:"regiser_at" gorm:"column:register_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false"`
|
||||
}
|
||||
|
||||
// 테이블이름 정의
|
||||
func (User) TableName() string {
|
||||
return "Users"
|
||||
}
|
||||
|
||||
type UserListResponse struct {
|
||||
Data []User `json:"data"`
|
||||
Total int64 `json:"total" example:"90"`
|
||||
Page int `json:"page" example:"1"`
|
||||
TotalPage int64 `json:"totalPage" example:"9"`
|
||||
PageSize int `json:"pageSize" example:"10"`
|
||||
}
|
68
internal/models/userquiz.go
Normal file
68
internal/models/userquiz.go
Normal file
@ -0,0 +1,68 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/datatypes"
|
||||
)
|
||||
|
||||
type UserQuiz struct {
|
||||
ID int64 `json:"id" db:"id" example:"1000001" gorm:"column:id;primary_key;"`
|
||||
GUID string `json:"guid_id" db:"guid_id" example:"2036023a-fb56-4b6c-b3bb-c787c681ada6" gorm:"column:guid_id;size:255;index;"`
|
||||
CenterID int64 `json:"center_id" db:"center_id" example:"100001" gorm:"column:center_id;index;"`
|
||||
UserQuizPaperID int64 `json:"user_quiz_paper_id" db:"user_quiz_paper_id" example:"1000001" gorm:"column:user_quiz_paper_id;index;"`
|
||||
UserID int64 `json:"user_id" db:"user_id" example:"1000001" gorm:"column:user_id;index;"`
|
||||
No int `json:"vol_no" db:"vol_no" example:"5" gorm:"column:vol_no;index;"`
|
||||
QuestionType string `json:"question_type" db:"question_type" example:"choice" gorm:"column:question_type;size:10;index;"`
|
||||
Question string `json:"question" db:"question" example:"퀴즈 질문입니다." gorm:"column:question;size:512;"`
|
||||
Content datatypes.JSON `json:"content" db:"content" gorm:"column:content;"`
|
||||
Answer datatypes.JSON `json:"answer,omitempty" db:"answer" gorm:"column:answer;default:'[]';"`
|
||||
Status string `json:"status" db:"status" example:"waiting" gorm:"column:status;size:10;index;"`
|
||||
Result string `json:"result" db:"result" example:"success" gorm:"column:result;size:10;index;"`
|
||||
Score float32 `json:"score" db:"score" example:"10" gorm:"column:score;"`
|
||||
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false"`
|
||||
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||
}
|
||||
|
||||
// 테이블이름 정의
|
||||
func (UserQuiz) TableName() string {
|
||||
return "UserQuizs"
|
||||
}
|
||||
|
||||
type UserQuizRequest struct {
|
||||
CenterID int64 `json:"center_id" example:"1000001"`
|
||||
UserQuizPaperID int64 `json:"quiz_paper_id" example:"1000001"`
|
||||
UserID int64 `json:"user_id" example:"1000001"`
|
||||
No int `json:"vol_no" example:"1"`
|
||||
QuestionType string `json:"question_type" example:"choice"`
|
||||
Question string `json:"question" example:"질문입니다."`
|
||||
Content QuizContent `json:"content"`
|
||||
Answer []string `json:"answer" example:"option1,option2"`
|
||||
Status string `json:"status" example:"waiting"`
|
||||
Result string `json:"result" example:"success"`
|
||||
Score float32 `json:"score" example:"10"`
|
||||
}
|
||||
|
||||
type UserQuizResponse struct {
|
||||
ID int64 `json:"id" example:"1000001"`
|
||||
GUID string `json:"guid_id" example:"2036023a-fb56-4b6c-b3bb-c787c681ada6"`
|
||||
CenterD string `json:"center_id" example:"2036023a-fb56-4b6c-b3bb-c787c681ada6"`
|
||||
UserQuizPaperID int64 `json:"user_quiz_paper_id" example:"1000001"`
|
||||
UserID int64 `json:"user_id" example:"1000001"`
|
||||
No int `json:"vol_no" example:"5"`
|
||||
QuestionType string `json:"question_type" example:"check"`
|
||||
Question string `json:"question" example:"퀴즈 질문입니다."`
|
||||
Content QuizContent `json:"content"`
|
||||
Answer []string `json:"answer" example:"option1,option2"`
|
||||
Status string `json:"status" example:"waiting"`
|
||||
Result string `json:"result" example:"success"`
|
||||
Score float32 `json:"score" example:"10"`
|
||||
}
|
||||
|
||||
type UserQuizListResponse struct {
|
||||
Data []UserQuizResponse `json:"data"`
|
||||
Total int64 `json:"total" example:"5"`
|
||||
Page int `json:"page" example:"1"`
|
||||
TotalPage int64 `json:"totalPage" example:"1"`
|
||||
PageSize int `json:"pageSize" example:"10"`
|
||||
}
|
91
internal/models/userquizpaper.go
Normal file
91
internal/models/userquizpaper.go
Normal file
@ -0,0 +1,91 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/datatypes"
|
||||
)
|
||||
|
||||
// CREATE TABLE `UserQuizPapers` (
|
||||
// `id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
// `guid_id` char(36) NOT NULL DEFAULT '0',
|
||||
// `center_id` bigint(20) NOT NULL DEFAULT 0,
|
||||
// `quiz_paper_id` bigint(20) NOT NULL DEFAULT 0,
|
||||
// `status` varchar(10) NOT NULL DEFAULT '0' COMMENT '매칭된 학생퀴즈시험지 상태: \r\nwaiting(대기)/processing(시험진행중)/abort(취소)/marking(채점중)/done(완료) ',
|
||||
// `user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '매칭된 학생',
|
||||
// `user_score` float NOT NULL DEFAULT 5 COMMENT '10',
|
||||
// `total_score` float NOT NULL DEFAULT 100 COMMENT '100.0, 5.0',
|
||||
// `start_at` timestamp NULL DEFAULT NULL COMMENT '학생시험시작시각',
|
||||
// `done_at` timestamp NULL DEFAULT NULL COMMENT '학생시험종료시각',
|
||||
// `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||
// `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
// PRIMARY KEY (`id`) USING BTREE,
|
||||
// KEY `guid_id` (`guid_id`) USING BTREE,
|
||||
// KEY `center_id` (`center_id`) USING BTREE,
|
||||
// KEY `user_id` (`user_id`),
|
||||
// KEY `manager_id` (`quiz_paper_id`) USING BTREE
|
||||
// ) ENGINE=InnoDB AUTO_INCREMENT=10000001 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='학생퀴즈시험지 매칭\r\n';
|
||||
|
||||
type UserQuizPaper struct {
|
||||
ID int64 `json:"id" db:"id" example:"1000015" gorm:"column:id;primary_key;"`
|
||||
GUID string `json:"guid_id" db:"guid_id" example:"7f9329f5-2e36-4638-92d2-73064b7291a4" gorm:"column:guid_id;size:255;uniqueIndex"`
|
||||
CenterID int64 `json:"center_id" db:"center_id" example:"1000015" gorm:"column:center_id;index;"`
|
||||
QuizPaperID int64 `json:"quiz_paper_id" db:"quiz_paper_id" example:"1000001" gorm:"column:quiz_paper_id;index;"`
|
||||
UserID int64 `json:"user_id" db:"user_id" example:"1000002" gorm:"column:user_id;index;"`
|
||||
UserScore float32 `json:"user_score" db:"user_score" example:"5" gorm:"column:user_score;"`
|
||||
TotalScore float32 `json:"total_score" db:"total_score" example:"100" gorm:"column:total_score;"`
|
||||
Status string `json:"status" example:"wating" gorm:"column:status;size:10;index;"`
|
||||
StartAt *time.Time `json:"start_at" gorm:"column:start_at;index;"`
|
||||
DoneAt *time.Time `json:"done_at" gorm:"column:done_at;index;"`
|
||||
UpdatedAt time.Time `json:"-" gorm:"column:updated_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;index;->:false"`
|
||||
CreatedAt time.Time `json:"-" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;->:false;<-:create"`
|
||||
}
|
||||
|
||||
// 테이블이름 정의
|
||||
func (UserQuizPaper) TableName() string {
|
||||
return "UserQuizPapers"
|
||||
}
|
||||
|
||||
type UserQuizPaperRequest struct {
|
||||
QuizPaperID int64 `json:"quiz_paper_id" example:"1000002"`
|
||||
Users datatypes.JSON `json:"users"`
|
||||
}
|
||||
|
||||
type UserQuizPaperResponse struct {
|
||||
ID int64 `json:"id" db:"id" example:"1000015"`
|
||||
GUID string `json:"guid_id" db:"guid_id" example:"7f9329f5-2e36-4638-92d2-73064b7291a4"`
|
||||
CenterID int64 `json:"center_id" db:"center_id" example:"1000015"`
|
||||
QuizPaperID int64 `json:"quiz_paper_id" db:"quiz_paper_id" example:"1000001"`
|
||||
UserID int64 `json:"user_id" db:"user_id" example:"1000002"`
|
||||
UserScore float32 `json:"user_score" db:"user_score" example:"5"`
|
||||
TotalScore float32 `json:"total_score" db:"total_score" example:"100"`
|
||||
Status string `json:"status" example:"wating"`
|
||||
StartAt *time.Time `json:"start_at"`
|
||||
DoneAt *time.Time `json:"done_at"`
|
||||
}
|
||||
|
||||
type UserQuizPaperUpdateRequest struct {
|
||||
QuizPaperID int64 `json:"quiz_paper_id" example:"1000002"`
|
||||
UserID int64 `json:"user_id" example:"1000003"`
|
||||
UserScore float32 `json:"user_score" example:"5"`
|
||||
TotalScore float32 `json:"total_score" example:"100"`
|
||||
Status string `json:"status" example:"ready"`
|
||||
StartAt string `json:"start_at,omitempty" example:"2023-11-10T13:10:00+09:00"`
|
||||
DoneAt string `json:"done_at,omitempty" example:"2023-11-10T13:25:00+09:00"`
|
||||
}
|
||||
|
||||
type UserQuizPaperPatchRequest struct {
|
||||
UserScore float32 `json:"user_score" example:"4"`
|
||||
TotalScore float32 `json:"total_score" example:"80"`
|
||||
Status string `json:"status" example:"ready"`
|
||||
StartAt string `json:"start_at,omitempty" example:"2023-11-10T13:10:00+09:00"`
|
||||
DoneAt string `json:"done_at,omitempty" example:"2023-11-10T13:25:00+09:00"`
|
||||
}
|
||||
|
||||
type UserQuizPaperListResponse struct {
|
||||
Data []UserQuizPaper `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"`
|
||||
}
|
Reference in New Issue
Block a user