From b6d1d7f44eaa172d938d524d0740b18f34fae8e0 Mon Sep 17 00:00:00 2001 From: JongYeob Sheen Date: Thu, 22 Feb 2024 21:11:18 +0900 Subject: [PATCH] quiz count --- internal/controllers/quiz.go | 46 +++++++++++++++++++++++++++--- internal/controllers/quizpaper.go | 1 + internal/models/quizpaper.go | 2 ++ internal/models/userquizpaper.go | 4 ++- internal/repositories/quiz.go | 12 ++++++++ internal/routers/quiz.go | 28 +++++++++++------- internal/services/quiz.go | 5 ++++ internal/services/userquizpaper.go | 3 ++ 8 files changed, 85 insertions(+), 16 deletions(-) diff --git a/internal/controllers/quiz.go b/internal/controllers/quiz.go index c434a9f..3ba0c17 100644 --- a/internal/controllers/quiz.go +++ b/internal/controllers/quiz.go @@ -24,12 +24,14 @@ type QuizController interface { } type quizController struct { - service services.QuizService + service services.QuizService + quizPaperService services.QuizPaperService } -func NewQuizController(service services.QuizService) QuizController { +func NewQuizController(service services.QuizService, quizPaperService services.QuizPaperService) QuizController { return &quizController{ - service: service, + service: service, + quizPaperService: quizPaperService, } } @@ -174,6 +176,24 @@ func (controller *quizController) Create(c *gin.Context) { return } + count, err := controller.service.QuizCount(request.QuizPaperID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + quizpaper, err := controller.quizPaperService.Find(request.QuizPaperID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + quizpaper.QuizCount = int(count) + _, err = controller.quizPaperService.Update(quizpaper) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, result) } @@ -264,7 +284,7 @@ func (controller *quizController) Delete(c *gin.Context) { return } - _, err = controller.service.Find(id) + quiz, err := controller.service.Find(id) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return @@ -276,5 +296,23 @@ func (controller *quizController) Delete(c *gin.Context) { return } + count, err := controller.service.QuizCount(quiz.QuizPaperID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + quizpaper, err := controller.quizPaperService.Find(quiz.QuizPaperID) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + quizpaper.QuizCount = int(count) + _, err = controller.quizPaperService.Update(quizpaper) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"message": "success"}) } diff --git a/internal/controllers/quizpaper.go b/internal/controllers/quizpaper.go index 101dc17..7511547 100644 --- a/internal/controllers/quizpaper.go +++ b/internal/controllers/quizpaper.go @@ -285,6 +285,7 @@ func (controller *quizPaperController) Copy(c *gin.Context) { Content: template.Content, Category: template.Category, Tag: template.Tag, + QuizCount: 0, Status: template.Status, CreatedAt: time.Now(), UpdatedAt: time.Now(), diff --git a/internal/models/quizpaper.go b/internal/models/quizpaper.go index 305c0af..806461f 100644 --- a/internal/models/quizpaper.go +++ b/internal/models/quizpaper.go @@ -15,6 +15,7 @@ type QuizPaper struct { Content string `json:"content" db:"content" example:"퀴즈 시트 설명" gorm:"column:content;size:512;"` Category string `json:"category" db:"category" example:"파이썬기본" gorm:"column:category;size:255;"` Tag datatypes.JSON `json:"tag" db:"tag" gorm:"column:tag;"` + QuizCount int `json:"quiz_count" db:"quiz_count" example:"5" gorm:"column:quiz_count;"` 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:"created_at" db:"created_at" example:"2023-11-10T13:10:00+09:00" gorm:"column:created_at;type:DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;index;"` @@ -42,6 +43,7 @@ type QuizPaperResponse struct { Content string `json:"content" example:"퀴즈 시트 설명"` Category string `json:"category" example:"파이썬기본"` Tag []string `json:"tag" example:"Python,AI,Robot,파이썬"` + QuizCount int `json:"quiz_count" example:"5"` Status string `json:"status" example:"on"` CreatedAt time.Time `json:"created_at" example:"2023-11-10T13:10:00+09:00"` } diff --git a/internal/models/userquizpaper.go b/internal/models/userquizpaper.go index 985c8ac..73cdd64 100644 --- a/internal/models/userquizpaper.go +++ b/internal/models/userquizpaper.go @@ -11,8 +11,9 @@ type UserQuizPaper struct { 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;"` + TotalScore float32 `json:"total_score" db:"total_score" example:"5" gorm:"column:total_score;"` Status string `json:"status" example:"wating" gorm:"column:status;size:10;index;"` + QuizCount int `json:"quiz_count" db:"quiz_count" example:"5" gorm:"column:quiz_count;"` 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"` @@ -39,6 +40,7 @@ type UserQuizPaperResponse struct { LastName string `json:"last_name" db:"last_name" example:"홍"` UserScore float32 `json:"user_score" db:"user_score" example:"5"` TotalScore float32 `json:"total_score" db:"total_score" example:"100"` + QuizCount int `json:"quiz_count" db:"quiz_count" example:"5"` Status string `json:"status" example:"wating"` Category string `json:"category" example:"파이썬기본"` Title string `json:"title" example:"출력 Print"` diff --git a/internal/repositories/quiz.go b/internal/repositories/quiz.go index eab7da8..7fdcb2c 100644 --- a/internal/repositories/quiz.go +++ b/internal/repositories/quiz.go @@ -24,6 +24,7 @@ type QuizRepository interface { Create(*models.Quiz) (*models.Quiz, error) Update(*models.Quiz) (*models.Quiz, error) Delete(int64) error + QuizCount(int64) (int64, error) } func (r *quizRepository) List(quiz_paper_id int64, page int, limit int) (*[]models.Quiz, error) { @@ -79,3 +80,14 @@ func (r *quizRepository) Delete(id int64) error { err := r.DB.Delete(&quiz).Error return err } + +func (r *quizRepository) QuizCount(quizpaper_id int64) (int64, error) { + var count int64 + var err error + err = r.DB.Model(&models.Quiz{}). + Where("quiz_paper_id = ?", quizpaper_id). + Count(&count). + Error + + return count, err +} diff --git a/internal/routers/quiz.go b/internal/routers/quiz.go index 080b1b1..beb08a5 100644 --- a/internal/routers/quiz.go +++ b/internal/routers/quiz.go @@ -20,24 +20,30 @@ type QuizRouter interface { } type quizRouter struct { - db *gorm.DB - repository repositories.QuizRepository - service services.QuizService - controller controllers.QuizController - router *gin.Engine + db *gorm.DB + repository repositories.QuizRepository + quizPaperRepository repositories.QuizPaperRepository + service services.QuizService + quizPaperService services.QuizPaperService + controller controllers.QuizController + router *gin.Engine } func NewQuizRouter(db *gorm.DB, router *gin.Engine) *quizRouter { repository := repositories.NewQuizRepository(db) + quizPaperRepository := repositories.NewQuizPaperRepository(db) service := services.NewQuizService(repository) - controller := controllers.NewQuizController(service) + quizPaperService := services.NewQuizPaperService(quizPaperRepository) + controller := controllers.NewQuizController(service, quizPaperService) return &quizRouter{ - db: db, - repository: repository, - service: service, - controller: controller, - router: router, + db: db, + repository: repository, + quizPaperRepository: quizPaperRepository, + service: service, + quizPaperService: quizPaperService, + controller: controller, + router: router, } } diff --git a/internal/services/quiz.go b/internal/services/quiz.go index c355b40..5249f69 100644 --- a/internal/services/quiz.go +++ b/internal/services/quiz.go @@ -20,6 +20,7 @@ type QuizService interface { Create(*models.Quiz) (*models.Quiz, error) Update(*models.Quiz) (*models.Quiz, error) Delete(int64) error + QuizCount(int64) (int64, error) } func NewQuizService(repository repositories.QuizRepository) QuizService { @@ -58,6 +59,10 @@ func (s *quizService) Delete(id int64) error { return err } +func (s *quizService) QuizCount(quizpaper_id int64) (int64, error) { + return s.repository.QuizCount(quizpaper_id) +} + func (s *quizService) Generate(quizpaper *models.QuizPaper) ([]models.Quiz, error) { templates, err := s.repository.List(quizpaper.ID, 1, 1000) if err != nil { diff --git a/internal/services/userquizpaper.go b/internal/services/userquizpaper.go index e90f925..29421ea 100644 --- a/internal/services/userquizpaper.go +++ b/internal/services/userquizpaper.go @@ -83,6 +83,9 @@ func (s *userQuizPaperService) Generate(users []int64, quizPaper *models.QuizPap CenterID: quizPaper.CenterID, UserID: user_id, QuizPaperID: quizPaper.ID, + QuizCount: quizPaper.QuizCount, + UserScore: 0, + TotalScore: float32(quizPaper.QuizCount), Status: "ready", }