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 }