128 lines
3.1 KiB
Go
128 lines
3.1 KiB
Go
package repo
|
|
|
|
import (
|
|
"time"
|
|
|
|
_ "github.com/go-sql-driver/mysql"
|
|
)
|
|
|
|
type User struct {
|
|
Id int64 `json:"id"`
|
|
FirstName string `json:"firstName"`
|
|
LastName string `json:"lastName"`
|
|
EmailAddress string `json:"emailAddress"`
|
|
PhoneNumber string `json:"phoneNumber"`
|
|
Password string `json:"-"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
func AddUser(user User) (int64, error) {
|
|
//TODO: Creating the password needs to be split out so that the temporary password can be emailed to the user as part of their validation email
|
|
// password, err := // auth.GetTempPassword(8)
|
|
// if err != nil {
|
|
// return 0, err
|
|
// }
|
|
|
|
password := "abc123"
|
|
|
|
db := getDB()
|
|
|
|
result, err := db.Exec("INSERT INTO `user` (first_name, last_name, email_address, phone_number, password) VALUES (?, ?, ?, ?, ?)", user.FirstName, user.LastName, user.EmailAddress, user.PhoneNumber, password)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
return result.LastInsertId()
|
|
}
|
|
|
|
func GetUserByEmail(email string) (User, error) {
|
|
db := getDB()
|
|
row := db.QueryRow("SELECT `id`, `first_name`, `last_name`, `email_address`, `phone_number`, `password`, `created_at`, `image_id` FROM `user` WHERE email_address = ?", email)
|
|
u := User{}
|
|
|
|
if err := row.Scan(&u.Id, &u.FirstName, &u.LastName, &u.EmailAddress, &u.PhoneNumber, &u.Password, &u.CreatedAt); err != nil {
|
|
return User{}, err
|
|
}
|
|
|
|
return u, nil
|
|
}
|
|
|
|
func GetUserById(id int64) (User, error) {
|
|
db := getDB()
|
|
row := db.QueryRow("SELECT `id`, `first_name`, `last_name`, `email_address`, `phone_number`, `password`, `created_at`, `image_id` FROM `user` WHERE `id` = ?", id)
|
|
u := User{}
|
|
|
|
if err := row.Scan(&u.Id, &u.FirstName, &u.LastName, &u.EmailAddress, &u.PhoneNumber, &u.Password, &u.CreatedAt); err != nil {
|
|
return User{}, err
|
|
}
|
|
|
|
return u, nil
|
|
}
|
|
|
|
func UpdateUser(u User) error {
|
|
db := getDB()
|
|
|
|
_, err := db.Exec("UPDATE `user` SET `first_name` = ?, `last_name` = ?, `email_address` = ?, `phone_number` = ? where `id` = ?", u.FirstName, u.LastName, u.EmailAddress, u.PhoneNumber, u.Id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func UpdateUserPassword(u User) error {
|
|
db := getDB()
|
|
|
|
_, err := db.Exec("UPDATE `user` SET `password` = ? where `id` = ?", u.Password, u.Id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type UserSession struct {
|
|
UserId int64
|
|
TokenId string
|
|
Expiration time.Time
|
|
}
|
|
|
|
func GetUserSessionById(userId int64) (UserSession, error) {
|
|
db := getDB()
|
|
row := db.QueryRow("SELECT user_id, token_id, expiration FROM `user_session` WHERE user_id = ?", userId)
|
|
|
|
us := UserSession{}
|
|
if err := row.Scan(&us.UserId, &us.TokenId, &us.Expiration); err != nil {
|
|
return UserSession{}, err
|
|
}
|
|
|
|
return us, nil
|
|
}
|
|
|
|
func AddUserSession(session UserSession) error {
|
|
err := DeleteUserSession(session.UserId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
db := getDB()
|
|
|
|
_, err = db.Exec("INSERT INTO `user_session` VALUES (?, ?, ?)", session.UserId, session.TokenId, session.Expiration)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func DeleteUserSession(userId int64) error {
|
|
db := getDB()
|
|
|
|
_, err := db.Exec("DELETE FROM `user_session` WHERE user_id = ?", userId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|