init
This commit is contained in:
commit
466a81903a
11 changed files with 203 additions and 0 deletions
10
contest.go
Normal file
10
contest.go
Normal 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
language.go
Normal file
14
language.go
Normal 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"}},
|
||||||
|
}
|
||||||
|
|
8
participant.go
Normal file
8
participant.go
Normal 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
problem.go
Normal file
13
problem.go
Normal 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"`
|
||||||
|
}
|
31
result.go
Normal file
31
result.go
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"git.sch9.ru/new_gate/ms-tester/internal/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Result int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
NotTested Result = 1 // change only with schema change
|
||||||
|
Accepted Result = 2
|
||||||
|
WrongAnswer Result = 3
|
||||||
|
PresentationError Result = 4
|
||||||
|
CompilationError Result = 5
|
||||||
|
MemoryLimitExceeded Result = 6
|
||||||
|
TimeLimitExceeded Result = 7
|
||||||
|
RuntimeError Result = 8
|
||||||
|
SystemFailDuringTesting Result = 9
|
||||||
|
Testing Result = 10
|
||||||
|
)
|
||||||
|
|
||||||
|
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
role.go
Normal file
53
role.go
Normal 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
solution.go
Normal file
14
solution.go
Normal 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
subtask.go
Normal file
8
subtask.go
Normal 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
task.go
Normal file
9
task.go
Normal 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
testgroup.go
Normal file
34
testgroup.go
Normal 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
user.go
Normal file
9
user.go
Normal 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"`
|
||||||
|
}
|
Loading…
Reference in a new issue