技海泛舟(个人技术研究)

  • 首页
  • 日积月累
  • 学习计划
  • 随想
  • project
  • 关于
技海泛舟
一个技术宅的博客
  1. 首页
  2. 日积月累
  3. go
  4. 正文

Go language single file creation user

2021年11月1日 616点热度
package main

import (
    "fmt"
    "log"
    "math/rand"
    "net/http"
    "time"

    "github.com/gin-gonic/gin"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

type User struct {
    gorm.Model
    Name      string `gorm:"type:varchar(20);not null"`
    Telephone string `gorm:"varchar(11);not null;unique"`
    Password  string `gorm:"size:255;not null"`
}

func main() {
    db := InitDB()

    fmt.Println("hello world")
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.POST("/api/auth/register", func(ctx *gin.Context) {
        // get parameters
        name := ctx.PostForm("name")
        telephone := ctx.PostForm("telephone")
        password := ctx.PostForm("password")

        // data validation
        // gin.H == map[string]interface{}
        // log.Println(name, telephone, password)
        if len(telephone) != 11 {
            ctx.JSON(http.StatusUnprocessableEntity, gin.H{
                "code": 422,
                "msg":  "Mobile phone number must be 11 digits",
            })
            return
        }
        if len(password) < 6 {
            ctx.JSON(http.StatusUnprocessableEntity, gin.H{
                "code": 422,
                "msg":  "The password cannot be less than 6 digits",
            })
            return
        }
        // if there is no name, pass a random 10 bit string.
        if len(name) == 0 {
            name = RandomString(10)
        }
        log.Println(name, telephone, password)

        //determine whether the mobile-phone nember exists
        if isTelephoneExist(db, telephone) {
            ctx.JSON(http.StatusUnprocessableEntity, gin.H{
                "code": 422,
                "msg":  "user is exist",
            })
            return
        }

        //if user is not exist ,then create user
        newUser := User{
            Name:      name,
            Telephone: telephone,
            Password:  password,
        }
        db.Create(&newUser)

        // return results
        ctx.JSON(200, gin.H{
            "message": "success",
        })
    })

    panic(r.Run())

}

func RandomString(n int) string {
    var letters = []byte("QWERRTUIIOOPPDFGGHHJJKKL")
    result := make([]byte, n)

    rand.Seed(time.Now().Unix())
    for i := range result {
        result[i] = letters[rand.Intn(len(letters))]
    }
    return string(result)
}

func InitDB() *gorm.DB {
    // driverName := "mysql"
    host := "your host"
    port := "3306"
    database := "gin_essential"
    username := "gin_essential"
    password := "yourpassword"
    charset := "utf8"
    args := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true&loc=Local",
        username, password, host, port, database, charset)
    db, err := gorm.Open(mysql.Open(args), &gorm.Config{})
    if err != nil {
        panic("failed to connect database,err: " + err.Error())
    }

    // migration schema
    db.AutoMigrate(&User{})
    return db
}

func isTelephoneExist(db *gorm.DB, telephone string) bool {
    var user User
    db.Where("telephone=?", telephone).First(&user)
    if user.ID != 0 {
        return true
    }
    return false
}
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2021年11月1日
< 上一篇
下一篇 >
归档
  • 2024 年 11 月
  • 2024 年 8 月
  • 2024 年 5 月
  • 2024 年 2 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 9 月
  • 2023 年 6 月
  • 2022 年 12 月
  • 2022 年 11 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 8 月
  • 2022 年 7 月
  • 2022 年 6 月
  • 2022 年 5 月
  • 2022 年 4 月
  • 2022 年 3 月
  • 2022 年 2 月
  • 2022 年 1 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 10 月
  • 2021 年 5 月
分类
  • Android
  • Arduino
  • cordova
  • css
  • go
  • html5
  • JavaScript
  • nodejs
  • oracle
  • project
  • system
  • uni-app
  • vscode
  • vue
  • 学习计划
  • 摘抄
  • 随想
最新 热点 随机
最新 热点 随机
windows安装mysql ,VSCODE连接MySQL数据库 创建api的逻辑 观看七战奥运会 德国波尔告别 go utils工具 Go语言中的sort包帮我们实现了对任一类型的数组进行排序。 vue + go安装
学习小鹿线的vue3视频,记录如下 使用PL/SQL将数据进行导出备份和导入恢复 读雷军微博有感 读阮一峰老师-穷忙的人生 这样的程序员创业有戏 接站点餐住宿综合管理平台

COPYRIGHT © 技海泛舟(个人技术研究). 2021-2023. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

黑ICP备19002110号-1

黑公网安备 23060202000432号