1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00
wakapi/services/user.go

71 lines
1.4 KiB
Go
Raw Normal View History

2019-05-06 01:40:41 +03:00
package services
import (
2020-05-24 17:34:32 +03:00
"crypto/md5"
"encoding/hex"
2019-05-11 18:49:56 +03:00
"github.com/jinzhu/gorm"
2020-03-31 13:22:17 +03:00
"github.com/muety/wakapi/models"
2020-05-24 17:34:32 +03:00
uuid "github.com/satori/go.uuid"
2019-05-06 01:40:41 +03:00
)
type UserService struct {
2019-05-16 23:53:03 +03:00
Config *models.Config
Db *gorm.DB
2019-05-06 01:40:41 +03:00
}
func NewUserService(db *gorm.DB) *UserService {
return &UserService{
Config: models.GetConfig(),
Db: db,
}
}
2020-02-20 16:28:55 +03:00
2019-05-11 18:49:56 +03:00
func (srv *UserService) GetUserById(userId string) (*models.User, error) {
u := &models.User{}
if err := srv.Db.Where(&models.User{ID: userId}).First(u).Error; err != nil {
2019-05-06 01:40:41 +03:00
return u, err
}
return u, nil
}
2019-05-11 18:49:56 +03:00
func (srv *UserService) GetUserByKey(key string) (*models.User, error) {
u := &models.User{}
if err := srv.Db.Where(&models.User{ApiKey: key}).First(u).Error; err != nil {
2019-05-06 01:40:41 +03:00
return u, err
}
return u, nil
}
func (srv *UserService) GetAll() ([]*models.User, error) {
var users []*models.User
if err := srv.Db.
Table("users").
Find(&users).Error; err != nil {
return nil, err
}
return users, nil
}
2020-05-24 17:34:32 +03:00
func (srv *UserService) CreateOrGet(signup *models.Signup) (*models.User, bool, error) {
pw := md5.Sum([]byte(signup.Password))
pwString := hex.EncodeToString(pw[:])
apiKey := uuid.NewV4().String()
u := &models.User{
ID: signup.Username,
ApiKey: apiKey,
Password: pwString,
}
result := srv.Db.FirstOrCreate(u, &models.User{ID: u.ID})
if err := result.Error; err != nil {
return nil, false, err
}
if result.RowsAffected == 1 {
return u, true, nil
}
return u, false, nil
}