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.
- package/README.md +214 -0
- package/generators/app/index.js +116 -0
- package/generators/app/templates/.gradle/9.0.0/checksums/checksums.lock +0 -0
- package/generators/app/templates/.gradle/9.0.0/fileChanges/last-build.bin +0 -0
- package/generators/app/templates/.gradle/9.0.0/fileHashes/fileHashes.lock +0 -0
- package/generators/app/templates/.gradle/9.0.0/gc.properties +0 -0
- package/generators/app/templates/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/generators/app/templates/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/generators/app/templates/.gradle/vcs-1/gc.properties +0 -0
- package/generators/app/templates/01-code/NokodeSampleApplication.java +13 -0
- package/generators/app/templates/01-code/config/AuthConfig.java +10 -0
- package/generators/app/templates/01-code/config/CloudStorageConfig.java +30 -0
- package/generators/app/templates/01-code/config/MongoConfig.java +43 -0
- package/generators/app/templates/01-code/config/NotificationConfig.java +47 -0
- package/generators/app/templates/01-code/config/PantherCrudBeans.java +33 -0
- package/generators/app/templates/01-code/config/ShedlockConfig.java +24 -0
- package/generators/app/templates/01-code/config/WebConfig.java +38 -0
- package/generators/app/templates/01-code/config/annotations/AppAuth.java +24 -0
- package/generators/app/templates/01-code/config/audit/UserAuditing.java +29 -0
- package/generators/app/templates/01-code/config/constants/PantherCrudConstants.java +24 -0
- package/generators/app/templates/01-code/config/converters/BsonDocumentToJsonNodeConverter.java +31 -0
- package/generators/app/templates/01-code/config/converters/JsonNodeToBsonDocumentConverter.java +32 -0
- package/generators/app/templates/01-code/config/converters/ModuleDefinitionDeserializer.java +25 -0
- package/generators/app/templates/01-code/config/converters/ModulePermissionDefinitionModule.java +16 -0
- package/generators/app/templates/01-code/config/converters/PermissionDefinitionDeserializer.java +25 -0
- package/generators/app/templates/01-code/config/converters/StringToModuleDefinitionConverter.java +26 -0
- package/generators/app/templates/01-code/config/converters/StringToPermissionDefinitionConverter.java +26 -0
- package/generators/app/templates/01-code/config/exception/RestExceptionHandlerService.java +14 -0
- package/generators/app/templates/01-code/config/init/ApplicationInit.java +31 -0
- package/generators/app/templates/01-code/config/init/DataBuilderService.java +22 -0
- package/generators/app/templates/01-code/config/init/UserAndRoleInitService.java +71 -0
- package/generators/app/templates/01-code/config/interceptors/AuthInterceptor.java +25 -0
- package/generators/app/templates/01-code/config/interceptors/CorsFilterConfig.java +28 -0
- package/generators/app/templates/01-code/config/interceptors/LocaleInterceptor.java +26 -0
- package/generators/app/templates/01-code/config/interceptors/RequestContextInterceptor.java +26 -0
- package/generators/app/templates/01-code/config/openapi/OpenAPIConfig.java +48 -0
- package/generators/app/templates/01-code/role/domain/Role.java +21 -0
- package/generators/app/templates/01-code/role/dto/RoleCreateDto.java +31 -0
- package/generators/app/templates/01-code/role/dto/RoleDetailDto.java +31 -0
- package/generators/app/templates/01-code/role/dto/RoleSearchDto.java +30 -0
- package/generators/app/templates/01-code/role/enums/ModuleEnum.java +9 -0
- package/generators/app/templates/01-code/role/enums/PermissionEnum.java +9 -0
- package/generators/app/templates/01-code/role/mapper/RoleCreateDtoMapper.java +19 -0
- package/generators/app/templates/01-code/role/mapper/RoleDetailDtoMapper.java +19 -0
- package/generators/app/templates/01-code/role/mapper/RoleSearchDtoMapper.java +19 -0
- package/generators/app/templates/01-code/role/repository/RoleRepository.java +11 -0
- package/generators/app/templates/01-code/role/service/RoleCrudService.java +36 -0
- package/generators/app/templates/01-code/user/domain/User.java +32 -0
- package/generators/app/templates/01-code/user/dto/EmailLoginDto.java +42 -0
- package/generators/app/templates/01-code/user/dto/ResetEmailPasswordDto.java +31 -0
- package/generators/app/templates/01-code/user/dto/UserCreateDto.java +29 -0
- package/generators/app/templates/01-code/user/dto/UserDetailDto.java +25 -0
- package/generators/app/templates/01-code/user/dto/UserSearchDto.java +25 -0
- package/generators/app/templates/01-code/user/dto/UserSignupDto.java +37 -0
- package/generators/app/templates/01-code/user/mapper/UserCreateDtoMapper.java +19 -0
- package/generators/app/templates/01-code/user/mapper/UserDetailDtoMapper.java +19 -0
- package/generators/app/templates/01-code/user/mapper/UserSearchDtoMapper.java +19 -0
- package/generators/app/templates/01-code/user/mapper/UserSignupDtoMapper.java +21 -0
- package/generators/app/templates/01-code/user/repository/UserRepository.java +10 -0
- package/generators/app/templates/01-code/user/service/UserCrudService.java +70 -0
- package/generators/app/templates/02-test-code/NokodeSampleApplicationTests.java +13 -0
- package/generators/app/templates/03-main-resources/META-INF/additional-spring-configuration-metadata.json +34 -0
- package/generators/app/templates/03-main-resources/application.properties +21 -0
- package/generators/app/templates/build.gradle +104 -0
- package/generators/app/templates/build.sh +7 -0
- package/generators/app/templates/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/generators/app/templates/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/generators/app/templates/gradlew +252 -0
- package/generators/app/templates/gradlew.bat +94 -0
- package/generators/app/templates/settings.gradle +1 -0
- package/generators/base-generator.js +70 -0
- package/generators/constants.js +14 -0
- package/index.js +74 -0
- package/package.json +42 -0
package/generators/app/templates/01-code/config/converters/BsonDocumentToJsonNodeConverter.java
ADDED
|
@@ -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
|
+
}
|
package/generators/app/templates/01-code/config/converters/JsonNodeToBsonDocumentConverter.java
ADDED
|
@@ -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
|
+
}
|
package/generators/app/templates/01-code/config/converters/ModulePermissionDefinitionModule.java
ADDED
|
@@ -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
|
+
}
|
package/generators/app/templates/01-code/config/converters/PermissionDefinitionDeserializer.java
ADDED
|
@@ -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
|
+
}
|
package/generators/app/templates/01-code/config/converters/StringToModuleDefinitionConverter.java
ADDED
|
@@ -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,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
|
+
}
|