add permission logic
This commit is contained in:
		| @@ -14,6 +14,7 @@ import javax.persistence.*; | ||||
| @Builder | ||||
| @AllArgsConstructor | ||||
| @NoArgsConstructor | ||||
| @Entity | ||||
| @Table(name = "permission") | ||||
| public class Permission extends BaseEntity { | ||||
|  | ||||
| @@ -32,6 +33,10 @@ public class Permission extends BaseEntity { | ||||
|     @Type(type = "org.hibernate.type.NumericBooleanType") | ||||
|     private Boolean canView; | ||||
|  | ||||
|     @Column(name = "can_create") | ||||
|     @Type(type = "org.hibernate.type.NumericBooleanType") | ||||
|     private Boolean canCreate; | ||||
|  | ||||
|     @Column(name = "can_read") | ||||
|     @Type(type = "org.hibernate.type.NumericBooleanType") | ||||
|     private Boolean canRead; | ||||
|   | ||||
| @@ -0,0 +1,29 @@ | ||||
| package com.iconplus.smartproc.model.projection; | ||||
|  | ||||
| public interface PermissionView { | ||||
|  | ||||
|     Long getParentId(); | ||||
|     void setParentId(Long parentId); | ||||
|  | ||||
|     Long getMenuId(); | ||||
|     void setMenuId(Long menuId); | ||||
|  | ||||
|     String getNama(); | ||||
|     void setNama(String nama); | ||||
|  | ||||
|     Boolean getCanView(); | ||||
|     void setCanView(Boolean canView); | ||||
|  | ||||
|     Boolean getCanRead(); | ||||
|     void setCanRead(Boolean canRead); | ||||
|  | ||||
|     Boolean getCanUpdate(); | ||||
|     void setCanUpdate(Boolean canUpdate); | ||||
|  | ||||
|     Boolean getCanDelete(); | ||||
|     void setCanDelete(Boolean canDelete); | ||||
|  | ||||
|     Boolean getCanCreate(); | ||||
|     void setCanCreate(Boolean canCreate); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,24 @@ | ||||
| package com.iconplus.smartproc.model.response; | ||||
|  | ||||
| import com.iconplus.smartproc.helper.base.BaseResponse; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| @Data | ||||
| @Builder | ||||
| @AllArgsConstructor | ||||
| @NoArgsConstructor | ||||
| public class PermissionResponse extends BaseResponse { | ||||
|  | ||||
|     private Long id; | ||||
|     private Long parentId; | ||||
|     private Long menuId; | ||||
|     private String menu; | ||||
|     private Boolean canView; | ||||
|     private Boolean canCreate; | ||||
|     private Boolean canRead; | ||||
|     private Boolean canDelete; | ||||
|     private Boolean canUpdate; | ||||
| } | ||||
| @@ -6,6 +6,8 @@ import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| @Data | ||||
| @Builder | ||||
| @AllArgsConstructor | ||||
| @@ -17,5 +19,7 @@ public class RolesResponse extends BaseResponse { | ||||
|     private String keterangan; | ||||
|     private Boolean isActive; | ||||
|     private Boolean isDelete; | ||||
|     private List<PermissionResponse> permission; | ||||
|  | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,13 @@ | ||||
| package com.iconplus.smartproc.repository; | ||||
|  | ||||
| import com.iconplus.smartproc.model.entity.Menus; | ||||
| import org.springframework.data.jpa.repository.JpaRepository; | ||||
| import org.springframework.stereotype.Repository; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| @Repository | ||||
| public interface MenusRepository extends JpaRepository<Menus, Long> { | ||||
|  | ||||
|     List<Menus> findByIsDeleteFalse(); | ||||
| } | ||||
| @@ -0,0 +1,28 @@ | ||||
| package com.iconplus.smartproc.repository; | ||||
|  | ||||
| import com.iconplus.smartproc.model.entity.Permission; | ||||
| import com.iconplus.smartproc.model.projection.PermissionView; | ||||
| import org.springframework.data.jpa.repository.JpaRepository; | ||||
| import org.springframework.data.jpa.repository.Query; | ||||
| import org.springframework.stereotype.Repository; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| @Repository | ||||
| public interface PermissionRepository extends JpaRepository<Permission, Long> { | ||||
|  | ||||
|     @Query(value = "SELECT m.parentId as parentId, " + | ||||
|             "p.menuId as menuId, " + | ||||
|             "m.nama as nama, " + | ||||
|             "p.canView as canView, " + | ||||
|             "p.canCreate as canCreate, " + | ||||
|             "p.canUpdate as canUpdate, " + | ||||
|             "p.canDelete as canDelete, " + | ||||
|             "p.canRead as canRead " + | ||||
|             "FROM Permission p " + | ||||
|             "JOIN Menus m ON m.id = p.menuId " + | ||||
|             "WHERE p.isDelete = false " + | ||||
|             "AND m.isDelete = false " + | ||||
|             "AND p.roleId = :roleId") | ||||
|     List<PermissionView> getAllPermissionsByRoleId(Long roleId); | ||||
| } | ||||
| @@ -3,18 +3,27 @@ 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.Roles; | ||||
| import com.iconplus.smartproc.model.projection.PermissionView; | ||||
| import com.iconplus.smartproc.model.request.RolesRequest; | ||||
| import com.iconplus.smartproc.model.response.PermissionResponse; | ||||
| import com.iconplus.smartproc.model.response.RolesResponse; | ||||
| import com.iconplus.smartproc.repository.PermissionRepository; | ||||
| import com.iconplus.smartproc.repository.RolesRepository; | ||||
| import com.iconplus.smartproc.util.Constants; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| @Service | ||||
| public class GetRoleByIdService implements BaseService<RolesRequest, RolesResponse> { | ||||
|  | ||||
|     private final RolesRepository rolesRepository; | ||||
|     public GetRoleByIdService(RolesRepository rolesRepository) { | ||||
|     private PermissionRepository permissionRepository; | ||||
|     public GetRoleByIdService(RolesRepository rolesRepository, | ||||
|                               PermissionRepository permissionRepository) { | ||||
|         this.rolesRepository = rolesRepository; | ||||
|         this.permissionRepository = permissionRepository; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -25,12 +34,28 @@ public class GetRoleByIdService implements BaseService<RolesRequest, RolesRespon | ||||
|                         Constants.ERR_TTL_10005, | ||||
|                         String.format(Constants.ERR_MSG_10005, input.getId()))); | ||||
|  | ||||
|         List<PermissionResponse> permissionResponses = new ArrayList<>(); | ||||
|         List<PermissionView> permissionViews = permissionRepository.getAllPermissionsByRoleId(role.getId()); | ||||
|         for (PermissionView permissionView : permissionViews) { | ||||
|             permissionResponses.add(PermissionResponse.builder() | ||||
|                     .parentId(permissionView.getParentId()) | ||||
|                     .menuId(permissionView.getMenuId()) | ||||
|                     .menu(permissionView.getNama()) | ||||
|                     .canView(permissionView.getCanView()) | ||||
|                     .canCreate(permissionView.getCanCreate()) | ||||
|                     .canRead(permissionView.getCanRead()) | ||||
|                     .canUpdate(permissionView.getCanUpdate()) | ||||
|                     .canDelete(permissionView.getCanDelete()) | ||||
|                     .build()); | ||||
|         } | ||||
|  | ||||
|         return RolesResponse.builder() | ||||
|                 .id(role.getId()) | ||||
|                 .role(role.getRole()) | ||||
|                 .keterangan(role.getKeterangan()) | ||||
|                 .isActive(role.getIsActive()) | ||||
|                 .isDelete(role.getIsDelete()) | ||||
|                 .permission(permissionResponses) | ||||
|                 .build(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -2,23 +2,37 @@ 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<RolesRequest, RolesResponse> { | ||||
|  | ||||
|     private final MenusRepository menusRepository; | ||||
|     private final RolesRepository rolesRepository; | ||||
|     public PostCreateRoleService(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) { | ||||
|  | ||||
| @@ -37,6 +51,25 @@ public class PostCreateRoleService implements BaseService<RolesRequest, RolesRes | ||||
|                 .build(); | ||||
|         var result = rolesRepository.save(roles); | ||||
|  | ||||
|          List<Menus> menusList = menusRepository.findByIsDeleteFalse(); | ||||
|  | ||||
|         List<Permission> 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(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user