// Package testerv1 provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.4.1 DO NOT EDIT. package testerv1 import ( "fmt" "net/url" "time" "github.com/gofiber/fiber/v2" "github.com/oapi-codegen/runtime" ) const ( BearerAuthScopes = "bearerAuth.Scopes" ) // AddParticipantResponse defines model for AddParticipantResponse. type AddParticipantResponse struct { Id int32 `json:"id"` } // AddTaskResponse defines model for AddTaskResponse. type AddTaskResponse struct { Id int32 `json:"id"` } // BestSolution defines model for BestSolution. type BestSolution struct { CreatedAt time.Time `json:"created_at"` Id int32 `json:"id"` Language int32 `json:"language"` ParticipantId int32 `json:"participant_id"` Penalty int32 `json:"penalty"` Score int32 `json:"score"` State int32 `json:"state"` TaskId int32 `json:"task_id"` TotalScore int32 `json:"total_score"` UpdatedAt time.Time `json:"updated_at"` } // Contest defines model for Contest. type Contest struct { CreatedAt time.Time `json:"created_at"` Id int32 `json:"id"` Title string `json:"title"` UpdatedAt time.Time `json:"updated_at"` } // CreateContestResponse defines model for CreateContestResponse. type CreateContestResponse struct { Id int32 `json:"id"` } // CreateProblemResponse defines model for CreateProblemResponse. type CreateProblemResponse struct { Id int32 `json:"id"` } // GetContestResponse defines model for GetContestResponse. type GetContestResponse struct { Contest Contest `json:"contest"` Tasks []struct { BestSolution BestSolution `json:"best_solution"` Task RichTask `json:"task"` } `json:"tasks"` } // GetProblemResponse defines model for GetProblemResponse. type GetProblemResponse struct { Problem Problem `json:"problem"` } // ListContestsResponse defines model for ListContestsResponse. type ListContestsResponse struct { Contests []Contest `json:"contests"` } // ListProblemsResponse defines model for ListProblemsResponse. type ListProblemsResponse struct { Problems []Problem `json:"problems"` } // Problem defines model for Problem. type Problem struct { CreatedAt time.Time `json:"created_at"` Id int32 `json:"id"` InputFormat string `json:"input_format"` LatexSummary string `json:"latex_summary"` Legend string `json:"legend"` MemoryLimit int32 `json:"memory_limit"` Notes string `json:"notes"` OutputFormat string `json:"output_format"` TimeLimit int32 `json:"time_limit"` Title string `json:"title"` Tutorial string `json:"tutorial"` UpdatedAt time.Time `json:"updated_at"` } // RichTask defines model for RichTask. type RichTask struct { CreatedAt time.Time `json:"created_at"` Id int32 `json:"id"` MemoryLimit int32 `json:"memory_limit"` Position int32 `json:"position"` ProblemId int32 `json:"problem_id"` TimeLimit int32 `json:"time_limit"` Title string `json:"title"` UpdatedAt time.Time `json:"updated_at"` } // DeleteParticipantParams defines parameters for DeleteParticipant. type DeleteParticipantParams struct { ParticipantId int32 `form:"participant_id" json:"participant_id"` } // AddParticipantParams defines parameters for AddParticipant. type AddParticipantParams struct { UserId int32 `form:"user_id" json:"user_id"` } // DeleteTaskParams defines parameters for DeleteTask. type DeleteTaskParams struct { TaskId int32 `form:"task_id" json:"task_id"` } // AddTaskParams defines parameters for AddTask. type AddTaskParams struct { ProblemId int32 `form:"problem_id" json:"problem_id"` } // ServerInterface represents all server handlers. type ServerInterface interface { // (GET /contests) ListContests(c *fiber.Ctx) error // (POST /contests) CreateContest(c *fiber.Ctx) error // (DELETE /contests/{id}) DeleteContest(c *fiber.Ctx, id int32) error // (GET /contests/{id}) GetContest(c *fiber.Ctx, id int32) error // (DELETE /contests/{id}/participants) DeleteParticipant(c *fiber.Ctx, id int32, params DeleteParticipantParams) error // (POST /contests/{id}/participants) AddParticipant(c *fiber.Ctx, id int32, params AddParticipantParams) error // (DELETE /contests/{id}/tasks) DeleteTask(c *fiber.Ctx, id int32, params DeleteTaskParams) error // (POST /contests/{id}/tasks) AddTask(c *fiber.Ctx, id int32, params AddTaskParams) error // (GET /problems) ListProblems(c *fiber.Ctx) error // (POST /problems) CreateProblem(c *fiber.Ctx) error // (DELETE /problems/{id}) DeleteProblem(c *fiber.Ctx, id int32) error // (GET /problems/{id}) GetProblem(c *fiber.Ctx, id int32) error } // ServerInterfaceWrapper converts contexts to parameters. type ServerInterfaceWrapper struct { Handler ServerInterface } type MiddlewareFunc fiber.Handler // ListContests operation middleware func (siw *ServerInterfaceWrapper) ListContests(c *fiber.Ctx) error { c.Context().SetUserValue(BearerAuthScopes, []string{}) return siw.Handler.ListContests(c) } // CreateContest operation middleware func (siw *ServerInterfaceWrapper) CreateContest(c *fiber.Ctx) error { c.Context().SetUserValue(BearerAuthScopes, []string{}) return siw.Handler.CreateContest(c) } // DeleteContest operation middleware func (siw *ServerInterfaceWrapper) DeleteContest(c *fiber.Ctx) error { var err error // ------------- Path parameter "id" ------------- var id int32 err = runtime.BindStyledParameterWithOptions("simple", "id", c.Params("id"), &id, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter id: %w", err).Error()) } c.Context().SetUserValue(BearerAuthScopes, []string{}) return siw.Handler.DeleteContest(c, id) } // GetContest operation middleware func (siw *ServerInterfaceWrapper) GetContest(c *fiber.Ctx) error { var err error // ------------- Path parameter "id" ------------- var id int32 err = runtime.BindStyledParameterWithOptions("simple", "id", c.Params("id"), &id, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter id: %w", err).Error()) } c.Context().SetUserValue(BearerAuthScopes, []string{}) return siw.Handler.GetContest(c, id) } // DeleteParticipant operation middleware func (siw *ServerInterfaceWrapper) DeleteParticipant(c *fiber.Ctx) error { var err error // ------------- Path parameter "id" ------------- var id int32 err = runtime.BindStyledParameterWithOptions("simple", "id", c.Params("id"), &id, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter id: %w", err).Error()) } c.Context().SetUserValue(BearerAuthScopes, []string{}) // Parameter object where we will unmarshal all parameters from the context var params DeleteParticipantParams var query url.Values query, err = url.ParseQuery(string(c.Request().URI().QueryString())) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for query string: %w", err).Error()) } // ------------- Required query parameter "participant_id" ------------- if paramValue := c.Query("participant_id"); paramValue != "" { } else { err = fmt.Errorf("Query argument participant_id is required, but not found") c.Status(fiber.StatusBadRequest).JSON(err) return err } err = runtime.BindQueryParameter("form", true, true, "participant_id", query, ¶ms.ParticipantId) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter participant_id: %w", err).Error()) } return siw.Handler.DeleteParticipant(c, id, params) } // AddParticipant operation middleware func (siw *ServerInterfaceWrapper) AddParticipant(c *fiber.Ctx) error { var err error // ------------- Path parameter "id" ------------- var id int32 err = runtime.BindStyledParameterWithOptions("simple", "id", c.Params("id"), &id, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter id: %w", err).Error()) } c.Context().SetUserValue(BearerAuthScopes, []string{}) // Parameter object where we will unmarshal all parameters from the context var params AddParticipantParams var query url.Values query, err = url.ParseQuery(string(c.Request().URI().QueryString())) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for query string: %w", err).Error()) } // ------------- Required query parameter "user_id" ------------- if paramValue := c.Query("user_id"); paramValue != "" { } else { err = fmt.Errorf("Query argument user_id is required, but not found") c.Status(fiber.StatusBadRequest).JSON(err) return err } err = runtime.BindQueryParameter("form", true, true, "user_id", query, ¶ms.UserId) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter user_id: %w", err).Error()) } return siw.Handler.AddParticipant(c, id, params) } // DeleteTask operation middleware func (siw *ServerInterfaceWrapper) DeleteTask(c *fiber.Ctx) error { var err error // ------------- Path parameter "id" ------------- var id int32 err = runtime.BindStyledParameterWithOptions("simple", "id", c.Params("id"), &id, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter id: %w", err).Error()) } c.Context().SetUserValue(BearerAuthScopes, []string{}) // Parameter object where we will unmarshal all parameters from the context var params DeleteTaskParams var query url.Values query, err = url.ParseQuery(string(c.Request().URI().QueryString())) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for query string: %w", err).Error()) } // ------------- Required query parameter "task_id" ------------- if paramValue := c.Query("task_id"); paramValue != "" { } else { err = fmt.Errorf("Query argument task_id is required, but not found") c.Status(fiber.StatusBadRequest).JSON(err) return err } err = runtime.BindQueryParameter("form", true, true, "task_id", query, ¶ms.TaskId) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter task_id: %w", err).Error()) } return siw.Handler.DeleteTask(c, id, params) } // AddTask operation middleware func (siw *ServerInterfaceWrapper) AddTask(c *fiber.Ctx) error { var err error // ------------- Path parameter "id" ------------- var id int32 err = runtime.BindStyledParameterWithOptions("simple", "id", c.Params("id"), &id, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter id: %w", err).Error()) } c.Context().SetUserValue(BearerAuthScopes, []string{}) // Parameter object where we will unmarshal all parameters from the context var params AddTaskParams var query url.Values query, err = url.ParseQuery(string(c.Request().URI().QueryString())) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for query string: %w", err).Error()) } // ------------- Required query parameter "problem_id" ------------- if paramValue := c.Query("problem_id"); paramValue != "" { } else { err = fmt.Errorf("Query argument problem_id is required, but not found") c.Status(fiber.StatusBadRequest).JSON(err) return err } err = runtime.BindQueryParameter("form", true, true, "problem_id", query, ¶ms.ProblemId) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter problem_id: %w", err).Error()) } return siw.Handler.AddTask(c, id, params) } // ListProblems operation middleware func (siw *ServerInterfaceWrapper) ListProblems(c *fiber.Ctx) error { c.Context().SetUserValue(BearerAuthScopes, []string{}) return siw.Handler.ListProblems(c) } // CreateProblem operation middleware func (siw *ServerInterfaceWrapper) CreateProblem(c *fiber.Ctx) error { c.Context().SetUserValue(BearerAuthScopes, []string{}) return siw.Handler.CreateProblem(c) } // DeleteProblem operation middleware func (siw *ServerInterfaceWrapper) DeleteProblem(c *fiber.Ctx) error { var err error // ------------- Path parameter "id" ------------- var id int32 err = runtime.BindStyledParameterWithOptions("simple", "id", c.Params("id"), &id, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter id: %w", err).Error()) } c.Context().SetUserValue(BearerAuthScopes, []string{}) return siw.Handler.DeleteProblem(c, id) } // GetProblem operation middleware func (siw *ServerInterfaceWrapper) GetProblem(c *fiber.Ctx) error { var err error // ------------- Path parameter "id" ------------- var id int32 err = runtime.BindStyledParameterWithOptions("simple", "id", c.Params("id"), &id, runtime.BindStyledParameterOptions{Explode: false, Required: true}) if err != nil { return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter id: %w", err).Error()) } c.Context().SetUserValue(BearerAuthScopes, []string{}) return siw.Handler.GetProblem(c, id) } // FiberServerOptions provides options for the Fiber server. type FiberServerOptions struct { BaseURL string Middlewares []MiddlewareFunc } // RegisterHandlers creates http.Handler with routing matching OpenAPI spec. func RegisterHandlers(router fiber.Router, si ServerInterface) { RegisterHandlersWithOptions(router, si, FiberServerOptions{}) } // RegisterHandlersWithOptions creates http.Handler with additional options func RegisterHandlersWithOptions(router fiber.Router, si ServerInterface, options FiberServerOptions) { wrapper := ServerInterfaceWrapper{ Handler: si, } for _, m := range options.Middlewares { router.Use(fiber.Handler(m)) } router.Get(options.BaseURL+"/contests", wrapper.ListContests) router.Post(options.BaseURL+"/contests", wrapper.CreateContest) router.Delete(options.BaseURL+"/contests/:id", wrapper.DeleteContest) router.Get(options.BaseURL+"/contests/:id", wrapper.GetContest) router.Delete(options.BaseURL+"/contests/:id/participants", wrapper.DeleteParticipant) router.Post(options.BaseURL+"/contests/:id/participants", wrapper.AddParticipant) router.Delete(options.BaseURL+"/contests/:id/tasks", wrapper.DeleteTask) router.Post(options.BaseURL+"/contests/:id/tasks", wrapper.AddTask) router.Get(options.BaseURL+"/problems", wrapper.ListProblems) router.Post(options.BaseURL+"/problems", wrapper.CreateProblem) router.Delete(options.BaseURL+"/problems/:id", wrapper.DeleteProblem) router.Get(options.BaseURL+"/problems/:id", wrapper.GetProblem) }