feat: add problem service
This commit is contained in:
parent
5b5bf0a070
commit
8d01144d8b
@ -8,6 +8,7 @@ const (
|
|||||||
InvalidParameter Status = 101
|
InvalidParameter Status = 101
|
||||||
NotFound Status = 102
|
NotFound Status = 102
|
||||||
DatabaseError Status = 103
|
DatabaseError Status = 103
|
||||||
|
RedisError Status = 104
|
||||||
|
|
||||||
TokenUnknown Status = 200
|
TokenUnknown Status = 200
|
||||||
TokenEmpty Status = 201
|
TokenEmpty Status = 201
|
||||||
@ -24,7 +25,7 @@ const (
|
|||||||
UserUnauthorized Status = 304
|
UserUnauthorized Status = 304
|
||||||
UserDisabled Status = 305
|
UserDisabled Status = 305
|
||||||
|
|
||||||
RedisError Status = 400
|
ProblemNotFound Status = 500
|
||||||
)
|
)
|
||||||
|
|
||||||
var msgText = map[Status]string{
|
var msgText = map[Status]string{
|
||||||
@ -35,6 +36,7 @@ var msgText = map[Status]string{
|
|||||||
InvalidParameter: "Invalid Parameter",
|
InvalidParameter: "Invalid Parameter",
|
||||||
NotFound: "Not Found",
|
NotFound: "Not Found",
|
||||||
DatabaseError: "Database Error",
|
DatabaseError: "Database Error",
|
||||||
|
RedisError: "Redis Error",
|
||||||
|
|
||||||
TokenUnknown: "Unknown Error (Token)",
|
TokenUnknown: "Unknown Error (Token)",
|
||||||
TokenEmpty: "Token Empty",
|
TokenEmpty: "Token Empty",
|
||||||
@ -51,5 +53,5 @@ var msgText = map[Status]string{
|
|||||||
UserUnauthorized: "User Unauthorized",
|
UserUnauthorized: "User Unauthorized",
|
||||||
UserDisabled: "User Disabled",
|
UserDisabled: "User Disabled",
|
||||||
|
|
||||||
RedisError: "Redis Error",
|
ProblemNotFound: "Problem Not Found",
|
||||||
}
|
}
|
||||||
|
14
internal/repo/model/Problem.go
Normal file
14
internal/repo/model/Problem.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import "gorm.io/gorm"
|
||||||
|
|
||||||
|
type Problem struct {
|
||||||
|
gorm.Model `json:"-"`
|
||||||
|
Title string `json:"title" gorm:"not null"`
|
||||||
|
Content string `json:"content" gorm:"not null"`
|
||||||
|
TimeLimit uint `json:"time_limit" gorm:"not null"`
|
||||||
|
MemoryLimit uint `json:"memory_limit" gorm:"not null"`
|
||||||
|
ProviderID uint `json:"provider_id" gorm:"not null;index"`
|
||||||
|
Provider User `json:"provider" gorm:"foreignKey:ProviderID"`
|
||||||
|
IsEnabled bool `json:"is_enabled" gorm:"not null;index"`
|
||||||
|
}
|
@ -82,6 +82,7 @@ func (r *Repo) migrateDatabase() {
|
|||||||
r.log.Info("Auto Migrating database...")
|
r.log.Info("Auto Migrating database...")
|
||||||
|
|
||||||
_ = r.db.AutoMigrate(&model.User{})
|
_ = r.db.AutoMigrate(&model.User{})
|
||||||
|
_ = r.db.AutoMigrate(&model.Problem{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// checkAlive deprecated
|
// checkAlive deprecated
|
||||||
|
19
internal/service/problem/create.go
Normal file
19
internal/service/problem/create.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package problem
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/e"
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/repo/model"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *service) Create(uid uint, problem *model.Problem) (*model.Problem, e.Status) {
|
||||||
|
problem.ProviderID = uid
|
||||||
|
problem.IsEnabled = true
|
||||||
|
|
||||||
|
if err := s.db.Create(problem).Error; err != nil {
|
||||||
|
s.log.Debug("create problem error", zap.Error(err), zap.Any("problem", problem))
|
||||||
|
return nil, e.DatabaseError
|
||||||
|
}
|
||||||
|
|
||||||
|
return problem, e.Success
|
||||||
|
}
|
23
internal/service/problem/query.go
Normal file
23
internal/service/problem/query.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package problem
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/e"
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/repo/model"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/clause"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *service) Query(problemId uint) (*model.Problem, e.Status) {
|
||||||
|
problem := new(model.Problem)
|
||||||
|
|
||||||
|
err := s.db.Preload(clause.Associations).First(&problem, problemId).Error
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return nil, e.ProblemNotFound
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, e.DatabaseError
|
||||||
|
}
|
||||||
|
|
||||||
|
return problem, e.Success
|
||||||
|
}
|
25
internal/service/problem/queryFuzz.go
Normal file
25
internal/service/problem/queryFuzz.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package problem
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/e"
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/repo/model"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *service) QueryFuzz(search string) ([]*model.Problem, e.Status) {
|
||||||
|
var problems []*model.Problem
|
||||||
|
|
||||||
|
err := s.db.
|
||||||
|
Where("title LIKE ?", "%"+search+"%").
|
||||||
|
Or("content LIKE ?", "%"+search+"%").
|
||||||
|
Find(&problems).Error
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return nil, e.ProblemNotFound
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, e.DatabaseError
|
||||||
|
}
|
||||||
|
|
||||||
|
return problems, e.Success
|
||||||
|
}
|
29
internal/service/problem/service.go
Normal file
29
internal/service/problem/service.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package problem
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/e"
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/global"
|
||||||
|
"github.com/WHUPRJ/woj-server/internal/repo/model"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ Service = (*service)(nil)
|
||||||
|
|
||||||
|
type Service interface {
|
||||||
|
Create(uint, *model.Problem) (*model.Problem, e.Status)
|
||||||
|
Query(uint) (*model.Problem, e.Status)
|
||||||
|
QueryFuzz(string) ([]*model.Problem, e.Status)
|
||||||
|
}
|
||||||
|
|
||||||
|
type service struct {
|
||||||
|
log *zap.Logger
|
||||||
|
db *gorm.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewProblemService(g *global.Global) Service {
|
||||||
|
return &service{
|
||||||
|
log: g.Log,
|
||||||
|
db: g.Db.Get().(*gorm.DB),
|
||||||
|
}
|
||||||
|
}
|
@ -12,10 +12,10 @@ func (s *service) Profile(id uint) (*model.User, e.Status) {
|
|||||||
|
|
||||||
err := s.db.First(&user, id).Error
|
err := s.db.First(&user, id).Error
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return user, e.UserNotFound
|
return nil, e.UserNotFound
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return user, e.DatabaseError
|
return nil, e.DatabaseError
|
||||||
}
|
}
|
||||||
|
|
||||||
return user, e.Success
|
return user, e.Success
|
||||||
|
Loading…
Reference in New Issue
Block a user