move models to pkg

This commit is contained in:
dragonmuffin 2024-08-25 21:52:00 +05:00
parent 7b0e1b21f1
commit 079135747a
29 changed files with 18 additions and 18 deletions

10
pkg/models/contest.go Normal file
View file

@ -0,0 +1,10 @@
package models
import "time"
type Contest struct {
Id *int `db:"id"`
Name *string `db:"name"`
CreatedAt *time.Time `db:"created_at"`
UpdatedAt *time.Time `db:"updated_at"`
}

14
pkg/models/language.go Normal file
View file

@ -0,0 +1,14 @@
package models
type Language struct {
Name string
CompileCmd []string //source: src;result:executable
RunCmd []string //source: executable
}
var Languages = [...]Language {
{Name : "gcc std=c90",
CompileCmd : []string{"gcc", "src","-std=c90","-o","executable"},
RunCmd : []string{"executable"}},
}

View file

@ -0,0 +1,8 @@
package models
type Participant struct {
Id *int32 `db:"id"`
UserId *int32 `db:"user_id"`
ContestId *int32 `db:"contest_id"`
Name *string `db:"name"`
}

13
pkg/models/problem.go Normal file
View file

@ -0,0 +1,13 @@
package models
import "time"
type Problem struct {
Id *int32 `db:"id"`
Name *string `db:"name"`
Description *string `db:"description"`
TimeLimit *int32 `db:"time_limit"`
MemoryLimit *int32 `db:"memory_limit"`
CreatedAt *time.Time `db:"created_at"`
UpdatedAt *time.Time `db:"updated_at"`
}

28
pkg/models/result.go Normal file
View file

@ -0,0 +1,28 @@
package models
import (
"errors"
"git.sch9.ru/new_gate/ms-tester/internal/lib"
)
type Result int32
const (
NotTested Result = 0 // change only with schema change
Accepted Result = 1
CompilationError Result = 2
MemoryLimitExceeded Result = 3
TimeLimitExceeded Result = 4
SystemFailDuringTesting Result = 5
Testing Result = 6
)
var ErrBadResult = errors.New("bad result")
func (result Result) Valid() error {
switch result {
case NotTested, Accepted, TimeLimitExceeded, MemoryLimitExceeded, CompilationError, SystemFailDuringTesting:
return nil
}
return lib.ServiceError(ErrBadResult, lib.ErrValidationFailed, "bad result")
}

53
pkg/models/role.go Normal file
View file

@ -0,0 +1,53 @@
package models
import (
"errors"
"git.sch9.ru/new_gate/ms-tester/internal/lib"
)
type Role int32
const (
RoleSpectator Role = 0
RoleParticipant Role = 1
RoleModerator Role = 2
RoleAdmin Role = 3
)
func (role Role) IsAdmin() bool {
return role == RoleAdmin
}
func (role Role) IsModerator() bool {
return role == RoleModerator
}
func (role Role) IsParticipant() bool {
return role == RoleParticipant
}
func (role Role) IsSpectator() bool {
return role == RoleSpectator
}
func (role Role) AtLeast(other Role) bool {
return role >= other
}
func (role Role) AtMost(other Role) bool {
return role <= other
}
var ErrBadRole = errors.New("bad role")
func (role Role) Valid() error {
switch role {
case RoleSpectator, RoleParticipant, RoleModerator, RoleAdmin:
return nil
}
return lib.ServiceError(ErrBadRole, lib.ErrValidationFailed, "bad role")
}
func (role Role) AsPointer() *Role {
return &role
}

14
pkg/models/solution.go Normal file
View file

@ -0,0 +1,14 @@
package models
import "time"
type Solution struct {
Id *int32 `db:"id"`
ParticipantId *int32 `db:"participant_id"`
TaskId *int32 `db:"task_id"`
LanguageId *int32 `db:"language_id"`
SolutionHash *string `db:"solution_hash"`
Result *int32 `db:"result"`
Score *int32 `db:"score"`
CreatedAt *time.Time `db:"created_at"`
}

8
pkg/models/subtask.go Normal file
View file

@ -0,0 +1,8 @@
package models
type SubTask struct {
Id *int32 `db:"id"`
ContestId *int32 `db:"contest_id"`
TestgroupId *int32 `db:"testgroup_id"`
TaskId *int32 `db:"task_id"`
}

9
pkg/models/task.go Normal file
View file

@ -0,0 +1,9 @@
package models
type Task struct {
Id *int32 `db:"id"`
ContestId *int32 `db:"contest_id"`
ProblemId *int32 `db:"problem_id"`
Position *int32 `db:"position"`
PositionName *string `db:"position_name"`
}

34
pkg/models/testgroup.go Normal file
View file

@ -0,0 +1,34 @@
package models
import (
"errors"
"git.sch9.ru/new_gate/ms-tester/internal/lib"
)
type TestingStrategy int32
const (
EachTestTS TestingStrategy = 1
CompleteGroupTS TestingStrategy = 2
)
type Testgroup struct {
Id *int32 `db:"id"`
ProblemId *int32 `db:"problem_id"`
TestingStrategy *TestingStrategy `db:"testing_strategy"`
}
type TestGroupData struct {
Ts TestingStrategy
TestAmount int32
}
var ErrBadTestingStrategy = errors.New("bad testing strategy")
func (ts TestingStrategy) Valid() error {
switch ts {
case EachTestTS, CompleteGroupTS:
return nil
}
return lib.ServiceError(ErrBadTestingStrategy, lib.ErrValidationFailed, "bad testing strategy")
}

9
pkg/models/user.go Normal file
View file

@ -0,0 +1,9 @@
package models
import "time"
type User struct {
UserId *int32 `json:"user_id" db:"user_id"`
Role *Role `json:"role" db:"role"`
UpdatedAt *time.Time `json:"updated_at" db:"updated_at"`
}