commit 466a81903af8ed168e586ba39ae2cf986f1adee3 Author: dragonmuffin Date: Mon Sep 23 23:38:34 2024 +0500 init diff --git a/contest.go b/contest.go new file mode 100644 index 0000000..40a4e2b --- /dev/null +++ b/contest.go @@ -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"` +} diff --git a/language.go b/language.go new file mode 100644 index 0000000..da0b1b6 --- /dev/null +++ b/language.go @@ -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"}}, +} + diff --git a/participant.go b/participant.go new file mode 100644 index 0000000..8db6814 --- /dev/null +++ b/participant.go @@ -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"` +} diff --git a/problem.go b/problem.go new file mode 100644 index 0000000..80fbe9c --- /dev/null +++ b/problem.go @@ -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"` +} diff --git a/result.go b/result.go new file mode 100644 index 0000000..d427a6d --- /dev/null +++ b/result.go @@ -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") +} diff --git a/role.go b/role.go new file mode 100644 index 0000000..a48cca8 --- /dev/null +++ b/role.go @@ -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 +} diff --git a/solution.go b/solution.go new file mode 100644 index 0000000..9eb54aa --- /dev/null +++ b/solution.go @@ -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"` +} diff --git a/subtask.go b/subtask.go new file mode 100644 index 0000000..d4d51c0 --- /dev/null +++ b/subtask.go @@ -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"` +} diff --git a/task.go b/task.go new file mode 100644 index 0000000..f5e96a4 --- /dev/null +++ b/task.go @@ -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"` +} diff --git a/testgroup.go b/testgroup.go new file mode 100644 index 0000000..f102a0c --- /dev/null +++ b/testgroup.go @@ -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") +} diff --git a/user.go b/user.go new file mode 100644 index 0000000..357600c --- /dev/null +++ b/user.go @@ -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"` +}