퀴즈 풀기/점수
This commit is contained in:
101
internal/repositories/paper.go
Normal file
101
internal/repositories/paper.go
Normal file
@ -0,0 +1,101 @@
|
||||
package repositories
|
||||
|
||||
import (
|
||||
"learnsteam/cslms-api/internal/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type paperRepository struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewPaperRepository(db *gorm.DB) PaperRepository {
|
||||
return &paperRepository{
|
||||
DB: db,
|
||||
}
|
||||
}
|
||||
|
||||
type PaperRepository interface {
|
||||
List(int64, string, int, int) (*[]models.PaperResponse, error)
|
||||
Total(int64, string) (int64, error)
|
||||
|
||||
Find(int64) (*models.PaperResponse, error)
|
||||
Get(int64) (*models.Paper, error)
|
||||
Update(*models.Paper) (*models.Paper, error)
|
||||
}
|
||||
|
||||
func (r *paperRepository) List(user_id int64, q string, page int, limit int) (*[]models.PaperResponse, error) {
|
||||
var rows *[]models.PaperResponse
|
||||
var err error
|
||||
offset := limit * (page - 1)
|
||||
if q != "" {
|
||||
err = r.DB.Offset(offset).Limit(limit).Order("UserQuizPapers.created_at DESC").
|
||||
Table("UserQuizPapers").
|
||||
Select("UserQuizPapers.*", "Users.first_name", "Users.last_name", "QuizPapers.title", "QuizPapers.category").
|
||||
Joins("LEFT JOIN Users ON Users.id = UserQuizPapers.user_id").
|
||||
Joins("LEFT JOIN QuizPapers ON QuizPapers.id = UserQuizPapers.quiz_paper_id").
|
||||
Where("QuizPapers.title LIKE ? OR QuizPapers.category LIKE ? OR CONCAT(first_name, last_name) LIKE ?", "%"+q+"%", "%"+q+"%", "%"+q+"%").
|
||||
Where("UserQuizPapers.user_id = ?", user_id).
|
||||
Find(&rows).Error
|
||||
} else {
|
||||
err = r.DB.Offset(offset).Limit(limit).Order("UserQuizPapers.created_at DESC").
|
||||
Table("UserQuizPapers").
|
||||
Select("UserQuizPapers.*", "Users.first_name", "Users.last_name", "QuizPapers.title", "QuizPapers.category").
|
||||
Joins("LEFT JOIN Users ON Users.id = UserQuizPapers.user_id").
|
||||
Joins("LEFT JOIN QuizPapers ON QuizPapers.id = UserQuizPapers.quiz_paper_id").
|
||||
Where("UserQuizPapers.user_id = ?", user_id).
|
||||
Find(&rows).Error
|
||||
}
|
||||
return rows, err
|
||||
}
|
||||
|
||||
func (r *paperRepository) Total(user_id int64, q string) (int64, error) {
|
||||
var total int64
|
||||
var err error
|
||||
if q != "" {
|
||||
err = r.DB.Model(&models.Paper{}).
|
||||
Joins("LEFT JOIN Users ON Users.id = UserQuizPapers.user_id").
|
||||
Joins("LEFT JOIN QuizPapers ON QuizPapers.id = UserQuizPapers.quiz_paper_id").
|
||||
Where("QuizPapers.title LIKE ? OR QuizPapers.category LIKE ? OR CONCAT(first_name, last_name) LIKE ?", "%"+q+"%", "%"+q+"%", "%"+q+"%").
|
||||
Where("UserQuizPapers.user_id = ?", user_id).
|
||||
Count(&total).
|
||||
Error
|
||||
} else {
|
||||
err = r.DB.Model(&models.Paper{}).
|
||||
Where("user_id = ?", user_id).
|
||||
Count(&total).
|
||||
Error
|
||||
}
|
||||
|
||||
return total, err
|
||||
}
|
||||
|
||||
func (r *paperRepository) Find(id int64) (*models.PaperResponse, error) {
|
||||
var row *models.PaperResponse
|
||||
err := r.DB.
|
||||
Table("UserQuizPapers").
|
||||
Select("UserQuizPapers.*", "Users.first_name", "Users.last_name", "QuizPapers.title", "QuizPapers.category").
|
||||
Joins("LEFT JOIN Users ON Users.id = UserQuizPapers.user_id").
|
||||
Joins("LEFT JOIN QuizPapers ON QuizPapers.id = UserQuizPapers.quiz_paper_id").
|
||||
Where("UserQuizPapers.id = ?", id).First(&row).Error
|
||||
return row, err
|
||||
}
|
||||
|
||||
func (r *paperRepository) Get(id int64) (*models.Paper, error) {
|
||||
var row *models.Paper
|
||||
if err := r.DB.Where("id=?", id).First(&row).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return row, nil
|
||||
}
|
||||
|
||||
func (r *paperRepository) Update(paper *models.Paper) (*models.Paper, error) {
|
||||
var row *models.Paper
|
||||
if err := r.DB.Where("id=?", paper.ID).First(&row).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err := r.DB.Model(&row).Select("*").Updates(&paper).Error
|
||||
return row, err
|
||||
}
|
89
internal/repositories/paperquiz.go
Normal file
89
internal/repositories/paperquiz.go
Normal file
@ -0,0 +1,89 @@
|
||||
package repositories
|
||||
|
||||
import (
|
||||
"learnsteam/cslms-api/internal/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type paperQuizRepository struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewPaperQuizRepository(db *gorm.DB) PaperQuizRepository {
|
||||
return &paperQuizRepository{
|
||||
DB: db,
|
||||
}
|
||||
}
|
||||
|
||||
type PaperQuizRepository interface {
|
||||
List(int64, int, int) (*[]models.PaperQuiz, error)
|
||||
Total(int64) (int64, error)
|
||||
|
||||
Find(int64) (*models.PaperQuiz, error)
|
||||
Update(*models.PaperQuiz) (*models.PaperQuiz, error)
|
||||
Delete(int64) error
|
||||
SumScore(int64) (float32, error)
|
||||
}
|
||||
|
||||
func (r *paperQuizRepository) List(paper_id int64, page int, limit int) (*[]models.PaperQuiz, error) {
|
||||
var rows *[]models.PaperQuiz
|
||||
var err error
|
||||
offset := limit * (page - 1)
|
||||
if paper_id > 0 {
|
||||
err = r.DB.Offset(offset).Limit(limit).Order("vol_no ASC").Where("user_quiz_paper_id = ?", paper_id).Find(&rows).Error
|
||||
} else {
|
||||
err = r.DB.Offset(offset).Limit(limit).Find(&rows).Error
|
||||
}
|
||||
return rows, err
|
||||
}
|
||||
|
||||
func (r *paperQuizRepository) Total(paper_id int64) (int64, error) {
|
||||
var total int64
|
||||
var err error
|
||||
if paper_id > 0 {
|
||||
err = r.DB.Model(&models.PaperQuiz{}).Where("user_quiz_paper_id = ?", paper_id).Count(&total).Error
|
||||
} else {
|
||||
err = r.DB.Model(&models.PaperQuiz{}).Count(&total).Error
|
||||
}
|
||||
|
||||
return total, err
|
||||
}
|
||||
|
||||
func (r *paperQuizRepository) Find(id int64) (*models.PaperQuiz, error) {
|
||||
var row *models.PaperQuiz
|
||||
err := r.DB.Where("id = ?", id).First(&row).Error
|
||||
return row, err
|
||||
}
|
||||
|
||||
func (r *paperQuizRepository) Update(quiz *models.PaperQuiz) (*models.PaperQuiz, error) {
|
||||
var row *models.PaperQuiz
|
||||
if err := r.DB.Where("id=?", quiz.ID).First(&row).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err := r.DB.Model(&row).Select("*").Updates(&quiz).Error
|
||||
return row, err
|
||||
}
|
||||
|
||||
func (r *paperQuizRepository) Delete(id int64) error {
|
||||
var row *models.PaperQuiz
|
||||
if err := r.DB.Where("id=?", id).First(&row).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
err := r.DB.Delete(&row).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (r *paperQuizRepository) SumScore(paper_id int64) (float32, error) {
|
||||
var result struct {
|
||||
Score float32
|
||||
}
|
||||
|
||||
if err := r.DB.Model(&models.PaperQuiz{}).Select("SUM(score) AS score").
|
||||
Where("user_quiz_paper_id = ?", paper_id).
|
||||
Scan(&result).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return result.Score, nil
|
||||
}
|
@ -26,6 +26,7 @@ type UserQuizRepository interface {
|
||||
Insert([]models.UserQuiz) ([]models.UserQuiz, error)
|
||||
Update(*models.UserQuiz) (*models.UserQuiz, error)
|
||||
Delete(int64) error
|
||||
SumScore(int64) (float32, error)
|
||||
}
|
||||
|
||||
func (r *userQuizRepository) List(user_quiz_paper_id int64, page int, limit int) (*[]models.UserQuiz, error) {
|
||||
@ -86,3 +87,16 @@ func (r *userQuizRepository) Delete(id int64) error {
|
||||
err := r.DB.Delete(&row).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (r *userQuizRepository) SumScore(userquizpaper_id int64) (float32, error) {
|
||||
var result struct {
|
||||
Score float32
|
||||
}
|
||||
|
||||
if err := r.DB.Model(&models.UserQuiz{}).Select("SUM(score) AS score").
|
||||
Where("user_quiz_paper_id = ?", userquizpaper_id).
|
||||
Scan(&result).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return result.Score, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user