Compare commits

...

2 Commits

Author SHA1 Message Date
Tom Peltonen efd092ccde Further refinements 2023-01-08 23:58:30 +11:00
Tom Peltonen 90eb07b484 Generated code 2023-01-08 23:05:25 +11:00
29 changed files with 8696 additions and 15 deletions

2960
build/openapi.json 100644

File diff suppressed because it is too large Load Diff

View File

@ -2,4 +2,5 @@ package: gen
generate:
echo-server: true
embedded-spec: true
output: api/gen/{{appShort}}-server.gen.go
output: api/gen/InvestAccnt-server.gen.go

View File

@ -0,0 +1,5 @@
package: gen
generate:
models: true
output: api/gen/InvestAccnt-type.gen.go

View File

@ -0,0 +1,38 @@
environment: development
server:
host: 0.0.0.0
port: 8077
base_path: /v1
timeout:
server: 30
read: 15
write: 10
idle: 5
folders:
data: ./data
static: ./static
config: ./config
hosts:
dataSource:
load: false
overwrite: false
support:
level: 3
authn51:
providers:
bearer:
default_user: guest
secret: password
basic:
default_user: guest
password: password
apikey:
api_value:

View File

@ -5,16 +5,17 @@ import (
"github.com/labstack/echo/v4"
"{{moduleName}}/api/gen"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) {{servicesign}} {
func (self *BianApiService) {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "{{funcName}} service API not implemented"
message := " service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) GetInvestments(ctx echo.Context, params gen.GetInvestmentsParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "GetInvestments service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) GetInvestmentsDetails(ctx echo.Context, params gen.GetInvestmentsDetailsParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "GetInvestmentsDetails service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) GetInvestmentsInvestmentAccountId(ctx echo.Context, investmentAccountId string, params gen.GetInvestmentsInvestmentAccountIdParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "GetInvestmentsInvestmentAccountId service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) GetInvestmentsInvestmentAccountIdAuthorisation(ctx echo.Context, investmentAccountId string, params gen.GetInvestmentsInvestmentAccountIdAuthorisationParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "GetInvestmentsInvestmentAccountIdAuthorisation service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) GetInvestmentsInvestmentAccountIdDetails(ctx echo.Context, investmentAccountId string, params gen.GetInvestmentsInvestmentAccountIdDetailsParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "GetInvestmentsInvestmentAccountIdDetails service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) GetInvestmentsInvestmentAccountIdHoldingsHoldingId(ctx echo.Context, investmentAccountId string, holdingId string, params gen.GetInvestmentsInvestmentAccountIdHoldingsHoldingIdParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "GetInvestmentsInvestmentAccountIdHoldingsHoldingId service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) GetSearch(ctx echo.Context, params gen.GetSearchParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "GetSearch service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) GetStatus(ctx echo.Context, params gen.GetStatusParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "GetStatus service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) PostInvestmentsInvestmentAccountId(ctx echo.Context, investmentAccountId string, params gen.PostInvestmentsInvestmentAccountIdParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "PostInvestmentsInvestmentAccountId service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) PostRegister(ctx echo.Context, params gen.PostRegisterParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "PostRegister service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -0,0 +1,21 @@
package api
import (
"net/http"
"github.com/labstack/echo/v4"
"sku61.com/InvestAccnt/api/gen"
)
func (self *BianApiService) PostSearch(ctx echo.Context, params gen.PostSearchParams) error {
self.Lock.Lock()
defer self.Lock.Unlock()
message := "PostSearch service API not implemented"
status := "DM00501"
return sendGeneralError(ctx, http.StatusNotImplemented, message, status, "Implement the API code", "")
}

View File

@ -183,3 +183,4 @@ func ParseFlags(configPath string) (*SoftwareConfiguration, error) {
return config, nil
}

View File

@ -0,0 +1,932 @@
// Package gen provides primitives to interact with the openapi HTTP API.
//
// Code generated by unknown module path version unknown version DO NOT EDIT.
package gen
import (
"bytes"
"compress/gzip"
"encoding/base64"
"fmt"
"net/http"
"net/url"
"path"
"strings"
"github.com/deepmap/oapi-codegen/pkg/runtime"
"github.com/getkin/kin-openapi/openapi3"
"github.com/labstack/echo/v4"
)
// ServerInterface represents all server handlers.
type ServerInterface interface {
// Service domain health
// (GET /health)
GetHealth(ctx echo.Context) error
// List of investment accounts
// (GET /investments/)
GetInvestments(ctx echo.Context, params GetInvestmentsParams) error
// Investment accounts
// (GET /investments/details)
GetInvestmentsDetails(ctx echo.Context, params GetInvestmentsDetailsParams) error
// List holdings linked to investment account.
// (GET /investments/{investment_account_id})
GetInvestmentsInvestmentAccountId(ctx echo.Context, investmentAccountId string, params GetInvestmentsInvestmentAccountIdParams) error
// Create a holding
// (POST /investments/{investment_account_id})
PostInvestmentsInvestmentAccountId(ctx echo.Context, investmentAccountId string, params PostInvestmentsInvestmentAccountIdParams) error
// (GET /investments/{investment_account_id}/authorisation)
GetInvestmentsInvestmentAccountIdAuthorisation(ctx echo.Context, investmentAccountId string, params GetInvestmentsInvestmentAccountIdAuthorisationParams) error
// Details on the investment account
// (GET /investments/{investment_account_id}/details)
GetInvestmentsInvestmentAccountIdDetails(ctx echo.Context, investmentAccountId string, params GetInvestmentsInvestmentAccountIdDetailsParams) error
// Fetch holding information
// (GET /investments/{investment_account_id}/holdings/{holding_id})
GetInvestmentsInvestmentAccountIdHoldingsHoldingId(ctx echo.Context, investmentAccountId string, holdingId string, params GetInvestmentsInvestmentAccountIdHoldingsHoldingIdParams) error
// Request to create a new investment account
// (POST /register)
PostRegister(ctx echo.Context, params PostRegisterParams) error
// Search service on indexed data
// (GET /search)
GetSearch(ctx echo.Context, params GetSearchParams) error
// Search service on indexed data using complex criteria
// (POST /search)
PostSearch(ctx echo.Context, params PostSearchParams) error
// Retrieve a customer status
// (GET /status)
GetStatus(ctx echo.Context, params GetStatusParams) error
}
// ServerInterfaceWrapper converts echo contexts to parameters.
type ServerInterfaceWrapper struct {
Handler ServerInterface
}
// GetHealth converts echo context to params.
func (w *ServerInterfaceWrapper) GetHealth(ctx echo.Context) error {
var err error
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetHealth(ctx)
return err
}
// GetInvestments converts echo context to params.
func (w *ServerInterfaceWrapper) GetInvestments(ctx echo.Context) error {
var err error
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params GetInvestmentsParams
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerID" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerID")]; found {
var XCustomerID string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerID, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerID", runtime.ParamLocationHeader, valueList[0], &XCustomerID)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerID: %s", err))
}
params.XCustomerID = &XCustomerID
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetInvestments(ctx, params)
return err
}
// GetInvestmentsDetails converts echo context to params.
func (w *ServerInterfaceWrapper) GetInvestmentsDetails(ctx echo.Context) error {
var err error
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params GetInvestmentsDetailsParams
// ------------- Optional query parameter "investorid" -------------
err = runtime.BindQueryParameter("form", true, false, "investorid", ctx.QueryParams(), &params.Investorid)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter investorid: %s", err))
}
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerId" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerId")]; found {
var XCustomerId string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerId, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerId", runtime.ParamLocationHeader, valueList[0], &XCustomerId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerId: %s", err))
}
params.XCustomerId = &XCustomerId
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetInvestmentsDetails(ctx, params)
return err
}
// GetInvestmentsInvestmentAccountId converts echo context to params.
func (w *ServerInterfaceWrapper) GetInvestmentsInvestmentAccountId(ctx echo.Context) error {
var err error
// ------------- Path parameter "investment_account_id" -------------
var investmentAccountId string
err = runtime.BindStyledParameterWithLocation("simple", false, "investment_account_id", runtime.ParamLocationPath, ctx.Param("investment_account_id"), &investmentAccountId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter investment_account_id: %s", err))
}
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params GetInvestmentsInvestmentAccountIdParams
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerId" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerId")]; found {
var XCustomerId string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerId, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerId", runtime.ParamLocationHeader, valueList[0], &XCustomerId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerId: %s", err))
}
params.XCustomerId = &XCustomerId
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetInvestmentsInvestmentAccountId(ctx, investmentAccountId, params)
return err
}
// PostInvestmentsInvestmentAccountId converts echo context to params.
func (w *ServerInterfaceWrapper) PostInvestmentsInvestmentAccountId(ctx echo.Context) error {
var err error
// ------------- Path parameter "investment_account_id" -------------
var investmentAccountId string
err = runtime.BindStyledParameterWithLocation("simple", false, "investment_account_id", runtime.ParamLocationPath, ctx.Param("investment_account_id"), &investmentAccountId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter investment_account_id: %s", err))
}
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params PostInvestmentsInvestmentAccountIdParams
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerId" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerId")]; found {
var XCustomerId string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerId, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerId", runtime.ParamLocationHeader, valueList[0], &XCustomerId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerId: %s", err))
}
params.XCustomerId = &XCustomerId
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.PostInvestmentsInvestmentAccountId(ctx, investmentAccountId, params)
return err
}
// GetInvestmentsInvestmentAccountIdAuthorisation converts echo context to params.
func (w *ServerInterfaceWrapper) GetInvestmentsInvestmentAccountIdAuthorisation(ctx echo.Context) error {
var err error
// ------------- Path parameter "investment_account_id" -------------
var investmentAccountId string
err = runtime.BindStyledParameterWithLocation("simple", false, "investment_account_id", runtime.ParamLocationPath, ctx.Param("investment_account_id"), &investmentAccountId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter investment_account_id: %s", err))
}
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params GetInvestmentsInvestmentAccountIdAuthorisationParams
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerID" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerID")]; found {
var XCustomerID string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerID, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerID", runtime.ParamLocationHeader, valueList[0], &XCustomerID)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerID: %s", err))
}
params.XCustomerID = &XCustomerID
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetInvestmentsInvestmentAccountIdAuthorisation(ctx, investmentAccountId, params)
return err
}
// GetInvestmentsInvestmentAccountIdDetails converts echo context to params.
func (w *ServerInterfaceWrapper) GetInvestmentsInvestmentAccountIdDetails(ctx echo.Context) error {
var err error
// ------------- Path parameter "investment_account_id" -------------
var investmentAccountId string
err = runtime.BindStyledParameterWithLocation("simple", false, "investment_account_id", runtime.ParamLocationPath, ctx.Param("investment_account_id"), &investmentAccountId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter investment_account_id: %s", err))
}
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params GetInvestmentsInvestmentAccountIdDetailsParams
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerID" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerID")]; found {
var XCustomerID string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerID, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerID", runtime.ParamLocationHeader, valueList[0], &XCustomerID)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerID: %s", err))
}
params.XCustomerID = &XCustomerID
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetInvestmentsInvestmentAccountIdDetails(ctx, investmentAccountId, params)
return err
}
// GetInvestmentsInvestmentAccountIdHoldingsHoldingId converts echo context to params.
func (w *ServerInterfaceWrapper) GetInvestmentsInvestmentAccountIdHoldingsHoldingId(ctx echo.Context) error {
var err error
// ------------- Path parameter "investment_account_id" -------------
var investmentAccountId string
err = runtime.BindStyledParameterWithLocation("simple", false, "investment_account_id", runtime.ParamLocationPath, ctx.Param("investment_account_id"), &investmentAccountId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter investment_account_id: %s", err))
}
// ------------- Path parameter "holding_id" -------------
var holdingId string
err = runtime.BindStyledParameterWithLocation("simple", false, "holding_id", runtime.ParamLocationPath, ctx.Param("holding_id"), &holdingId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter holding_id: %s", err))
}
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params GetInvestmentsInvestmentAccountIdHoldingsHoldingIdParams
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerId" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerId")]; found {
var XCustomerId string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerId, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerId", runtime.ParamLocationHeader, valueList[0], &XCustomerId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerId: %s", err))
}
params.XCustomerId = &XCustomerId
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetInvestmentsInvestmentAccountIdHoldingsHoldingId(ctx, investmentAccountId, holdingId, params)
return err
}
// PostRegister converts echo context to params.
func (w *ServerInterfaceWrapper) PostRegister(ctx echo.Context) error {
var err error
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params PostRegisterParams
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerID" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerID")]; found {
var XCustomerID string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerID, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerID", runtime.ParamLocationHeader, valueList[0], &XCustomerID)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerID: %s", err))
}
params.XCustomerID = &XCustomerID
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.PostRegister(ctx, params)
return err
}
// GetSearch converts echo context to params.
func (w *ServerInterfaceWrapper) GetSearch(ctx echo.Context) error {
var err error
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params GetSearchParams
// ------------- Required query parameter "q" -------------
err = runtime.BindQueryParameter("form", true, true, "q", ctx.QueryParams(), &params.Q)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter q: %s", err))
}
headers := ctx.Request().Header
// ------------- Optional header parameter "x-v" -------------
if valueList, found := headers[http.CanonicalHeaderKey("x-v")]; found {
var XV int
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for x-v, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "x-v", runtime.ParamLocationHeader, valueList[0], &XV)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter x-v: %s", err))
}
params.XV = &XV
}
// ------------- Optional header parameter "x-min-v" -------------
if valueList, found := headers[http.CanonicalHeaderKey("x-min-v")]; found {
var XMinV int
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for x-min-v, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "x-min-v", runtime.ParamLocationHeader, valueList[0], &XMinV)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter x-min-v: %s", err))
}
params.XMinV = &XMinV
}
// ------------- Optional header parameter "x-fapi-interaction-id" -------------
if valueList, found := headers[http.CanonicalHeaderKey("x-fapi-interaction-id")]; found {
var XFapiInteractionId string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for x-fapi-interaction-id, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "x-fapi-interaction-id", runtime.ParamLocationHeader, valueList[0], &XFapiInteractionId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter x-fapi-interaction-id: %s", err))
}
params.XFapiInteractionId = &XFapiInteractionId
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetSearch(ctx, params)
return err
}
// PostSearch converts echo context to params.
func (w *ServerInterfaceWrapper) PostSearch(ctx echo.Context) error {
var err error
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params PostSearchParams
headers := ctx.Request().Header
// ------------- Optional header parameter "x-v" -------------
if valueList, found := headers[http.CanonicalHeaderKey("x-v")]; found {
var XV int
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for x-v, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "x-v", runtime.ParamLocationHeader, valueList[0], &XV)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter x-v: %s", err))
}
params.XV = &XV
}
// ------------- Optional header parameter "x-min-v" -------------
if valueList, found := headers[http.CanonicalHeaderKey("x-min-v")]; found {
var XMinV int
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for x-min-v, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "x-min-v", runtime.ParamLocationHeader, valueList[0], &XMinV)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter x-min-v: %s", err))
}
params.XMinV = &XMinV
}
// ------------- Optional header parameter "x-fapi-interaction-id" -------------
if valueList, found := headers[http.CanonicalHeaderKey("x-fapi-interaction-id")]; found {
var XFapiInteractionId string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for x-fapi-interaction-id, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "x-fapi-interaction-id", runtime.ParamLocationHeader, valueList[0], &XFapiInteractionId)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter x-fapi-interaction-id: %s", err))
}
params.XFapiInteractionId = &XFapiInteractionId
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.PostSearch(ctx, params)
return err
}
// GetStatus converts echo context to params.
func (w *ServerInterfaceWrapper) GetStatus(ctx echo.Context) error {
var err error
ctx.Set(BasicAuthScopes, []string{""})
ctx.Set(ApiKeyScopes, []string{""})
ctx.Set(BearerAuthScopes, []string{""})
// Parameter object where we will unmarshal all parameters from the context
var params GetStatusParams
headers := ctx.Request().Header
// ------------- Optional header parameter "X-CustomerID" -------------
if valueList, found := headers[http.CanonicalHeaderKey("X-CustomerID")]; found {
var XCustomerID string
n := len(valueList)
if n != 1 {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for X-CustomerID, got %d", n))
}
err = runtime.BindStyledParameterWithLocation("simple", false, "X-CustomerID", runtime.ParamLocationHeader, valueList[0], &XCustomerID)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter X-CustomerID: %s", err))
}
params.XCustomerID = &XCustomerID
}
// Invoke the callback with all the unmarshalled arguments
err = w.Handler.GetStatus(ctx, params)
return err
}
// This is a simple interface which specifies echo.Route addition functions which
// are present on both echo.Echo and echo.Group, since we want to allow using
// either of them for path registration
type EchoRouter interface {
CONNECT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
DELETE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
GET(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
HEAD(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
OPTIONS(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
PATCH(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
POST(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
PUT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
TRACE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
}
// RegisterHandlers adds each server route to the EchoRouter.
func RegisterHandlers(router EchoRouter, si ServerInterface) {
RegisterHandlersWithBaseURL(router, si, "")
}
// Registers handlers, and prepends BaseURL to the paths, so that the paths
// can be served under a prefix.
func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL string) {
wrapper := ServerInterfaceWrapper{
Handler: si,
}
router.GET(baseURL+"/health", wrapper.GetHealth)
router.GET(baseURL+"/investments/", wrapper.GetInvestments)
router.GET(baseURL+"/investments/details", wrapper.GetInvestmentsDetails)
router.GET(baseURL+"/investments/:investment_account_id", wrapper.GetInvestmentsInvestmentAccountId)
router.POST(baseURL+"/investments/:investment_account_id", wrapper.PostInvestmentsInvestmentAccountId)
router.GET(baseURL+"/investments/:investment_account_id/authorisation", wrapper.GetInvestmentsInvestmentAccountIdAuthorisation)
router.GET(baseURL+"/investments/:investment_account_id/details", wrapper.GetInvestmentsInvestmentAccountIdDetails)
router.GET(baseURL+"/investments/:investment_account_id/holdings/:holding_id", wrapper.GetInvestmentsInvestmentAccountIdHoldingsHoldingId)
router.POST(baseURL+"/register", wrapper.PostRegister)
router.GET(baseURL+"/search", wrapper.GetSearch)
router.POST(baseURL+"/search", wrapper.PostSearch)
router.GET(baseURL+"/status", wrapper.GetStatus)
}
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
}
// GetSwagger returns the content of the embedded swagger specification file
// or error if failed to decode
func decodeSpec() ([]byte, error) {
zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, ""))
if err != nil {
return nil, fmt.Errorf("error base64 decoding spec: %s", err)
}
zr, err := gzip.NewReader(bytes.NewReader(zipped))
if err != nil {
return nil, fmt.Errorf("error decompressing spec: %s", err)
}
var buf bytes.Buffer
_, err = buf.ReadFrom(zr)
if err != nil {
return nil, fmt.Errorf("error decompressing spec: %s", err)
}
return buf.Bytes(), nil
}
var rawSpec = decodeSpecCached()
// a naive cached of a decoded swagger spec
func decodeSpecCached() func() ([]byte, error) {
data, err := decodeSpec()
return func() ([]byte, error) {
return data, err
}
}
// Constructs a synthetic filesystem for resolving external references when loading openapi specifications.
func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) {
var res = make(map[string]func() ([]byte, error))
if len(pathToFile) > 0 {
res[pathToFile] = rawSpec
}
return res
}
// GetSwagger returns the Swagger specification corresponding to the generated code
// in this file. The external references of Swagger specification are resolved.
// The logic of resolving external references is tightly connected to "import-mapping" feature.
// Externally referenced files must be embedded in the corresponding golang packages.
// Urls can be supported but this task was out of the scope.
func GetSwagger() (swagger *openapi3.T, err error) {
var resolvePath = PathToRawSpec("")
loader := openapi3.NewLoader()
loader.IsExternalRefsAllowed = true
loader.ReadFromURIFunc = func(loader *openapi3.Loader, url *url.URL) ([]byte, error) {
var pathToFile = url.String()
pathToFile = path.Clean(pathToFile)
getSpec, ok := resolvePath[pathToFile]
if !ok {
err1 := fmt.Errorf("path not found: %s", pathToFile)
return nil, err1
}
return getSpec()
}
var specData []byte
specData, err = rawSpec()
if err != nil {
return
}
swagger, err = loader.LoadFromData(specData)
if err != nil {
return
}
return
}

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@ import (
"github.com/labstack/echo/v4"
"{{moduleName}}/api/gen"
"sku61.com/InvestAccnt/api/gen"
)
@ -96,3 +96,4 @@ func (self *BianApiService) newHealthModelChecks() gen.HealthModel_Checks {
}

View File

@ -8,8 +8,8 @@ import (
"github.com/labstack/echo/v4"
"{{moduleName}}/api/gen"
"{{moduleName}}/api/authn51"
"sku61.com/InvestAccnt/api/gen"
"sku61.com/InvestAccnt/api/authn51"
)
@ -173,3 +173,4 @@ func (self *BianApiService) RefreshToken(ctx echo.Context) error {
}
}

View File

@ -28,3 +28,4 @@ func browseSkipper(baseUrl string, path string) bool {
return false
}

View File

@ -1,4 +0,0 @@
package: gen
generate:
models: true
output: api/gen/{{appShort}}-type.gen.go

37
src/go.mod 100644
View File

@ -0,0 +1,37 @@
module sku61.com/InvestAccnt
go 1.18
require (
github.com/deepmap/oapi-codegen v1.11.0
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/getkin/kin-openapi v0.94.0
github.com/google/uuid v1.3.0
github.com/labstack/echo/v4 v4.7.2
gopkg.in/yaml.v2 v2.4.0
)
require (
github.com/ghodss/yaml v1.0.0 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/swag v0.21.1 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/invopop/yaml v0.1.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/labstack/gommon v0.4.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.16 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasttemplate v1.2.2 // indirect
golang.org/x/crypto v0.1.0 // indirect
golang.org/x/mod v0.7.0 // indirect
golang.org/x/net v0.2.0 // indirect
golang.org/x/sys v0.2.0 // indirect
golang.org/x/text v0.4.0 // indirect
golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect
golang.org/x/tools v0.3.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

205
src/go.sum 100644
View File

@ -0,0 +1,205 @@
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/deepmap/oapi-codegen v1.11.0 h1:f/X2NdIkaBKsSdpeuwLnY/vDI0AtPUrmB5LMgc7YD+A=
github.com/deepmap/oapi-codegen v1.11.0/go.mod h1:k+ujhoQGxmQYBZBbxhOZNZf4j08qv5mC+OH+fFTnKxM=
github.com/deepmap/oapi-codegen v1.12.4 h1:pPmn6qI9MuOtCz82WY2Xaw46EQjgvxednXXrP7g5Q2s=
github.com/deepmap/oapi-codegen v1.12.4/go.mod h1:3lgHGMu6myQ2vqbbTXH2H1o4eXFTGnFiDaOaKKl5yas=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/getkin/kin-openapi v0.94.0 h1:bAxg2vxgnHHHoeefVdmGbR+oxtJlcv5HsJJa3qmAHuo=
github.com/getkin/kin-openapi v0.94.0/go.mod h1:LWZfzOd7PRy8GJ1dJ6mCU6tNdSfOwRac1BUPam4aw6Q=
github.com/getkin/kin-openapi v0.107.0 h1:bxhL6QArW7BXQj8NjXfIJQy680NsMKd25nwhvpCXchg=
github.com/getkin/kin-openapi v0.107.0/go.mod h1:9Dhr+FasATJZjS4iOLvB0hkaxgYdulrNYm2e9epLWOo=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU=
github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/invopop/yaml v0.1.0 h1:YW3WGUoJEXYfzWBjn00zIlrw7brGVD0fUKRYDPAPhrc=
github.com/invopop/yaml v0.1.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/labstack/echo/v4 v4.7.2 h1:Kv2/p8OaQ+M6Ex4eGimg9b9e6icoxA42JSlOR3msKtI=
github.com/labstack/echo/v4 v4.7.2/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks=
github.com/labstack/echo/v4 v4.9.1 h1:GliPYSpzGKlyOhqIbG8nmHBo3i1saKWFOgh41AN3b+Y=
github.com/labstack/echo/v4 v4.9.1/go.mod h1:Pop5HLc+xoc4qhTZ1ip6C0RtP7Z+4VzRLWZZFKqbbjo=
github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8=
github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y=
github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ=
github.com/lestrrat-go/blackmagic v1.0.1/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU=
github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E=
github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc=
github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4=
github.com/lestrrat-go/jwx v1.2.24/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY=
github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/matryer/moq v0.2.7/go.mod h1:kITsx543GOENm48TUAQyJ9+SAvFSr7iGQXPoth/VUBk=
github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220513210258-46612604a0f9/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220513224357-95641704303c/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w=
golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM=
golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

BIN
src/servermain.exe 100644

Binary file not shown.

View File

@ -14,9 +14,9 @@ import (
"github.com/labstack/echo/v4"
echomiddleware "github.com/labstack/echo/v4/middleware"
"{{moduleName}}/api"
"{{moduleName}}/api/gen"
"{{moduleName}}/api/errorh"
"sku61.com/InvestAccnt/api"
"sku61.com/InvestAccnt/api/gen"
"sku61.com/InvestAccnt/api/errorh"
)
@ -66,7 +66,7 @@ func Run(e *echo.Echo, addressPort string, timeOut time.Duration, msgLevel int)
func main() {
configPath := "./config/{{appShort}}.yaml"
configPath := "../config/InvestAccnt.yaml"
softwareConfig, err := api.ParseFlags(configPath)
if err != nil {
fmt.Fprintf(os.Stderr, "Error loading configuration,flags\n")
@ -130,3 +130,4 @@ func main() {
// And we serve HTTP until the world ends.
Run(e, addressPort, timeOut, microService.Configuration.Support.Level)
}

2960
static/openapi.json 100644

File diff suppressed because it is too large Load Diff

137
update.ps1 100644
View File

@ -0,0 +1,137 @@
param (
[string] $baseFolder = ".",
[string] $appShort,
[string] $mainGo,
[switch] $skipApiFetch,
[switch] $skipGoFetch
)
$cd = Get-Location
Set-Location $baseFolder
$wellFile = "./.well-known/devops.json"
if (!(Test-Path $wellFile -PathType Leaf)) {
Write-Host "The specification file '$wellFile' not found" -ForegroundColor Red
Set-Location $cd
Throw "The specification file '$wellFile' not found"
}
Write-Host "Using specification file '$wellFile' " -ForegroundColor White
$devops = Get-Content $wellFile | ConvertFrom-JSON
$openApiFile = ""
$devops.apis | ForEach-Object {
if ($_.engine.url.endswith(".json") -and ($_.engine.category -eq "API") -and ($_.engine.name -eq "openapi")) {
$openApiFile = $baseFolder + $_.engine.url
}
}
if ((Test-Path -Path "./build") -eq $false) {
Write-Host "Missing './build' directory" -ForegroundColor Red
Set-Location $cd
Throw "Missing './build' directory"
}
# API Source URL
$openApiUrl = ""
if ($openApiFile -eq "" -and $skipApiFetch -eq $false) {
$openApiUrl = ""
if ($openApiFile -eq "") {
$openApiFile = "./build/openapi.json"
}
}
# Download the file
if ($openApiUrl -ne "" -and $skipApiFetch -eq $false) {
Write-Host "Fetching Open API definition"
try
{
$Response = Invoke-WebRequest -Uri $openApiUrl -OutFile $openApiFile
$StatusCode = $Response.StatusCode
Write-Host "Fetch completed"
} catch {
$StatusCode = $_.Exception.Response.StatusCode.value__
}
$StatusCode
}
# Find the Open API file
if ($openApiFile -eq "") {
Get-ChildItem Path "./build/" -Filter *.json | Foreach-Object {
$openApiFile = $_.FullName
}
}
if ($openApiFile -eq "") {
Write-Host "Missing Open API in './build' directory" -ForegroundColor Red
Set-Location $cd
Throw "Missing Open API in './build' directory"
}
$openApiFile = Resolve-Path -Path $openApiFile
if ($openApiFile -ne "./static/openapi.json") {
Copy-Item $openApiFile -Destination "./static/openapi.json"
}
Set-Location "./src"
# Find the main Go build file
if ($mainGo -eq "") {
Get-ChildItem Path "./" -Filter *.go | Foreach-Object {
$mainGo = $_.FullName
}
}
if ($mainGo -eq "") {
if ((Test-Path -Path "./servermain.go") -eq $false) {
New-Item -Path './servermain.go' -ItemType File| Out-Null
}
$mainGo = "./servermain.go"
}
if ($mainGo -eq "") {
Write-Host "Missing main Go file in current directory" -ForegroundColor Red
Set-Location $cd
Throw "Missing main Go file in current directory"
}
if ($isWindows) {
go env -w GOOS=windows
} else {
go env -w GOOS=linux
}
go env -w GOARCH=386
if ($skipGoFetch -eq $false) {
Write-Host "Fetching Go packages"
go get gopkg.in/yaml.v2
go get github.com/deepmap/oapi-codegen/pkg/codegen
go get github.com/deepmap/oapi-codegen/pkg/util
go get github.com/deepmap/oapi-codegen/pkg/types@v1.11.0
go get github.com/labstack/echo/v4/middleware@v4.7.2
go get github.com/getkin/kin-openapi/routers/gorillamux@v0.94.0
go get github.com/dgrijalva/jwt-go
}
$codeGen = $env:USERPROFILE + "/go/pkg/mod/github.com/deepmap/oapi-codegen@v1.11.0/cmd/oapi-codegen/oapi-codegen.go"
Write-Host "Generating code from $openApiFile"
go run $codeGen --config ../build/types.cfg.yaml $openApiFile
go run $codeGen --config ../build/server.cfg.yaml $openApiFile
Write-Host "Building Go executable $mainGo"
go build $mainGo
Set-Location $cd
Write-Host "Code generation completed" -ForegroundColor Green