Skip to content

Commit

Permalink
Add skip x-go-skip-validation flag (#54)
Browse files Browse the repository at this point in the history
  • Loading branch information
daniil-pankratov committed Mar 29, 2024
1 parent 2e345b5 commit d30d32d
Show file tree
Hide file tree
Showing 8 changed files with 586 additions and 99 deletions.
9 changes: 9 additions & 0 deletions README.md
Expand Up @@ -122,6 +122,15 @@ If you want to add omitempty tag you can also use `x-go-omitempty`
type: string
x-go-omitempty: true
```

By default, validation is added to request body objects. If you want to ignore validation, use flag `x-go-skip-validation`
```
ResponseBody:
properties:
title:
type: string
x-go-skip-validation: true
```
## Have a question or need some functionality?
Feel free to discuss it or do a PR.

Expand Down
29 changes: 29 additions & 0 deletions example/app.go
Expand Up @@ -39,6 +39,35 @@ func (t transactionsService) PostTransaction(ctx context.Context, request PostTr
Build()
}

func (t transactionsService) PutTransaction(ctx context.Context, request PutTransactionRequest) PutTransactionResponse {
log.Printf("processing update transaction request...\n")

if err := request.ProcessingResult.Err(); err != nil {
return PutTransactionResponseBuilder().
StatusCode400().
ApplicationJson().
Body(GenericResponse{Result: GenericResponseResultEnumFailed}).
Build()
}

log.Printf("creating transaction - '%v'\n", request.Body)

res := GenericResponse{Result: GenericResponseResultEnumSuccess}
if err := res.Validate(); err != nil {
return PutTransactionResponseBuilder().
StatusCode500().
ApplicationJson().
Body(GenericResponse{Result: GenericResponseResultEnumFailed}).
Build()
}

return PutTransactionResponseBuilder().
StatusCode200().
ApplicationJson().
Body(res).
Build()
}

func (t transactionsService) DeleteTransactionsUUID(ctx context.Context, request DeleteTransactionsUUIDRequest) DeleteTransactionsUUIDResponse {
log.Printf("processing delete transaction request - '%v'\n", request)
if err := request.ProcessingResult.Err(); err != nil {
Expand Down
108 changes: 69 additions & 39 deletions example/components_gen.go
Expand Up @@ -18,35 +18,39 @@ import (

var regexParamRegex = regexp.MustCompile("^[.?\\d]+$")

type Email = email.Email
type Boolean = bool

type genericResponse struct {
Result GenericResponseResultEnum `json:"result"`
type URL = url.URL

type updateTransactionRequest struct {
Description *string `json:"description"`
Details *string `json:"details,omitempty"`
Title string `json:"title"`
}

type GenericResponse struct {
Result GenericResponseResultEnum `json:"result"`
type UpdateTransactionRequest struct {
Description string `json:"description"`
Details *string `json:"details,omitempty"`
Title string `json:"title"`
}

func (body *GenericResponse) UnmarshalJSON(data []byte) error {
var value genericResponse
func (body *UpdateTransactionRequest) UnmarshalJSON(data []byte) error {
var value updateTransactionRequest
if err := json.Unmarshal(data, &value); err != nil {
return err
}

body.Result = value.Result

return nil
}
func (body GenericResponse) Validate() error {
return nil
}
body.Details = value.Details
body.Title = strings.TrimSpace(value.Title)

type Time = time.Time
if value.Description == nil {
return fmt.Errorf("Description is required")
}

type URL = url.URL
body.Description = strings.TrimSpace(*value.Description)

type Boolean = bool
return nil
}

type createTransactionRequest struct {
Amount float64 `json:"amount"`
Expand Down Expand Up @@ -82,18 +86,18 @@ func (body *CreateTransactionRequest) UnmarshalJSON(data []byte) error {
return err
}

body.AmountCents = value.AmountCents
body.CallbackURL = value.CallbackURL
body.Currency = value.Currency
body.Email = value.Email
body.Details = value.Details
if !regexParamRegex.MatchString(body.RegexParam) {
return fmt.Errorf("RegexParam not matched by the '^[.?\\d]+$' regex")
}
body.RegexParam = value.RegexParam
body.Title = strings.TrimSpace(value.Title)
body.TransactionID = value.TransactionID
body.AmountCents = value.AmountCents
body.CallbackURL = value.CallbackURL
body.Details = value.Details
body.Amount = value.Amount
body.Email = value.Email
body.Title = strings.TrimSpace(value.Title)
body.Country = value.Country

if value.Description == nil {
Expand All @@ -107,36 +111,62 @@ func (body *CreateTransactionRequest) UnmarshalJSON(data []byte) error {
func (body CreateTransactionRequest) Validate() error {
return validation.ValidateStruct(&body,
validation.Field(&body.Currency, validation.Skip.When(body.Currency == ""), validation.RuneLength(3, 3)),
validation.Field(&body.Title, validation.Skip.When(body.Title == ""), validation.RuneLength(8, 50)),
validation.Field(&body.Amount, validation.Min(0.009).Exclusive()),
validation.Field(&body.Title, validation.Skip.When(body.Title == ""), validation.RuneLength(8, 50)),
validation.Field(&body.Country, validation.Skip.When(body.Country == ""), validation.RuneLength(2, 2)),
validation.Field(&body.Description, validation.Required, validation.RuneLength(8, 100)))
}

type Email = email.Email

type genericResponse struct {
Result GenericResponseResultEnum `json:"result"`
}

type GenericResponse struct {
Result GenericResponseResultEnum `json:"result"`
}

func (body *GenericResponse) UnmarshalJSON(data []byte) error {
var value genericResponse
if err := json.Unmarshal(data, &value); err != nil {
return err
}

body.Result = value.Result

return nil
}
func (body GenericResponse) Validate() error {
return nil
}

type RawPayload = []byte

type WithEnum string
type Time = time.Time

var WithEnumOne WithEnum = "one"
var WithEnumTwo WithEnum = "two"
type GenericResponseResultEnum string

func (enum WithEnum) Check() error {
var GenericResponseResultEnumSuccess GenericResponseResultEnum = "success"
var GenericResponseResultEnumFailed GenericResponseResultEnum = "failed"

func (enum GenericResponseResultEnum) Check() error {
switch enum {
case WithEnumOne, WithEnumTwo:
case GenericResponseResultEnumSuccess, GenericResponseResultEnumFailed:

return nil
}

return fmt.Errorf("invalid WithEnum enum value")
return fmt.Errorf("invalid GenericResponseResultEnum enum value")
}

func (enum *WithEnum) UnmarshalJSON(data []byte) error {
func (enum *GenericResponseResultEnum) UnmarshalJSON(data []byte) error {
var strValue string
if err := json.Unmarshal(data, &strValue); err != nil {

return err
}
enumValue := WithEnum(strValue)
enumValue := GenericResponseResultEnum(strValue)
if err := enumValue.Check(); err != nil {

return err
Expand All @@ -146,28 +176,28 @@ func (enum *WithEnum) UnmarshalJSON(data []byte) error {
return nil
}

type GenericResponseResultEnum string
type WithEnum string

var GenericResponseResultEnumSuccess GenericResponseResultEnum = "success"
var GenericResponseResultEnumFailed GenericResponseResultEnum = "failed"
var WithEnumOne WithEnum = "one"
var WithEnumTwo WithEnum = "two"

func (enum GenericResponseResultEnum) Check() error {
func (enum WithEnum) Check() error {
switch enum {
case GenericResponseResultEnumSuccess, GenericResponseResultEnumFailed:
case WithEnumOne, WithEnumTwo:

return nil
}

return fmt.Errorf("invalid GenericResponseResultEnum enum value")
return fmt.Errorf("invalid WithEnum enum value")
}

func (enum *GenericResponseResultEnum) UnmarshalJSON(data []byte) error {
func (enum *WithEnum) UnmarshalJSON(data []byte) error {
var strValue string
if err := json.Unmarshal(data, &strValue); err != nil {

return err
}
enumValue := GenericResponseResultEnum(strValue)
enumValue := WithEnum(strValue)
if err := enumValue.Check(); err != nil {

return err
Expand Down

0 comments on commit d30d32d

Please sign in to comment.