generator-nokode 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +214 -0
  2. package/generators/app/index.js +116 -0
  3. package/generators/app/templates/.gradle/9.0.0/checksums/checksums.lock +0 -0
  4. package/generators/app/templates/.gradle/9.0.0/fileChanges/last-build.bin +0 -0
  5. package/generators/app/templates/.gradle/9.0.0/fileHashes/fileHashes.lock +0 -0
  6. package/generators/app/templates/.gradle/9.0.0/gc.properties +0 -0
  7. package/generators/app/templates/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  8. package/generators/app/templates/.gradle/buildOutputCleanup/cache.properties +2 -0
  9. package/generators/app/templates/.gradle/vcs-1/gc.properties +0 -0
  10. package/generators/app/templates/01-code/NokodeSampleApplication.java +13 -0
  11. package/generators/app/templates/01-code/config/AuthConfig.java +10 -0
  12. package/generators/app/templates/01-code/config/CloudStorageConfig.java +30 -0
  13. package/generators/app/templates/01-code/config/MongoConfig.java +43 -0
  14. package/generators/app/templates/01-code/config/NotificationConfig.java +47 -0
  15. package/generators/app/templates/01-code/config/PantherCrudBeans.java +33 -0
  16. package/generators/app/templates/01-code/config/ShedlockConfig.java +24 -0
  17. package/generators/app/templates/01-code/config/WebConfig.java +38 -0
  18. package/generators/app/templates/01-code/config/annotations/AppAuth.java +24 -0
  19. package/generators/app/templates/01-code/config/audit/UserAuditing.java +29 -0
  20. package/generators/app/templates/01-code/config/constants/PantherCrudConstants.java +24 -0
  21. package/generators/app/templates/01-code/config/converters/BsonDocumentToJsonNodeConverter.java +31 -0
  22. package/generators/app/templates/01-code/config/converters/JsonNodeToBsonDocumentConverter.java +32 -0
  23. package/generators/app/templates/01-code/config/converters/ModuleDefinitionDeserializer.java +25 -0
  24. package/generators/app/templates/01-code/config/converters/ModulePermissionDefinitionModule.java +16 -0
  25. package/generators/app/templates/01-code/config/converters/PermissionDefinitionDeserializer.java +25 -0
  26. package/generators/app/templates/01-code/config/converters/StringToModuleDefinitionConverter.java +26 -0
  27. package/generators/app/templates/01-code/config/converters/StringToPermissionDefinitionConverter.java +26 -0
  28. package/generators/app/templates/01-code/config/exception/RestExceptionHandlerService.java +14 -0
  29. package/generators/app/templates/01-code/config/init/ApplicationInit.java +31 -0
  30. package/generators/app/templates/01-code/config/init/DataBuilderService.java +22 -0
  31. package/generators/app/templates/01-code/config/init/UserAndRoleInitService.java +71 -0
  32. package/generators/app/templates/01-code/config/interceptors/AuthInterceptor.java +25 -0
  33. package/generators/app/templates/01-code/config/interceptors/CorsFilterConfig.java +28 -0
  34. package/generators/app/templates/01-code/config/interceptors/LocaleInterceptor.java +26 -0
  35. package/generators/app/templates/01-code/config/interceptors/RequestContextInterceptor.java +26 -0
  36. package/generators/app/templates/01-code/config/openapi/OpenAPIConfig.java +48 -0
  37. package/generators/app/templates/01-code/role/domain/Role.java +21 -0
  38. package/generators/app/templates/01-code/role/dto/RoleCreateDto.java +31 -0
  39. package/generators/app/templates/01-code/role/dto/RoleDetailDto.java +31 -0
  40. package/generators/app/templates/01-code/role/dto/RoleSearchDto.java +30 -0
  41. package/generators/app/templates/01-code/role/enums/ModuleEnum.java +9 -0
  42. package/generators/app/templates/01-code/role/enums/PermissionEnum.java +9 -0
  43. package/generators/app/templates/01-code/role/mapper/RoleCreateDtoMapper.java +19 -0
  44. package/generators/app/templates/01-code/role/mapper/RoleDetailDtoMapper.java +19 -0
  45. package/generators/app/templates/01-code/role/mapper/RoleSearchDtoMapper.java +19 -0
  46. package/generators/app/templates/01-code/role/repository/RoleRepository.java +11 -0
  47. package/generators/app/templates/01-code/role/service/RoleCrudService.java +36 -0
  48. package/generators/app/templates/01-code/user/domain/User.java +32 -0
  49. package/generators/app/templates/01-code/user/dto/EmailLoginDto.java +42 -0
  50. package/generators/app/templates/01-code/user/dto/ResetEmailPasswordDto.java +31 -0
  51. package/generators/app/templates/01-code/user/dto/UserCreateDto.java +29 -0
  52. package/generators/app/templates/01-code/user/dto/UserDetailDto.java +25 -0
  53. package/generators/app/templates/01-code/user/dto/UserSearchDto.java +25 -0
  54. package/generators/app/templates/01-code/user/dto/UserSignupDto.java +37 -0
  55. package/generators/app/templates/01-code/user/mapper/UserCreateDtoMapper.java +19 -0
  56. package/generators/app/templates/01-code/user/mapper/UserDetailDtoMapper.java +19 -0
  57. package/generators/app/templates/01-code/user/mapper/UserSearchDtoMapper.java +19 -0
  58. package/generators/app/templates/01-code/user/mapper/UserSignupDtoMapper.java +21 -0
  59. package/generators/app/templates/01-code/user/repository/UserRepository.java +10 -0
  60. package/generators/app/templates/01-code/user/service/UserCrudService.java +70 -0
  61. package/generators/app/templates/02-test-code/NokodeSampleApplicationTests.java +13 -0
  62. package/generators/app/templates/03-main-resources/META-INF/additional-spring-configuration-metadata.json +34 -0
  63. package/generators/app/templates/03-main-resources/application.properties +21 -0
  64. package/generators/app/templates/build.gradle +104 -0
  65. package/generators/app/templates/build.sh +7 -0
  66. package/generators/app/templates/gradle/wrapper/gradle-wrapper.jar +0 -0
  67. package/generators/app/templates/gradle/wrapper/gradle-wrapper.properties +7 -0
  68. package/generators/app/templates/gradlew +252 -0
  69. package/generators/app/templates/gradlew.bat +94 -0
  70. package/generators/app/templates/settings.gradle +1 -0
  71. package/generators/base-generator.js +70 -0
  72. package/generators/constants.js +14 -0
  73. package/index.js +74 -0
  74. package/package.json +42 -0
@@ -0,0 +1,31 @@
1
+ package <%= packageName %>.config.converters;
2
+
3
+ import org.bson.Document;
4
+ import org.springframework.core.convert.converter.Converter;
5
+ import org.springframework.data.convert.ReadingConverter;
6
+
7
+ import com.fasterxml.jackson.core.JsonProcessingException;
8
+ import com.fasterxml.jackson.databind.JsonNode;
9
+ import com.fasterxml.jackson.databind.ObjectMapper;
10
+
11
+ import lombok.RequiredArgsConstructor;
12
+
13
+ @ReadingConverter
14
+ @RequiredArgsConstructor
15
+ public class BsonDocumentToJsonNodeConverter implements Converter<Document, JsonNode> {
16
+
17
+ private final ObjectMapper objectMapper;
18
+
19
+ @Override
20
+ public JsonNode convert(Document document) {
21
+ if (document == null) {
22
+ return null;
23
+ }
24
+ try {
25
+ return objectMapper.readTree(document.toJson()); // Convert BSON to JsonNode
26
+ } catch (JsonProcessingException e) {
27
+ throw new RuntimeException("Error converting BSON Document to JsonNode", e);
28
+ }
29
+ }
30
+
31
+ }
@@ -0,0 +1,32 @@
1
+ package <%= packageName %>.config.converters;
2
+
3
+ import org.bson.Document;
4
+ import org.springframework.core.convert.converter.Converter;
5
+ import org.springframework.data.convert.WritingConverter;
6
+
7
+ import com.fasterxml.jackson.core.JsonProcessingException;
8
+ import com.fasterxml.jackson.databind.JsonNode;
9
+ import com.fasterxml.jackson.databind.ObjectMapper;
10
+
11
+ import lombok.RequiredArgsConstructor;
12
+
13
+ @WritingConverter
14
+ @RequiredArgsConstructor
15
+ public class JsonNodeToBsonDocumentConverter implements Converter<JsonNode, Document> {
16
+
17
+ private final ObjectMapper objectMapper;
18
+
19
+ @Override
20
+ public Document convert(JsonNode node) {
21
+ if (node == null) {
22
+ return null;
23
+ }
24
+ try {
25
+ String jsonString = objectMapper.writeValueAsString(node);
26
+ return Document.parse(jsonString); // Convert to BSON Document
27
+ } catch (JsonProcessingException e) {
28
+ throw new RuntimeException("Error converting JsonNode to BSON Document", e);
29
+ }
30
+ }
31
+
32
+ }
@@ -0,0 +1,25 @@
1
+ package <%= packageName %>.config.converters;
2
+
3
+ import java.io.IOException;
4
+
5
+ import com.fasterxml.jackson.core.JsonParser;
6
+ import com.fasterxml.jackson.databind.DeserializationContext;
7
+ import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
8
+ import com.sixsprints.core.auth.ModuleDefinition;
9
+
10
+ import <%= packageName %>.role.enums.ModuleEnum;
11
+
12
+ public class ModuleDefinitionDeserializer extends StdDeserializer<ModuleDefinition> {
13
+
14
+ private static final long serialVersionUID = 1L;
15
+
16
+ public ModuleDefinitionDeserializer() {
17
+ super(ModuleDefinition.class);
18
+ }
19
+
20
+ @Override
21
+ public ModuleDefinition deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException {
22
+ return jsonParser.readValueAs(ModuleEnum.class);
23
+ }
24
+
25
+ }
@@ -0,0 +1,16 @@
1
+ package <%= packageName %>.config.converters;
2
+
3
+ import com.fasterxml.jackson.databind.module.SimpleModule;
4
+ import com.sixsprints.core.auth.ModuleDefinition;
5
+ import com.sixsprints.core.auth.PermissionDefinition;
6
+
7
+ public class ModulePermissionDefinitionModule extends SimpleModule {
8
+
9
+ private static final long serialVersionUID = 1L;
10
+
11
+ {
12
+ addDeserializer(ModuleDefinition.class, new ModuleDefinitionDeserializer());
13
+ addDeserializer(PermissionDefinition.class, new PermissionDefinitionDeserializer());
14
+ }
15
+
16
+ }
@@ -0,0 +1,25 @@
1
+ package <%= packageName %>.config.converters;
2
+
3
+ import java.io.IOException;
4
+
5
+ import com.fasterxml.jackson.core.JsonParser;
6
+ import com.fasterxml.jackson.databind.DeserializationContext;
7
+ import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
8
+ import com.sixsprints.core.auth.PermissionDefinition;
9
+
10
+ import <%= packageName %>.role.enums.PermissionEnum;
11
+
12
+ public class PermissionDefinitionDeserializer extends StdDeserializer<PermissionDefinition> {
13
+
14
+ private static final long serialVersionUID = 1L;
15
+
16
+ public PermissionDefinitionDeserializer() {
17
+ super(PermissionDefinition.class);
18
+ }
19
+
20
+ @Override
21
+ public PermissionDefinition deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException {
22
+ return jsonParser.readValueAs(PermissionEnum.class);
23
+ }
24
+
25
+ }
@@ -0,0 +1,26 @@
1
+ package <%= packageName %>.config.converters;
2
+
3
+ import org.springframework.core.convert.converter.Converter;
4
+ import org.springframework.data.convert.ReadingConverter;
5
+
6
+ import com.sixsprints.core.auth.ModuleDefinition;
7
+ import com.sixsprints.core.exception.BaseRuntimeException;
8
+
9
+ import <%= packageName %>.role.enums.ModuleEnum;
10
+
11
+ @ReadingConverter
12
+ public class StringToModuleDefinitionConverter implements Converter<String, ModuleDefinition> {
13
+
14
+ @Override
15
+ public ModuleDefinition convert(String source) {
16
+ try {
17
+ return ModuleEnum.valueOf(source);
18
+ } catch (Exception e) {
19
+ throw BaseRuntimeException.builder()
20
+ .error("Unable to convert {0} to desired class type.")
21
+ .argument(source)
22
+ .build();
23
+ }
24
+ }
25
+
26
+ }
@@ -0,0 +1,26 @@
1
+ package <%= packageName %>.config.converters;
2
+
3
+ import org.springframework.core.convert.converter.Converter;
4
+ import org.springframework.data.convert.ReadingConverter;
5
+
6
+ import com.sixsprints.core.auth.PermissionDefinition;
7
+ import com.sixsprints.core.exception.BaseRuntimeException;
8
+
9
+ import <%= packageName %>.role.enums.PermissionEnum;
10
+
11
+ @ReadingConverter
12
+ public class StringToPermissionDefinitionConverter implements Converter<String, PermissionDefinition> {
13
+
14
+ @Override
15
+ public PermissionDefinition convert(String source) {
16
+ try {
17
+ return PermissionEnum.valueOf(source);
18
+ } catch (Exception e) {
19
+ throw BaseRuntimeException.builder()
20
+ .error("Unable to convert {0} to desired class type.")
21
+ .argument(source)
22
+ .build();
23
+ }
24
+ }
25
+
26
+ }
@@ -0,0 +1,14 @@
1
+ package <%= packageName %>.config.exception;
2
+
3
+ import org.springframework.web.bind.annotation.ControllerAdvice;
4
+ import org.springframework.context.MessageSource;
5
+ import com.sixsprints.core.utils.RestExceptionHandler;
6
+
7
+ @ControllerAdvice
8
+ public class RestExceptionHandlerService extends RestExceptionHandler {
9
+
10
+ public RestExceptionHandlerService(MessageSource messageSource) {
11
+ super(messageSource);
12
+ }
13
+
14
+ }
@@ -0,0 +1,31 @@
1
+ package <%= packageName %>.config.init;
2
+
3
+ import org.springframework.boot.context.event.ApplicationReadyEvent;
4
+ import org.springframework.context.event.EventListener;
5
+ import org.springframework.stereotype.Component;
6
+
7
+ import com.sixsprints.core.exception.EntityAlreadyExistsException;
8
+ import com.sixsprints.core.exception.EntityInvalidException;
9
+
10
+ import lombok.RequiredArgsConstructor;
11
+ import lombok.extern.slf4j.Slf4j;
12
+
13
+ @Slf4j
14
+ @Component
15
+ @RequiredArgsConstructor
16
+ public class ApplicationInit {
17
+
18
+ private final DataBuilderService databuilderService;
19
+
20
+ @EventListener(ApplicationReadyEvent.class)
21
+ public void init() throws EntityAlreadyExistsException, EntityInvalidException {
22
+ initData();
23
+ }
24
+
25
+ private void initData() throws EntityAlreadyExistsException, EntityInvalidException {
26
+ log.info("Creating default data");
27
+ databuilderService.init();
28
+ log.info("Created default data. System startup successful!");
29
+ }
30
+
31
+ }
@@ -0,0 +1,22 @@
1
+ package <%= packageName %>.config.init;
2
+
3
+ import org.springframework.stereotype.Service;
4
+
5
+ import com.sixsprints.core.exception.EntityAlreadyExistsException;
6
+ import com.sixsprints.core.exception.EntityInvalidException;
7
+
8
+ import lombok.RequiredArgsConstructor;
9
+ import lombok.extern.slf4j.Slf4j;
10
+
11
+ @Slf4j
12
+ @Service
13
+ @RequiredArgsConstructor
14
+ public class DataBuilderService {
15
+
16
+ private final UserAndRoleInitService userAndRoleInitService;
17
+
18
+ public void init() throws EntityAlreadyExistsException, EntityInvalidException {
19
+ userAndRoleInitService.init();
20
+ }
21
+
22
+ }
@@ -0,0 +1,71 @@
1
+ package <%= packageName %>.config.init;
2
+
3
+ import org.springframework.stereotype.Service;
4
+
5
+ import com.sixsprints.auth.domain.embedded.ModulePermission;
6
+ import com.sixsprints.core.auth.BasicModuleEnum;
7
+ import com.sixsprints.core.auth.BasicPermissionEnum;
8
+ import com.sixsprints.core.exception.EntityAlreadyExistsException;
9
+ import com.sixsprints.core.exception.EntityInvalidException;
10
+ import com.sixsprints.core.utils.AuthUtil;
11
+
12
+ import <%= packageName %>.config.constants.<%= appNameTitleCase %>Constants;
13
+ import <%= packageName %>.role.domain.Role;
14
+ import <%= packageName %>.role.service.RoleCrudService;
15
+ import <%= packageName %>.user.domain.User;
16
+ import <%= packageName %>.user.service.UserCrudService;
17
+ import lombok.RequiredArgsConstructor;
18
+ import lombok.extern.slf4j.Slf4j;
19
+
20
+ @Slf4j
21
+ @Service
22
+ @RequiredArgsConstructor
23
+ public class UserAndRoleInitService {
24
+
25
+ private final RoleCrudService roleCrudService;
26
+
27
+ private final UserCrudService userCrudService;
28
+
29
+ public void init() throws EntityAlreadyExistsException, EntityInvalidException {
30
+ Role adminRole = createRoles();
31
+ createUsers(adminRole);
32
+ }
33
+
34
+ private void createUsers(Role adminRole) throws EntityAlreadyExistsException, EntityInvalidException {
35
+ User user = <%= appNameTitleCase %>Constants.SYSTEM_USER;
36
+ user.setRoleSlug(adminRole.getSlug());
37
+ User fromDb = userCrudService.upsertOne(user);
38
+ log.info("Default Token. Will be valid for 1 day. {}", AuthUtil.createToken(fromDb.getId(), 1));
39
+ }
40
+
41
+ private Role createRoles() throws EntityAlreadyExistsException, EntityInvalidException {
42
+
43
+ Role adminRole = Role.builder()
44
+ .slug(<%= appNameTitleCase %>Constants.ADMIN_ROLE)
45
+ .name(<%= appNameTitleCase %>Constants.ADMIN_ROLE)
46
+ .modulePermission(ModulePermission.builder()
47
+ .module(BasicModuleEnum.ANY)
48
+ .permission(BasicPermissionEnum.ANY)
49
+ .build())
50
+ .build();
51
+
52
+ Role userRole = Role.builder()
53
+ .slug(<%= appNameTitleCase %>Constants.USER_ROLE)
54
+ .name(<%= appNameTitleCase %>Constants.USER_ROLE)
55
+ .modulePermission(ModulePermission.builder()
56
+ .module(BasicModuleEnum.ANY)
57
+ .permission(BasicPermissionEnum.ANY)
58
+ .build())
59
+ .build();
60
+
61
+ Role adminRoleFromDb = roleCrudService.upsertOne(adminRole);
62
+ Role userRoleFromDb = roleCrudService.upsertOne(userRole);
63
+
64
+ <%= appNameTitleCase %>Constants.ROLES.put(<%= appNameTitleCase %>Constants.ADMIN_ROLE, adminRoleFromDb);
65
+ <%= appNameTitleCase %>Constants.ROLES.put(<%= appNameTitleCase %>Constants.USER_ROLE, userRoleFromDb);
66
+
67
+ log.info("Updated Roles in Constants");
68
+ return adminRoleFromDb;
69
+ }
70
+
71
+ }
@@ -0,0 +1,25 @@
1
+ package <%= packageName %>.config.interceptors;
2
+
3
+ import org.springframework.stereotype.Component;
4
+
5
+ import com.sixsprints.auth.interceptor.AbstractRoleBasedAuthInterceptor;
6
+
7
+ import <%= packageName %>.config.constants.<%= appNameTitleCase %>Constants;
8
+ import <%= packageName %>.role.domain.Role;
9
+ import <%= packageName %>.role.service.RoleCrudService;
10
+ import <%= packageName %>.user.domain.User;
11
+ import <%= packageName %>.user.service.UserCrudService;
12
+
13
+ @Component
14
+ public class AuthInterceptor extends AbstractRoleBasedAuthInterceptor<User, Role> {
15
+
16
+ public AuthInterceptor(UserCrudService userCrudService, RoleCrudService roleCrudService) {
17
+ super(userCrudService, roleCrudService);
18
+ }
19
+
20
+ @Override
21
+ protected String authTokenKey() {
22
+ return <%= appNameTitleCase %>Constants.AUTH_TOKEN;
23
+ }
24
+
25
+ }
@@ -0,0 +1,28 @@
1
+ package <%= packageName %>.config.interceptors;
2
+
3
+ import org.springframework.stereotype.Component;
4
+
5
+ import com.sixsprints.core.dto.RequestContext;
6
+ import com.sixsprints.core.filter.CorsFilter;
7
+ import com.sixsprints.core.utils.ApplicationContext;
8
+
9
+ import jakarta.servlet.http.HttpServletRequest;
10
+
11
+ @Component
12
+ public class CorsFilterConfig extends CorsFilter {
13
+
14
+ @Override
15
+ protected String allowedHeaders(HttpServletRequest request) {
16
+ return super.allowedHeaders(request) + ", x-project-slug";
17
+ }
18
+
19
+ @Override
20
+ protected void logRequest(Long startTime) {
21
+ RequestContext request = ApplicationContext.getCurrentRequest();
22
+ if (request.getUserAgent() == null || (!request.getUserAgent().contains("kube-probe")
23
+ && !request.getUserAgent().contains("ELB-HealthChecker"))) {
24
+ super.logRequest(startTime);
25
+ }
26
+ }
27
+
28
+ }
@@ -0,0 +1,26 @@
1
+ package <%= packageName %>.config.interceptors;
2
+
3
+ import jakarta.servlet.http.HttpServletRequest;
4
+ import jakarta.servlet.http.HttpServletResponse;
5
+ import org.apache.commons.lang3.ObjectUtils;
6
+ import org.springframework.context.i18n.LocaleContextHolder;
7
+ import org.springframework.stereotype.Component;
8
+ import org.springframework.web.servlet.AsyncHandlerInterceptor;
9
+
10
+ import java.util.Locale;
11
+
12
+ @Component
13
+ public class LocaleInterceptor implements AsyncHandlerInterceptor {
14
+
15
+ @Override
16
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
17
+ String lang = request.getHeader("Accept-Language");
18
+ Locale locale = Locale.ENGLISH;
19
+ if (ObjectUtils.isNotEmpty(lang)) {
20
+ locale = Locale.forLanguageTag(lang);
21
+ }
22
+ LocaleContextHolder.setLocale(locale == null ? Locale.ENGLISH : locale);
23
+ return true;
24
+ }
25
+
26
+ }
@@ -0,0 +1,26 @@
1
+ package <%= packageName %>.config.interceptors;
2
+
3
+ import com.sixsprints.core.dto.RequestContext;
4
+ import com.sixsprints.core.interceptor.AbstractRequestContextInterceptor;
5
+ import lombok.extern.slf4j.Slf4j;
6
+ import org.springframework.stereotype.Component;
7
+
8
+ @Slf4j
9
+ @Component
10
+ public class RequestContextInterceptor extends AbstractRequestContextInterceptor {
11
+
12
+ @Override
13
+ protected String prefix() {
14
+ return "NOKO";
15
+ }
16
+
17
+ @Override
18
+ protected void postProcessor(RequestContext requestContext) {
19
+ String userAgent = requestContext.getUserAgent();
20
+ if (userAgent != null && (userAgent.contains("ELB-HealthChecker") || userAgent.contains("kube-probe"))) {
21
+ return;
22
+ }
23
+ log.info("Request Log : {}", requestContext);
24
+ }
25
+
26
+ }
@@ -0,0 +1,48 @@
1
+ package <%=packageName%>.config.openapi;
2
+
3
+ import org.springdoc.core.customizers.OperationCustomizer;
4
+ import org.springframework.context.annotation.Bean;
5
+ import org.springframework.context.annotation.Configuration;
6
+ import org.springframework.web.method.HandlerMethod;
7
+
8
+ import <%=packageName%>.config.constants.<%=appNameTitleCase%>Constants;
9
+ import io.swagger.v3.oas.models.Components;
10
+ import io.swagger.v3.oas.models.OpenAPI;
11
+ import io.swagger.v3.oas.models.Operation;
12
+ import io.swagger.v3.oas.models.info.Info;
13
+ import io.swagger.v3.oas.models.security.SecurityRequirement;
14
+ import io.swagger.v3.oas.models.security.SecurityScheme;
15
+
16
+ @Configuration
17
+ public class OpenAPIConfig {
18
+
19
+ @Bean
20
+ OpenAPI customOpenAPI() {
21
+ return new OpenAPI()
22
+ .info(new Info().title("<%= appName %> API").version("1.0.0"))
23
+ .components(new Components()
24
+ .addSecuritySchemes("JWT", new SecurityScheme()
25
+ .type(SecurityScheme.Type.APIKEY)
26
+ .in(SecurityScheme.In.HEADER)
27
+ .name(<%= appNameTitleCase %>Constants.AUTH_TOKEN)))
28
+ .addSecurityItem(new SecurityRequirement().addList("JWT"));
29
+ }
30
+
31
+ @Bean
32
+ OperationCustomizer operationIdCustomizer() {
33
+ OperationCustomizer c = new OperationCustomizer() {
34
+ @Override
35
+ public Operation customize(Operation operation, HandlerMethod handlerMethod) {
36
+ String controllerName = handlerMethod.getBeanType().getSimpleName().replace("Controller", "");
37
+ String methodName = handlerMethod.getMethod().getName();
38
+ if (!methodName.contains(controllerName)) {
39
+ operation.setOperationId(
40
+ String.format("%s_%s", methodName, controllerName));
41
+ }
42
+ return operation;
43
+ }
44
+ };
45
+ return c;
46
+ }
47
+
48
+ }
@@ -0,0 +1,21 @@
1
+ package <%= packageName %>.role.domain;
2
+
3
+ import org.springframework.data.mongodb.core.index.CompoundIndex;
4
+
5
+ import com.sixsprints.auth.domain.AbstractRole;
6
+
7
+ import lombok.Data;
8
+ import lombok.EqualsAndHashCode;
9
+ import lombok.NoArgsConstructor;
10
+ import lombok.experimental.SuperBuilder;
11
+
12
+ @Data
13
+ @SuperBuilder
14
+ @NoArgsConstructor
15
+ @EqualsAndHashCode(callSuper = true)
16
+ @CompoundIndex(unique = true, def = "{'name': 1}")
17
+ public class Role extends AbstractRole {
18
+
19
+ private static final long serialVersionUID = 1L;
20
+
21
+ }
@@ -0,0 +1,31 @@
1
+ package <%= packageName %>.role.dto;
2
+
3
+ import java.io.Serializable;
4
+ import java.util.List;
5
+
6
+ import com.sixsprints.auth.domain.embedded.ModulePermission;
7
+
8
+ import jakarta.validation.constraints.NotNull;
9
+ import jakarta.validation.constraints.Size;
10
+ import lombok.AllArgsConstructor;
11
+ import lombok.Builder;
12
+ import lombok.Data;
13
+ import lombok.NoArgsConstructor;
14
+
15
+ @Data
16
+ @Builder
17
+ @AllArgsConstructor
18
+ @NoArgsConstructor
19
+ public class RoleCreateDto implements Serializable {
20
+
21
+ @Size(min = 1, max = 100)
22
+ @NotNull
23
+ private String name;
24
+
25
+ @Size(max = 1024)
26
+ private String description;
27
+
28
+ private List<ModulePermission> modulePermissions;
29
+
30
+ private static final long serialVersionUID = 1L;
31
+ }
@@ -0,0 +1,31 @@
1
+ package <%= packageName %>.role.dto;
2
+
3
+ import java.io.Serializable;
4
+ import java.util.List;
5
+
6
+ import com.sixsprints.auth.domain.embedded.ModulePermission;
7
+
8
+ import lombok.AllArgsConstructor;
9
+ import lombok.Data;
10
+ import lombok.NoArgsConstructor;
11
+ import lombok.Builder;
12
+
13
+ @Data
14
+ @Builder
15
+ @AllArgsConstructor
16
+ @NoArgsConstructor
17
+ public class RoleDetailDto implements Serializable {
18
+
19
+ private String id;
20
+
21
+ private String slug;
22
+
23
+ private String name;
24
+
25
+ private String description;
26
+
27
+ private List<ModulePermission> modulePermissions;
28
+
29
+ private static final long serialVersionUID = 1L;
30
+
31
+ }
@@ -0,0 +1,30 @@
1
+ package <%= packageName %>.role.dto;
2
+
3
+ import java.io.Serializable;
4
+ import java.util.List;
5
+
6
+ import com.sixsprints.auth.domain.embedded.ModulePermission;
7
+
8
+ import lombok.AllArgsConstructor;
9
+ import lombok.Builder;
10
+ import lombok.Data;
11
+ import lombok.NoArgsConstructor;
12
+
13
+ @Data
14
+ @Builder
15
+ @AllArgsConstructor
16
+ @NoArgsConstructor
17
+ public class RoleSearchDto implements Serializable {
18
+
19
+ private String id;
20
+
21
+ private String slug;
22
+
23
+ private String name;
24
+
25
+ private String description;
26
+
27
+ private List<ModulePermission> modulePermissions;
28
+
29
+ private static final long serialVersionUID = 1L;
30
+ }
@@ -0,0 +1,9 @@
1
+ package <%= packageName %>.role.enums;
2
+
3
+ import com.sixsprints.core.auth.ModuleDefinition;
4
+
5
+ public enum ModuleEnum implements ModuleDefinition {
6
+ ANY,
7
+ USER,
8
+ ROLE,
9
+ }
@@ -0,0 +1,9 @@
1
+ package <%= packageName %>.role.enums;
2
+
3
+ import com.sixsprints.core.auth.PermissionDefinition;
4
+
5
+ public enum PermissionEnum implements PermissionDefinition {
6
+
7
+ ANY, READ, CREATE, UPDATE, DELETE;
8
+
9
+ }
@@ -0,0 +1,19 @@
1
+ package <%= packageName %>.role.mapper;
2
+
3
+ import com.sixsprints.core.mapper.GenericCrudMapper;
4
+
5
+ import <%= packageName %>.role.domain.Role;
6
+ import <%= packageName %>.role.dto.RoleCreateDto;
7
+
8
+ import org.mapstruct.Mapper;
9
+ import org.mapstruct.ReportingPolicy;
10
+
11
+ @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
12
+ public abstract class RoleCreateDtoMapper extends GenericCrudMapper<Role, RoleCreateDto> {
13
+
14
+ @Override
15
+ public abstract Role toDomain(RoleCreateDto dto);
16
+
17
+ @Override
18
+ public abstract RoleCreateDto toDto(Role domain);
19
+ }
@@ -0,0 +1,19 @@
1
+ package <%= packageName %>.role.mapper;
2
+
3
+ import com.sixsprints.core.mapper.GenericCrudMapper;
4
+
5
+ import <%= packageName %>.role.domain.Role;
6
+ import <%= packageName %>.role.dto.RoleDetailDto;
7
+
8
+ import org.mapstruct.Mapper;
9
+ import org.mapstruct.ReportingPolicy;
10
+
11
+ @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
12
+ public abstract class RoleDetailDtoMapper extends GenericCrudMapper<Role, RoleDetailDto> {
13
+
14
+ @Override
15
+ public abstract Role toDomain(RoleDetailDto dto);
16
+
17
+ @Override
18
+ public abstract RoleDetailDto toDto(Role domain);
19
+ }