package com.iconplus.smartproc.service.roles; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; import com.iconplus.smartproc.model.entity.Menus; import com.iconplus.smartproc.model.entity.Permission; import com.iconplus.smartproc.model.entity.Roles; import com.iconplus.smartproc.model.request.RolesRequest; import com.iconplus.smartproc.model.response.RolesResponse; import com.iconplus.smartproc.repository.MenusRepository; import com.iconplus.smartproc.repository.PermissionRepository; import com.iconplus.smartproc.repository.RolesRepository; import com.iconplus.smartproc.util.Constants; import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Optional; @Service public class PostCreateRoleService implements BaseService { private final MenusRepository menusRepository; private final RolesRepository rolesRepository; private final PermissionRepository permissionRepository; public PostCreateRoleService(RolesRepository rolesRepository, MenusRepository menusRepository, PermissionRepository permissionRepository) { this.rolesRepository = rolesRepository; this.menusRepository = menusRepository; this.permissionRepository = permissionRepository; } @Transactional @Override public RolesResponse execute(RolesRequest input) { Optional role = rolesRepository.findByRoleAndIsDeleteFalse(input.getRole()); if (role.isPresent()) { throw new BusinessException(Constants.ERR_CODE_10006, Constants.ERR_TTL_10006, String.format(Constants.ERR_MSG_10006, input.getRole())); } Roles roles = Roles.builder() .role(input.getRole()) .keterangan(input.getKeterangan()) .isActive(input.getIsActive()) .isDelete(false) .build(); var result = rolesRepository.save(roles); List menusList = menusRepository.findByIsDeleteFalse(); List permissions = new ArrayList<>(); for (Menus menus : menusList) { permissions.add(Permission.builder() .roleId(result.getId()) .menuId(menus.getId()) .canRead(false) .canCreate(false) .canView(false) .canUpdate(false) .canDelete(false) .canDelete(false) .isDelete(false) .build()); } permissionRepository.saveAll(permissions); return RolesResponse.builder() .id(result.getId()) .build(); } }