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