[Go Revel] MySQLのuniqueなvalidationでredirect

ユーザのsigninの際に、既に同じユーザ名の登録があれば、登録できないようにしたい。

mysql側ではnameにUnique keyをつけている

mysql> describe users;
+———-+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———-+————–+——+—–+———+—————-+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | UNI | NULL | |
| email | varchar(255) | YES | | NULL | |
| password | varchar(255) | YES | | NULL | |
| filepath | varchar(255) | YES | | NULL | |
| message | text | YES | | NULL | |
+———-+————–+——+—–+———+—————-+
6 rows in set (0.01 sec)

これだと、実際に同じnameで入力があった場合、mysql側にはinsertされないが、
ページがそのまま遷移してしまう。
そのため、同じnameの入力があった場合は、入力画面に戻るようにしたい

revelでc.Validation.${} でunique判定が見当たらないので、
実際にselectして、処理する

	result := []models.Users{}
	DB.Where("name = ?", name).First(&result)


	if len(result) != 0 {
		c.Flash.Error("Same username is registered!")
		c.Validation.Keep()
		c.FlashParams()
		return c.Redirect(App.Signin)
	}
	
	hashPassword := getMD5Hash(password)
	DB.Create(&models.Users{
		Name: name,
		Email: email,
		Password: hashPassword,
	})
	
	return c.Render()

これ2時間ぐらいかかった…
go revelとか、documentなさすぎやろ😖😖😖😖