logic

package
v0.0.0-...-654e1bf Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 12, 2024 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AccountRoleAdmin         = "Admin"
	AccountRoleProblemSetter = "ProblemSetter"
	AccountRoleContester     = "Contester"
	AccountRoleWorker        = "Worker"
)

Variables

View Source
var (
	ErrProblemNotFound      = status.Error(codes.NotFound, "problem not found")
	ErrTestCaseNotFound     = status.Error(codes.NotFound, "test case not found")
	ErrAccountNotFound      = status.Error(codes.NotFound, "account not found")
	ErrPermissionDenied     = status.Error(codes.PermissionDenied, "permission denied")
	ErrInternal             = status.Error(codes.Internal, "internal error")
	ErrTokenInvalid         = status.Error(codes.Unauthenticated, "invalid authentication token")
	ErrAccountAlreadyExists = status.Error(codes.AlreadyExists, "account name already exists")
)
View Source
var (
	PermissionAccountsReadSelf  = gorbac.NewLayerPermission("accounts:read:self")
	PermissionAccountsWriteSelf = gorbac.NewLayerPermission("accounts:write:self")
	PermissionAccountsReadAll   = gorbac.NewLayerPermission("accounts:read")
	PermissionAccountsWriteAll  = gorbac.NewLayerPermission("accounts:write")

	PermissionTestCasesReadSelf  = gorbac.NewLayerPermission("testcases:read:self")
	PermissionTestCasesWriteSelf = gorbac.NewLayerPermission("testcases:write:self")
	PermissionTestCasesReadAll   = gorbac.NewLayerPermission("testcases:read")
	PermissionTestCasesWriteAll  = gorbac.NewLayerPermission("testcases:write")

	PermissionSubmissionsReadSelf  = gorbac.NewLayerPermission("submissions:read:self")
	PermissionSubmissionsWriteSelf = gorbac.NewLayerPermission("submissions:write:self")
	PermissionSubmissionsReadAll   = gorbac.NewLayerPermission("submissions:read")
	PermissionSubmissionsWriteAll  = gorbac.NewLayerPermission("submissions:write")

	PermissionProblemsReadSelf  = gorbac.NewLayerPermission("problems:read:self")
	PermissionProblemsWriteSelf = gorbac.NewLayerPermission("problems:write:self")
	PermissionProblemsReadAll   = gorbac.NewLayerPermission("problems:read")
	PermissionProblemsWriteAll  = gorbac.NewLayerPermission("problems:write")
)

Functions

This section is empty.

Types

type AccountLogic

type AccountLogic interface {
	CreateAccount(ctx context.Context, in CreateAccountInput) (CreateAccountOutput, error)
	GetAccount(ctx context.Context, in GetAccountInput) (GetAccountOutput, error)
	CreateSession(ctx context.Context, in CreateSessionInput) (CreateSessionOutput, error)
	DeleteSession(ctx context.Context, in DeleteSessionInput) error
}

func NewAccountLogic

func NewAccountLogic(
	database database.Database,
	accountDataAccessor database.AccountDataAccessor,
	passwordDataAccessor database.AccountPasswordDataAccessor,
	hashLogic HashLogic,
	tokenLogic TokenLogic,
	roleLogic RoleLogic,
	takenAccountNameCache cache.TakenAccountName,
	logger *zap.Logger,
) AccountLogic

type CompileLogic

type CompileLogic interface {
	Compile(ctx context.Context, content string) (CompileOutput, error)
}

func NewCompileLogic

func NewCompileLogic(
	logger *zap.Logger,
	dockerClient *client.Client,
	language string,
	compileConfig *configs.Compile,
	appArguments utils.Arguments,
) (CompileLogic, error)

type CompileOutput

type CompileOutput struct {
	ProgramFilePath string
	ReturnCode      int
	Stdout          string
	Stderr          string
}

type CreateAccountInput

type CreateAccountInput struct {
	Name     string
	Password string
	Role     ojs.Role
}

type CreateAccountOutput

type CreateAccountOutput struct {
	ID   uint64
	Name string
	Role ojs.Role
}

type CreateProblemInput

type CreateProblemInput struct {
	Token       string
	DisplayName string
	Description string
	TimeLimit   uint64
	MemoryLimit uint64
}

type CreateProblemOutput

type CreateProblemOutput struct {
	Problem Problem
}

type CreateSessionInput

type CreateSessionInput struct {
	Name     string
	Password string
}

type CreateSessionOutput

type CreateSessionOutput struct {
	Token     string
	ExpiresAt time.Time
	ID        uint64
	Name      string
	Role      ojs.Role
}

type CreateSubmissionInput

type CreateSubmissionInput struct {
	Token       string
	OfProblemID uint64
	Content     string
	Language    string
}

type CreateSubmissionOutput

type CreateSubmissionOutput struct {
	Submission Submission
}

type CreateTestCaseInput

type CreateTestCaseInput struct {
	OfProblemID uint64
	Input       string
	Output      string
	IsHidden    bool
	Token       string
}

type CreateTestCaseOutput

type CreateTestCaseOutput struct {
	TestCase TestCase
}

type DeleteProblemInput

type DeleteProblemInput struct {
	Token string
	ID    uint64
}

type DeleteSessionInput

type DeleteSessionInput struct {
	Token string
}

type DeleteTestCaseInput

type DeleteTestCaseInput struct {
	ID    uint64
	Token string
}

type DeleteTestCaseOutput

type DeleteTestCaseOutput struct{}

type ExecuteLogic

type ExecuteLogic interface {
	Execute(
		ctx context.Context,
		programFilePath string,
		programInput string,
	) (ExecuteOutput, error)
}

func NewExecuteLogic

func NewExecuteLogic(
	logger *zap.Logger,
	dockerClient *client.Client,
	language string,
	executeConfig *configs.Execute,
	appArguments utils.Arguments,
) (ExecuteLogic, error)

type ExecuteOutput

type ExecuteOutput struct {
	ReturnCode          int
	TimeLimitExceeded   bool
	MemoryLimitExceeded bool
	Stdout              string
	Stderr              string
}

type ExecuteSubmissionInput

type ExecuteSubmissionInput struct {
	ID    uint64
	Token string
}

type GetAccountInput

type GetAccountInput struct {
	ID    uint64
	Token string
}

type GetAccountOutput

type GetAccountOutput struct {
	ID   uint64
	Name string
	Role ojs.Role
}

type GetAccountProblemSubmissionListInput

type GetAccountProblemSubmissionListInput struct {
	Token       string
	OfProblemID uint64
	Offset      uint64
	Limit       uint64
}

type GetAccountProblemSubmissionListOutput

type GetAccountProblemSubmissionListOutput struct {
	Submissions           []Submission
	TotalSubmissionsCount uint64
}

type GetProblemInput

type GetProblemInput struct {
	Token string
	ID    uint64
}

type GetProblemListInput

type GetProblemListInput struct {
	Token  string
	Offset uint64
	Limit  uint64
}

type GetProblemListOutput

type GetProblemListOutput struct {
	Problems          []Problem
	TotalProblemCount uint64
}

type GetProblemOutput

type GetProblemOutput struct {
	Problem Problem
}

type GetProblemSubmissionListInput

type GetProblemSubmissionListInput struct {
	Token       string
	OfProblemID uint64
	Offset      uint64
	Limit       uint64
	IsHidden    bool
}

type GetProblemSubmissionListOutput

type GetProblemSubmissionListOutput struct {
	Submissions           []Submission
	TotalSubmissionsCount uint64
}

type GetProblemTestCaseListInput

type GetProblemTestCaseListInput struct {
	OfProblemID uint64
	Offset      uint64
	Limit       uint64
	Token       string
}

type GetProblemTestCaseListOutput

type GetProblemTestCaseListOutput struct {
	TestCases           []TestCase
	TotalTestCasesCount uint64
}

type GetSubmissionInput

type GetSubmissionInput struct {
	ID    uint64
	Token string
}

type GetSubmissionListInput

type GetSubmissionListInput struct {
	Offset uint64
	Limit  uint64
	Token  string
}

type GetSubmissionListOutput

type GetSubmissionListOutput struct {
	Submissions           []Submission
	TotalSubmissionsCount uint64
}

type GetSubmissionOutput

type GetSubmissionOutput struct {
	Submission Submission
}

type GetTestCaseInput

type GetTestCaseInput struct {
	ID    uint64
	Token string
}

type GetTestCaseOutput

type GetTestCaseOutput struct {
	TestCase TestCase
}

type HashLogic

type HashLogic interface {
	HashPassword(ctx context.Context, plainPassword string) (string, error)
	IsHashEqual(ctx context.Context, plainPassword string, hashedPassword string) (bool, error)
}

func NewHashLogic

func NewHashLogic(authConfig configs.Auth) HashLogic

type JudgeLogic

type JudgeLogic interface {
	Judge(ctx context.Context, submission Submission) (ojs.SubmissionResult, error)
}

func NewJudgeLogic

func NewJudgeLogic(
	problemDataAccessor database.ProblemDataAccessor,
	submissionDataAccessor database.SubmissionDataAccessor,
	testCaseDataAccessor database.TestCaseDataAccessor,
	dockerClient *client.Client,
	judgeConfig configs.Judge,
	appArguments utils.Arguments,
	logger *zap.Logger,
) (JudgeLogic, error)

type Problem

type Problem struct {
	ID          uint64
	DisplayName string
	AuthorId    uint64
	AuthorName  string
	Description string
	TimeLimit   uint64
	MemoryLimit uint64
}

type ProblemLogic

type ProblemLogic interface {
	CreateProblem(ctx context.Context, in CreateProblemInput) (CreateProblemOutput, error)
	GetProblem(ctx context.Context, in GetProblemInput) (GetProblemOutput, error)
	GetProblemList(ctx context.Context, in GetProblemListInput) (GetProblemListOutput, error)
	UpdateProblem(ctx context.Context, in UpdateProblemInput) (UpdateProblemOutput, error)
	DeleteProblem(ctx context.Context, in DeleteProblemInput) error
}

func NewProblemLogic

func NewProblemLogic(
	logger *zap.Logger,
	accountDataAccessor database.AccountDataAccessor,
	problemDataAccessor database.ProblemDataAccessor,
	submissionDataAccessor database.SubmissionDataAccessor,
	testCaseDataAccessor database.TestCaseDataAccessor,
	tokenLogic TokenLogic,
	roleLogic RoleLogic,
) ProblemLogic

type RoleLogic

type RoleLogic interface {
	AccountHasPermission(ctx context.Context, accountRole string, permissions ...gorbac.Permission) (bool, error)
}

func NewRoleLogic

func NewRoleLogic(logger *zap.Logger) RoleLogic

type Submission

type Submission struct {
	ID          uint64
	AuthorID    uint64
	OfProblemID uint64
	Content     string
	Language    string
	Status      ojs.SubmissionStatus
	Result      ojs.SubmissionResult
}

type SubmissionLogic

func NewSubmissionLogic

func NewSubmissionLogic(
	logger *zap.Logger,
	accountDataAccessor database.AccountDataAccessor,
	problemDataAccessor database.ProblemDataAccessor,
	submissionDataAccessor database.SubmissionDataAccessor,
	testCaseDataAccessor database.TestCaseDataAccessor,
	tokenLogic TokenLogic,
	judgeLogic JudgeLogic,
	roleLogic RoleLogic,
	submissionCreatedProducer producer.SubmissionCreatedProducer,
	database database.Database,
) SubmissionLogic

type TestCase

type TestCase struct {
	ID          uint64
	OfProblemID uint64
	Input       string
	Output      string
	IsHidden    bool
}

type TestCaseLogic

type TestCaseLogic interface {
	CreateTestCase(ctx context.Context, in CreateTestCaseInput) (CreateTestCaseOutput, error)
	GetTestCase(ctx context.Context, in GetTestCaseInput) (GetTestCaseOutput, error)
	GetProblemTestCaseList(ctx context.Context, in GetProblemTestCaseListInput) (GetProblemTestCaseListOutput, error)
	UpdateTestCase(ctx context.Context, in UpdateTestCaseInput) (UpdateTestCaseOutput, error)
	DeleteTestCase(ctx context.Context, in DeleteTestCaseInput) error
}

func NewTestCaseLogic

func NewTestCaseLogic(
	logger *zap.Logger,
	accountDataAccessor database.AccountDataAccessor,
	problemDataAccessor database.ProblemDataAccessor,
	submissionDataAccessor database.SubmissionDataAccessor,
	testCaseDataAccessor database.TestCaseDataAccessor,
	tokenLogic TokenLogic,
	roleLogic RoleLogic,
) TestCaseLogic

type TokenLogic

type TokenLogic interface {
	CreateTokenString(ctx context.Context, accountID uint64, accountName string, accountRole int8) (string, time.Time, error)
	VerifyTokenString(ctx context.Context, token string) (accountId uint64, accountName string, accountRole int8, expiresAt time.Time, err error)
	WithDatabase(database database.Database) TokenLogic
}

func NewTokenLogic

func NewTokenLogic(
	accountDataAccessor database.AccountDataAccessor,
	tokenPublicKeyDataAccessor database.TokenPublicKeyDataAccessor,
	logger *zap.Logger,
	authConfig configs.Auth,
	tokenPublicKeyCache cache.TokenPublicKey,
) (TokenLogic, error)

type UpdateProblemInput

type UpdateProblemInput struct {
	Token       string
	ID          uint64
	DisplayName string
	Description string
	TimeLimit   uint64
	MemoryLimit uint64
}

type UpdateProblemOutput

type UpdateProblemOutput struct {
	Problem Problem
}

type UpdateTestCaseInput

type UpdateTestCaseInput struct {
	ID       uint64
	Input    string
	Output   string
	IsHidden bool
	Token    string
}

type UpdateTestCaseOutput

type UpdateTestCaseOutput struct {
	TestCase TestCase
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL