84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package usecase
|
|
|
|
import (
|
|
"time"
|
|
"users_management/m/model/entity"
|
|
"users_management/m/repository"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type UsersUsecase interface {
|
|
GetRoleByDepartment(departmentName string) (uuid.UUID, error)
|
|
GetUserByUsername(username string) (entity.User, error)
|
|
GetUserByNomorInduk(nomorInduk string) (entity.User, error) // Add this
|
|
CreateUserFromExternal(nomorInduk, name, roleName string) error // Add this
|
|
UpdateUserRole(nomorInduk, roleName string) error // Add this
|
|
GetAllUsers() ([]entity.User, error) // Add this
|
|
}
|
|
|
|
type usersUsecase struct {
|
|
userRepo repository.UsersRepo
|
|
}
|
|
|
|
func NewUsersUsecase(userRepo repository.UsersRepo) UsersUsecase {
|
|
return &usersUsecase{
|
|
userRepo: userRepo,
|
|
}
|
|
}
|
|
|
|
func (u *usersUsecase) GetRoleByDepartment(departmentName string) (uuid.UUID, error) {
|
|
role, err := u.userRepo.GetRoleByDepartment(departmentName)
|
|
if err != nil {
|
|
return uuid.Nil, err
|
|
}
|
|
return role.Id, nil
|
|
}
|
|
|
|
func (u *usersUsecase) GetUserByUsername(username string) (entity.User, error) {
|
|
users, err := u.userRepo.GetUserByUsername(username)
|
|
if err != nil {
|
|
return users, err
|
|
}
|
|
return users, nil
|
|
}
|
|
|
|
// New methods for RBAC
|
|
func (u *usersUsecase) GetUserByNomorInduk(nomorInduk string) (entity.User, error) {
|
|
return u.userRepo.GetUserByNomorInduk(nomorInduk)
|
|
}
|
|
|
|
func (u *usersUsecase) CreateUserFromExternal(nomorInduk, name, roleName string) error {
|
|
// Get role ID
|
|
roleID, err := u.GetRoleByDepartment(roleName)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Create user
|
|
user := entity.User{
|
|
ID: uuid.New(),
|
|
NomorInduk: &nomorInduk,
|
|
RoleID: roleID,
|
|
Name: name,
|
|
Username: nomorInduk, // Use nomor_induk as username
|
|
Password: "", // External auth, no local password needed
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
|
|
return u.userRepo.CreateUserFromExternal(user)
|
|
}
|
|
|
|
func (u *usersUsecase) UpdateUserRole(nomorInduk, roleName string) error {
|
|
roleID, err := u.GetRoleByDepartment(roleName)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return u.userRepo.UpdateUserRole(nomorInduk, roleID)
|
|
}
|
|
|
|
func (u *usersUsecase) GetAllUsers() ([]entity.User, error) {
|
|
return u.userRepo.GetAllUsers()
|
|
} |