graphql

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Sep 11, 2023 License: GPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewExecutableSchema

func NewExecutableSchema(cfg Config) graphql.ExecutableSchema

NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.

Types

type ComplexityRoot

type ComplexityRoot struct {
	Constraints struct {
		MemoryLimitKb func(childComplexity int) int
		TimeLimitMs   func(childComplexity int) int
	}

	Description struct {
		Examples func(childComplexity int) int
		ID       func(childComplexity int) int
		Input    func(childComplexity int) int
		Notes    func(childComplexity int) int
		Output   func(childComplexity int) int
		Story    func(childComplexity int) int
	}

	Example struct {
		ID     func(childComplexity int) int
		Input  func(childComplexity int) int
		Output func(childComplexity int) int
	}

	ExecutionResult struct {
		Stderr func(childComplexity int) int
		Stdout func(childComplexity int) int
	}

	Language struct {
		FullName func(childComplexity int) int
		ID       func(childComplexity int) int
		MonacoID func(childComplexity int) int
	}

	Metadata struct {
		Authors func(childComplexity int) int
		Origin  func(childComplexity int) int
	}

	Mutation struct {
		CreateTask            func(childComplexity int, name string, code string) int
		DeleteTask            func(childComplexity int, id string) int
		EnqueueSubmission     func(childComplexity int, taskID string, languageID string, code string, versionID *string) int
		ExecuteCode           func(childComplexity int, code string, languageID string) int
		Login                 func(childComplexity int, username string, password string) int
		Logout                func(childComplexity int) int
		Register              func(childComplexity int, username string, password string, email string, firstName string, lastName string) int
		UpdateTaskConstraints func(childComplexity int, id string, timeLimitMs *int, memoryLimitKb *int) int
		UpdateTaskDescription func(childComplexity int, id string, code *string, name *string, story *string, input *string, output *string, notes *string) int
		UpdateTaskExamples    func(childComplexity int, id string, inputs []string, outputs []string) int
		UpdateTaskMetadata    func(childComplexity int, id string, authors []string, origin *string) int
	}

	Query struct {
		GetPublishedTaskByCode func(childComplexity int, code string) int
		GetRelevantTaskByID    func(childComplexity int, id string) int
		ListLanguages          func(childComplexity int) int
		ListPublishedTasks     func(childComplexity int) int
		ListSubmissions        func(childComplexity int) int
		ListTaskOrigins        func(childComplexity int) int
		ListTasks              func(childComplexity int) int
		Whoami                 func(childComplexity int) int
	}

	Submission struct {
		Code     func(childComplexity int) int
		ID       func(childComplexity int) int
		Language func(childComplexity int) int
		Task     func(childComplexity int) int
	}

	Task struct {
		Code        func(childComplexity int) int
		Constraints func(childComplexity int) int
		CreatedAt   func(childComplexity int) int
		Description func(childComplexity int) int
		ID          func(childComplexity int) int
		Metadata    func(childComplexity int) int
		Name        func(childComplexity int) int
		UpdatedAt   func(childComplexity int) int
	}

	User struct {
		Email     func(childComplexity int) int
		FirstName func(childComplexity int) int
		ID        func(childComplexity int) int
		IsAdmin   func(childComplexity int) int
		LastName  func(childComplexity int) int
		Username  func(childComplexity int) int
	}
}

type Config

type Config struct {
	Resolvers  ResolverRoot
	Directives DirectiveRoot
	Complexity ComplexityRoot
}

type Constraints

type Constraints struct {
	TimeLimitMs   int `json:"timeLimitMs"`
	MemoryLimitKb int `json:"memoryLimitKb"`
}

type Description

type Description struct {
	ID       string     `json:"id"`
	Story    string     `json:"story"`
	Input    string     `json:"input"`
	Output   string     `json:"output"`
	Examples []*Example `json:"examples,omitempty"`
	Notes    *string    `json:"notes,omitempty"`
}

type DirectiveRoot

type DirectiveRoot struct {
}

type Example

type Example struct {
	ID     string `json:"id"`
	Input  string `json:"input"`
	Output string `json:"output"`
}

type ExecutionResult

type ExecutionResult struct {
	Stdout string `json:"stdout"`
	Stderr string `json:"stderr"`
}

type Language

type Language struct {
	ID       string `json:"id"`
	FullName string `json:"fullName"`
	MonacoID string `json:"monacoID"`
}

type Metadata

type Metadata struct {
	Authors []string `json:"authors,omitempty"`
	Origin  *string  `json:"origin,omitempty"`
}

type MutationResolver

type MutationResolver interface {
	Login(ctx context.Context, username string, password string) (*User, error)
	Register(ctx context.Context, username string, password string, email string, firstName string, lastName string) (*User, error)
	Logout(ctx context.Context) (bool, error)
	CreateTask(ctx context.Context, name string, code string) (*Task, error)
	UpdateTaskMetadata(ctx context.Context, id string, authors []string, origin *string) (*Task, error)
	UpdateTaskDescription(ctx context.Context, id string, code *string, name *string, story *string, input *string, output *string, notes *string) (*Task, error)
	UpdateTaskExamples(ctx context.Context, id string, inputs []string, outputs []string) (*Task, error)
	UpdateTaskConstraints(ctx context.Context, id string, timeLimitMs *int, memoryLimitKb *int) (*Task, error)
	DeleteTask(ctx context.Context, id string) (*Task, error)
	EnqueueSubmission(ctx context.Context, taskID string, languageID string, code string, versionID *string) (*Submission, error)
	ExecuteCode(ctx context.Context, code string, languageID string) (*ExecutionResult, error)
}

type QueryResolver

type QueryResolver interface {
	Whoami(ctx context.Context) (*User, error)
	ListTasks(ctx context.Context) ([]*Task, error)
	ListPublishedTasks(ctx context.Context) ([]*Task, error)
	GetRelevantTaskByID(ctx context.Context, id string) (*Task, error)
	GetPublishedTaskByCode(ctx context.Context, code string) (*Task, error)
	ListTaskOrigins(ctx context.Context) ([]string, error)
	ListLanguages(ctx context.Context) ([]*Language, error)
	ListSubmissions(ctx context.Context) ([]*Submission, error)
}

type Resolver

type Resolver struct {
	PostgresDB     *sqlx.DB
	SessionManager *scs.SessionManager
	Logger         *slog.Logger
	SubmissionRMQ  *amqp.Connection
}

func (*Resolver) GetUserFromContext

func (r *Resolver) GetUserFromContext(ctx context.Context) (*database.User, error)

func (*Resolver) HashPassword

func (r *Resolver) HashPassword(password string) (string, error)

func (*Resolver) Mutation

func (r *Resolver) Mutation() MutationResolver

Mutation returns MutationResolver implementation.

func (*Resolver) Query

func (r *Resolver) Query() QueryResolver

Query returns QueryResolver implementation.

type ResolverRoot

type ResolverRoot interface {
	Mutation() MutationResolver
	Query() QueryResolver
}

type Submission

type Submission struct {
	ID       string    `json:"id"`
	Task     *Task     `json:"task"`
	Language *Language `json:"language"`
	Code     string    `json:"code"`
}

type Task

type Task struct {
	ID          string       `json:"id"`
	Code        string       `json:"code"`
	Name        string       `json:"name"`
	Description *Description `json:"Description"`
	Constraints *Constraints `json:"Constraints"`
	Metadata    *Metadata    `json:"Metadata"`
	CreatedAt   string       `json:"createdAt"`
	UpdatedAt   string       `json:"updatedAt"`
}

type User

type User struct {
	ID        string `json:"id"`
	Username  string `json:"username"`
	Email     string `json:"email"`
	FirstName string `json:"firstName"`
	LastName  string `json:"lastName"`
	IsAdmin   bool   `json:"isAdmin"`
}

Jump to

Keyboard shortcuts

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