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

// 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
}