Skip to content

Instantly share code, notes, and snippets.

@nl5887
Created August 1, 2015 08:52
Show Gist options
  • Select an option

  • Save nl5887/be88f07b65f880852477 to your computer and use it in GitHub Desktop.

Select an option

Save nl5887/be88f07b65f880852477 to your computer and use it in GitHub Desktop.
package model
import (
"time"
"github.com/jmoiron/sqlx"
db "db"
utils "utils"
)
type User struct {
UserId utils.UUID `db:"user_id"`
Username string `db:"username"`
Email string `db:"email"`
EmailConfirmed bool `db:"email_confirmed"`
FirstName string `db:"first_name"`
LastName string `db:"last_name"`
AvatarUrl string `db:"avatar_url"`
CreationDate time.Time `db:"creation_date"`
LastLoginDate *time.Time `db:"last_login_date"`
Password []byte `db:"password"`
}
var (
queryUserByUsername db.Query = "SELECT user_id, email, email_confirmed, password, first_name, last_name, last_login_date, avatar_url, creation_date, username FROM users WHERE username=?"
queryUserByUserId db.Query = "SELECT user_id, email, email_confirmed, password, first_name, last_name, last_login_date, avatar_url, creation_date, username FROM users WHERE user_id=?"
queryUserByTokenAndTokenType db.Query = "SELECT u.user_id, u.email, u.email_confirmed, u.password, u.first_name, u.last_name, u.last_login_date, u.avatar_url, u.creation_date, u.username FROM users u INNER JOIN tokens t ON u.user_id = t.user_id WHERE t.token=? AND t.type=?"
queryUserUpdate db.Query = `UPDATE users SET username=:username, email=:email, email_confirmed=:email_confirmed, first_name=:first_name, last_name=:last_name, avatar_url=:avatar_url, last_login_date=:last_login_date, password=:password WHERE user_id=:user_id`
queryUserInsert db.Query = `INSERT INTO users (user_id, username, email, email_confirmed, first_name, last_name, avatar_url, creation_date, last_login_date, password) VALUES (:user_id, :username, :email, :email_confirmed, :first_name, :last_name, :avatar_url, :creation_date, :last_login_date, :password)`
)
func QueryUserByTokenAndTokenType(token string, t TokenType) db.Queryx {
return db.Queryx{
Query: queryUserByTokenAndTokenType,
Params: []interface{}{token, t},
}
}
func QueryUserByUserId(userid utils.UUID) db.Queryx {
return db.Queryx{
Query: queryUserByUserId,
Params: []interface{}{userid.String()},
}
}
func QueryUserByUsername(username string) db.Queryx {
return db.Queryx{
Query: queryUserByUsername,
Params: []interface{}{username},
}
}
func NewUser() *User {
now := time.Now()
return &User{UserId: utils.NewUUID(), CreationDate: time.Now(), LastLoginDate: &now}
}
func (s *User) Update(tx *sqlx.Tx) error {
_, err := tx.NamedExec(string(queryUserUpdate), s)
return err
}
func (s *User) Insert(tx *sqlx.Tx) error {
_, err := tx.NamedExec(string(queryUserInsert), s)
return err
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment