Skip to content

Commit 8b34dfb

Browse files
Merge pull request #126 from abhishekmalvadkar/feature/GH-112_role_based_menu_changes
GH- 122 : Implemented dynamic headers
2 parents 1064453 + 9c8b51d commit 8b34dfb

File tree

36 files changed

+709
-98
lines changed

36 files changed

+709
-98
lines changed

.github/workflows/Dev-CI.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ on:
44
push:
55
branches:
66
- '**'
7+
workflow_dispatch:
8+
79
jobs:
810
build:
911
name: Build
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.amalvadkar.ihms.app.enums;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
@RequiredArgsConstructor
7+
@Getter
8+
public enum MenuEnum {
9+
10+
HOLIDAY_OVERVIEW("Holiday_Overview");
11+
12+
private final String code;
13+
14+
}

src/main/java/com/amalvadkar/ihms/app/exceptions/handlers/GlobalExceptionHandler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ public CustomResModel handleResourceNotFoundException(ResourceNotFoundException
2626
return CustomResModel.fail(errorMessages, HttpStatus.NOT_FOUND);
2727
}
2828

29+
@ExceptionHandler(IhmsException.class)
30+
public CustomResModel handleIhmsException(IhmsException ex) {
31+
logException(ex);
32+
List<String> errorMessages = List.of(ex.getMessage());
33+
return CustomResModel.fail(errorMessages, ex.getCode());
34+
}
35+
2936
@ExceptionHandler(Exception.class)
3037
public CustomResModel handleException(Exception ex) {
3138
logException(ex);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.amalvadkar.ihms.app.exceptions.handlers;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public class IhmsException extends RuntimeException{
7+
8+
private final Integer code;
9+
10+
public IhmsException(String message, Integer code) {
11+
super(message);
12+
this.code = code;
13+
}
14+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.amalvadkar.ihms.app.exceptions.handlers;
2+
3+
import org.springframework.http.HttpStatus;
4+
5+
public class UnauthorizedAccessException extends IhmsException{
6+
7+
public UnauthorizedAccessException() {
8+
super("You don't have permission", HttpStatus.FORBIDDEN.value());
9+
}
10+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.amalvadkar.ihms.app.helper;
2+
3+
import com.amalvadkar.ihms.app.mapper.HeaderMapper;
4+
import com.amalvadkar.ihms.app.models.response.HeaderResModel;
5+
import com.amalvadkar.ihms.common.repositories.HeaderMappingRepository;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.stereotype.Component;
8+
9+
import java.util.List;
10+
11+
@Component
12+
@RequiredArgsConstructor
13+
public class HeaderHelper {
14+
15+
private final HeaderMappingRepository headerMappingRepo;
16+
private final HeaderMapper headerMapper;
17+
18+
public List<HeaderResModel> fetchHeaders(Long roleId, Long menuId) {
19+
var headerMappingEntities = headerMappingRepo.findHeadersBasedOnRoleMenu(roleId, menuId);
20+
return headerMapper.toHeaderResModelList(headerMappingEntities);
21+
}
22+
23+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.amalvadkar.ihms.app.helper;
2+
3+
import com.amalvadkar.ihms.app.enums.MenuEnum;
4+
import com.amalvadkar.ihms.app.exceptions.handlers.UnauthorizedAccessException;
5+
import com.amalvadkar.ihms.common.entities.MenuEntity;
6+
import com.amalvadkar.ihms.common.entities.RoleMenuEntity;
7+
import com.amalvadkar.ihms.common.exceptions.ResourceNotFoundException;
8+
import com.amalvadkar.ihms.common.repositories.MenuRepository;
9+
import com.amalvadkar.ihms.common.repositories.RoleMenuRepository;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.stereotype.Component;
12+
13+
@Component
14+
@RequiredArgsConstructor
15+
public class PermissionHelper {
16+
17+
private final RoleMenuRepository roleMenuRepo;
18+
private final MenuRepository menuRepo;
19+
20+
public RoleMenuEntity checkRolePermissionForMenu(Long roleId, MenuEnum menuEnum) {
21+
MenuEntity menuEntity = menuRepo.findActiveMenu(menuEnum.getCode())
22+
.orElseThrow(() -> new ResourceNotFoundException("menu not found"));
23+
return roleMenuRepo.findByRoleIdAndMenuId(menuEntity.getId(), roleId)
24+
.orElseThrow(UnauthorizedAccessException::new);
25+
}
26+
27+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.amalvadkar.ihms.app.mapper;
2+
3+
import com.amalvadkar.ihms.app.models.response.HeaderResModel;
4+
import com.amalvadkar.ihms.common.entities.HeaderConfigEntity;
5+
import com.amalvadkar.ihms.common.entities.HeaderMappingEntity;
6+
import org.springframework.stereotype.Component;
7+
8+
import java.util.List;
9+
10+
@Component
11+
public class HeaderMapper {
12+
13+
public List<HeaderResModel> toHeaderResModelList(List<HeaderMappingEntity> headerMappingEntities){
14+
return headerMappingEntities.stream()
15+
.map(HeaderMapper::toHeaderResModel)
16+
.toList();
17+
}
18+
19+
private static HeaderResModel toHeaderResModel(HeaderMappingEntity headerMappingEntity) {
20+
HeaderResModel headerResModel = new HeaderResModel();
21+
22+
HeaderConfigEntity headerConfigEntity = headerMappingEntity.getHeaderConfigEntity();
23+
headerResModel.setHeaderConfigId(headerConfigEntity.getId());
24+
headerResModel.setBlankable(headerMappingEntity.getHeaderConfigEntity().getBlankable());
25+
headerResModel.setField(headerConfigEntity.getMappingName());
26+
headerResModel.setType(headerConfigEntity.getHeaderType());
27+
headerResModel.setEditable(headerMappingEntity.getEditable());
28+
headerResModel.setSortable(headerConfigEntity.getSortable());
29+
headerResModel.setConfirmNeed(headerConfigEntity.getConfirmNeed());
30+
headerResModel.setDisplayName(headerConfigEntity.getHeaderName());
31+
32+
return headerResModel;
33+
}
34+
35+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.amalvadkar.ihms.app.models.response;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class HeaderResModel {
7+
private String field;
8+
private String displayName;
9+
private boolean sortable;
10+
private boolean blankable;
11+
private String type;
12+
private boolean confirmNeed;
13+
private boolean editable;
14+
private Long headerConfigId;
15+
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.amalvadkar.ihms.feedback.models.request;
22

3-
import jakarta.validation.constraints.NotEmpty;
3+
import jakarta.validation.constraints.NotNull;
44

55
public record CheckFeedbackStatusReqModel(
6-
@NotEmpty(message = "feedbackId is required")
7-
String feedbackId
6+
@NotNull(message = "feedbackId is required")
7+
Long feedbackId
88
) {}

0 commit comments

Comments
 (0)