Skip to content

function-chaining-style input validation library for Go and Gin web framework

License

Notifications You must be signed in to change notification settings

ChampTiravat/go-validation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-validation

function-chaining-style input validation library for Go and Gin web framework

Validation options

var (
    // x-www-form-urlencoded
    firstname = v.Form("firstname").Required().String()

    // url parameter
    Lastname = v.Param("lastname").Optional().String()

    // query string
    age = v.Query("age").Required().Int()

    // form-data
    Height = v.FormData("height").Optional().Float32()

    // mutipart/form-data
    profilePic = v.Multipart("profile_picture").Required().File()
)

// String formating (coming soon):
var (
    email    = v.Form("email").Required().String().Format("email")
    userID   = v.Form("user_id").Required().String().Format("numeric")
    postcode = v.Form("postcode").Required().String().Format("numeric").Min(10).Max(20)
)

Example usages

    package main

    import (
        "net/http"

        "github.com/gin-gonic/gin"

        "example-project/validation"
        "example-project/repository"
    )

    func CreateUser(c *gin.Context) {
        v := validation.FromRequest(c)
        var (
            firstname   = v.FormData("firstname").Required().String()
            lastname    = v.FormData("lastname").Required().String()
            phoneNumber = v.FormData("phone_number").Required().String()
            countryCode = v.FormData("country_code").Required().String()
            email       = v.FormData("email").Required().String()
            password    = v.FormData("password").Required().String()
            profilePic  = v.Multipart("profile_picture").Optional().File()
        )
        if err := v.Done(); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{
                "error": err.Error(),
            })
            return
        }

        newUser, err := repository.CreateUser(
            firstname,
            lastname,
            phoneNumber,
            countryCode,
            email,
            password,
            profilePic.,
        )
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{
                "error": "failed to create new user",
            })
            return
        }

        c.JSON(http.StatusCreated, gin.H{
            "result": newUser,
        })
    }

    func main() {
        r := gin.New()

        v1 := r.Group("/api/v1")
        {
            v1.POST("/users", CreateUser)
        }

        r.Run(":9000")
    }
#

About

function-chaining-style input validation library for Go and Gin web framework

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages