package user import ( "errors" "log" "github.com/google/uuid" ) func (env *Env) createSession(user *User) (string, error) { var newSession Session newSession.UserID = user.ID newSession.SessionToken = uuid.New().String() err := env.DB.Create(&newSession).Error if err != nil { log.Println(err) return "", errors.New("failed write to database") } return newSession.SessionToken, nil } func (env *Env) getUserFromSessionToken(sessionToken string) (*User, error) { var currUser User err := env.DB.Table("sessions").Select("users.*").Joins("left join users on users.id = sessions.user_id").Where("sessions.session_token = ?", sessionToken).First(&currUser).Error if err != nil { log.Println(err) return nil, errors.New("failed get user") } err = env.DB.Preload("Profile").Where(&currUser).First(&currUser).Error if err != nil { log.Println(err) return nil, errors.New("failed get user") } return &currUser, nil } func (env *Env) logout(sessionToken string) error { var currSession Session err := env.DB.Where(&Session{SessionToken: sessionToken}).First(&currSession).Error if err != nil { log.Println(err) return errors.New("failed get session") } err = env.DB.Delete(&currSession).Error if err != nil { log.Println(err) return errors.New("failed to logout") } return nil }