99 lines
2.9 KiB
Go
Raw Normal View History

2023-10-08 15:59:42 +07:00
package auth
import (
"context"
"errors"
"fmt"
"go.uber.org/zap"
"gorm.io/gorm"
"furtuna-be/internal/common/logger"
"furtuna-be/internal/entity"
)
type AuthRepository struct {
db *gorm.DB
}
func NewAuthRepository(db *gorm.DB) *AuthRepository {
return &AuthRepository{
db: db,
}
}
func (r *AuthRepository) CheckExistsUserAccount(ctx context.Context, email string) (*entity.UserDB, error) {
var user entity.UserDB
err := r.db.
Table("users").
2024-07-23 01:36:25 +07:00
Select("users.*, user_roles.role_id, user_roles.partner_id, user_roles.site_id,"+
" sites.name, roles.role_name, partners.name as partner_name, partners.status as partner_status, users.reset_password").
2023-10-08 15:59:42 +07:00
Where("users.email = ?", email).
Joins("left join user_roles on users.id = user_roles.user_id").
Joins("left join roles on user_roles.role_id = roles.role_id").
Joins("left join partners on user_roles.partner_id = partners.id").
2024-07-12 02:29:18 +07:00
Joins("left join sites on user_roles.site_id = sites.id").
2023-10-08 15:59:42 +07:00
First(&user).Error
2024-06-03 14:40:50 +07:00
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
2023-10-08 15:59:42 +07:00
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, fmt.Errorf("user with email %s does not exist", email) // or use a custom error type
}
logger.ContextLogger(ctx).Error(fmt.Sprintf("Failed to get user with email: %s", email), zap.Error(err))
return nil, err
}
return &user, nil
}
2024-07-23 01:36:25 +07:00
func (r *AuthRepository) CheckExistsUserAccountByID(ctx context.Context, userID int64) (*entity.UserDB, error) {
var user entity.UserDB
err := r.db.
Table("users").
Select("users.*, user_roles.role_id, user_roles.partner_id, user_roles.site_id, sites.name, roles.role_name, partners.name as partner_name, partners.status as partner_status").
Where("users.id = ?", userID).
Joins("left join user_roles on users.id = user_roles.user_id").
Joins("left join roles on user_roles.role_id = roles.role_id").
Joins("left join partners on user_roles.partner_id = partners.id").
Joins("left join sites on user_roles.site_id = sites.id").
First(&user).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, fmt.Errorf("user with not exist") // or use a custom error type
}
logger.ContextLogger(ctx).Error(fmt.Sprintf("Failed to get user"), zap.Error(err))
return nil, err
}
return &user, nil
}
func (r *AuthRepository) UpdatePassword(ctx context.Context, trx *gorm.DB, newHashedPassword string, userID int64, resetPassword bool) error {
// Perform the update using a single Updates call
err := trx.Model(&entity.UserDB{}).
Where("id = ?", userID).
Updates(map[string]interface{}{
"password": newHashedPassword,
"reset_password": resetPassword,
}).Error
if err != nil {
logger.ContextLogger(ctx).Error(fmt.Sprintf("Failed to update password for user with id: %d", userID), zap.Error(err))
return err
}
return nil
}