From 5c0d18c0158a6949838fa7daba58e7461fefeb9a Mon Sep 17 00:00:00 2001
From: Vyacheslav1557 <slavabirin1@yandex.ru>
Date: Sun, 2 Mar 2025 00:14:16 +0500
Subject: [PATCH] fix(tester): extend GetContestResponse

---
 tester/v1/tester.go | 497 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 497 insertions(+)
 create mode 100644 tester/v1/tester.go

diff --git a/tester/v1/tester.go b/tester/v1/tester.go
new file mode 100644
index 0000000..4696a8c
--- /dev/null
+++ b/tester/v1/tester.go
@@ -0,0 +1,497 @@
+// 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, &params.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, &params.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, &params.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, &params.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)
+
+}