You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
// Data access objects layer of model user
|
|
package repositories
|
|
|
|
import (
|
|
"git.devices.local/mawas/golang-api-skeleton/lib/apperrors"
|
|
"git.devices.local/mawas/golang-api-skeleton/lib/cache"
|
|
"git.devices.local/mawas/golang-api-skeleton/lib/common"
|
|
"git.devices.local/mawas/golang-api-skeleton/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type UserDAO struct {
|
|
repo
|
|
}
|
|
|
|
// NewUserDAO create new repository for model user
|
|
func NewUserRepository(db *gorm.DB, userID string, username string, cache cache.Cache) *UserDAO {
|
|
db = db.Set("username", username).Set("userID", userID).Set("cache", cache)
|
|
return &UserDAO{
|
|
repo: repo{
|
|
db: db,
|
|
userID: userID,
|
|
username: username,
|
|
},
|
|
}
|
|
}
|
|
|
|
func (dao *UserDAO) ReadByUsername(username string) (*models.User, error) {
|
|
result := models.User{}
|
|
if err := dao.db.Preload("TokensRef").Where(&models.User{Username: username}).First(&result).Error; err != nil {
|
|
return nil, apperrors.NewError(apperrors.DBError, err.Error())
|
|
}
|
|
return &result, nil
|
|
}
|
|
|
|
func (dao *UserDAO) ReadAll() ([]*models.User, error) {
|
|
var result []*models.User
|
|
if err := dao.db.Preload("TokensRef").Find(&result).Error; err != nil {
|
|
return nil, apperrors.NewError(apperrors.DBError, err.Error())
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (dao *UserDAO) ReadSelection(ids []common.GUID) ([]*models.User, error) {
|
|
var result []*models.User
|
|
if err := dao.db.Preload("TokensRef").Where("id IN (?)", ids).Find(&result).Error; err != nil {
|
|
return nil, apperrors.NewError(apperrors.DBError, err.Error())
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (dao *UserDAO) Create(users []*models.User) ([]*models.User, error) {
|
|
db := dao.db.Begin()
|
|
for i := range users {
|
|
err := db.Create(users[i]).Error
|
|
if err != nil {
|
|
db.Rollback()
|
|
return nil, apperrors.NewError(apperrors.DBError, err.Error())
|
|
}
|
|
}
|
|
db.Commit()
|
|
return users, nil
|
|
}
|