package com.iconplus.smartproc.service.permission; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.model.EmptyResponse; 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.ListPermissionRequest; import com.iconplus.smartproc.model.request.PermissionRequest; 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.http.HttpStatus; import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.util.ArrayList; import java.util.List; @Service public class PutUpdatePermissionService implements BaseService { private PermissionRepository permissionRepository; private MenusRepository menusRepository; private RolesRepository rolesRepository; public PutUpdatePermissionService(PermissionRepository permissionRepository, MenusRepository menusRepository, RolesRepository rolesRepository) { this.permissionRepository = permissionRepository; this.menusRepository = menusRepository; this.rolesRepository = rolesRepository; } @Transactional @Override public EmptyResponse execute(ListPermissionRequest input) { Roles role = rolesRepository.findByIdAndIsDeleteFalse(input.getRoleId()) .orElseThrow(() -> new BusinessException(Constants.ERR_CODE_10005, Constants.ERR_TTL_10005, String.format(Constants.ERR_MSG_10005, input.getRoleId()))); List permissionList = new ArrayList<>(); for (PermissionRequest permissionRequest : input.getData()) { Permission permission = getPermission(permissionRequest, role); permissionList.add(permission); } permissionRepository.saveAll(permissionList); return new EmptyResponse(); } public Menus findMenuById(Long menuId) { var menus = menusRepository.findByIdAndIsDeleteFalse(menuId); if (menus.isEmpty()) { throw new BusinessException(HttpStatus.CONFLICT, "err", "err", "err"); } return menus.get(); } private Permission getPermission(PermissionRequest permissionRequest, Roles roles) { var permission = permissionRepository.findByRoleIdAndMenuIdAndIsDeleteFalse(roles.getId(), permissionRequest.getMenuId()); if (permission.isPresent()) { permission.get().setCanView(permissionRequest.getCanView()); permission.get().setCanRead(permissionRequest.getCanRead()); permission.get().setCanCreate(permissionRequest.getCanCreate()); permission.get().setCanUpdate(permissionRequest.getCanUpdate()); permission.get().setCanDelete(permissionRequest.getCanDelete()); return permission.get(); } else { return Permission.builder() .roleId(roles.getId()) .menuId(permissionRequest.getMenuId()) .canView(permissionRequest.getCanView()) .canRead(permissionRequest.getCanRead()) .canCreate(permissionRequest.getCanCreate()) .canUpdate(permissionRequest.getCanUpdate()) .canDelete(permissionRequest.getCanDelete()) .isDelete(false) .build(); } } }