From effa449228e352933ad2897709c45536ff4d4f1a Mon Sep 17 00:00:00 2001 From: vran Date: Wed, 23 Mar 2022 11:41:20 +0800 Subject: [PATCH] feat: add template property api --- .../api/DocumentTemplateController.java | 36 +++++ .../main/java/com/databasir/api/Routes.java | 4 + ...platePropertiesUpdateRequestConverter.java | 25 ++++ ...mentTemplatePropertyResponseConverter.java | 15 ++ .../DocumentTemplatePropertiesResponse.java | 41 ++++++ ...cumentTemplatePropertiesUpdateRequest.java | 28 ++++ .../service/DocumentTemplateService.java | 46 ++++++ .../domain/system/service/SystemService.java | 50 ------- .../subscriber/DocumentEventSubscriber.java | 3 - .../SystemStartedEventSubscriber.java | 137 ++++++++++++++++++ dao/build.gradle | 6 + .../dao/tables/DocumentTemplateProperty.java | 25 +++- .../pojos/DocumentTemplatePropertyPojo.java | 30 ++-- .../DocumentTemplatePropertyRecord.java | 25 ++-- ...DocumentTemplatePropertyTypeConverter.java | 12 ++ .../enums/DocumentTemplatePropertyType.java | 7 + .../dao/impl/DocumentTemplatePropertyDao.java | 56 +++++++ 17 files changed, 461 insertions(+), 85 deletions(-) create mode 100644 api/src/main/java/com/databasir/api/DocumentTemplateController.java create mode 100644 core/src/main/java/com/databasir/core/domain/document/converter/DocumentTemplatePropertiesUpdateRequestConverter.java create mode 100644 core/src/main/java/com/databasir/core/domain/document/converter/DocumentTemplatePropertyResponseConverter.java create mode 100644 core/src/main/java/com/databasir/core/domain/document/data/DocumentTemplatePropertiesResponse.java create mode 100644 core/src/main/java/com/databasir/core/domain/document/data/DocumentTemplatePropertiesUpdateRequest.java create mode 100644 core/src/main/java/com/databasir/core/domain/document/service/DocumentTemplateService.java create mode 100644 core/src/main/java/com/databasir/core/infrastructure/event/subscriber/SystemStartedEventSubscriber.java create mode 100644 dao/src/main/java/com/databasir/dao/converter/DocumentTemplatePropertyTypeConverter.java create mode 100644 dao/src/main/java/com/databasir/dao/enums/DocumentTemplatePropertyType.java create mode 100644 dao/src/main/java/com/databasir/dao/impl/DocumentTemplatePropertyDao.java diff --git a/api/src/main/java/com/databasir/api/DocumentTemplateController.java b/api/src/main/java/com/databasir/api/DocumentTemplateController.java new file mode 100644 index 0000000..8a52f28 --- /dev/null +++ b/api/src/main/java/com/databasir/api/DocumentTemplateController.java @@ -0,0 +1,36 @@ +package com.databasir.api; + +import com.databasir.common.JsonData; +import com.databasir.core.domain.document.data.DocumentTemplatePropertiesResponse; +import com.databasir.core.domain.document.data.DocumentTemplatePropertiesUpdateRequest; +import com.databasir.core.domain.document.service.DocumentTemplateService; +import lombok.RequiredArgsConstructor; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +@RequiredArgsConstructor +@Validated +@RestController +public class DocumentTemplateController { + + private final DocumentTemplateService documentTemplateService; + + @GetMapping(Routes.DocumentTemplateProperty.API) + public JsonData getAllProperties() { + return JsonData.ok(documentTemplateService.getAllProperties()); + } + + @PatchMapping(Routes.DocumentTemplateProperty.API) + @PreAuthorize("hasAnyAuthority('SYS_OWNER')") + public JsonData updateByType(@RequestBody @Valid DocumentTemplatePropertiesUpdateRequest request) { + documentTemplateService.updateByType(request); + return JsonData.ok(); + } + +} diff --git a/api/src/main/java/com/databasir/api/Routes.java b/api/src/main/java/com/databasir/api/Routes.java index b700e66..3e62988 100644 --- a/api/src/main/java/com/databasir/api/Routes.java +++ b/api/src/main/java/com/databasir/api/Routes.java @@ -105,6 +105,10 @@ public interface Routes { String SAVE = DISCUSSION_BASE; } + interface DocumentTemplateProperty { + String API = BASE + "/document_template/properties"; + } + interface Setting { String GET_SYS_EMAIL = BASE + "/settings/sys_email"; diff --git a/core/src/main/java/com/databasir/core/domain/document/converter/DocumentTemplatePropertiesUpdateRequestConverter.java b/core/src/main/java/com/databasir/core/domain/document/converter/DocumentTemplatePropertiesUpdateRequestConverter.java new file mode 100644 index 0000000..c8818e3 --- /dev/null +++ b/core/src/main/java/com/databasir/core/domain/document/converter/DocumentTemplatePropertiesUpdateRequestConverter.java @@ -0,0 +1,25 @@ +package com.databasir.core.domain.document.converter; + +import com.databasir.core.domain.document.data.DocumentTemplatePropertiesUpdateRequest; +import com.databasir.dao.enums.DocumentTemplatePropertyType; +import com.databasir.dao.tables.pojos.DocumentTemplatePropertyPojo; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import java.util.List; +import java.util.stream.Collectors; + +@Mapper(componentModel = "spring") +public interface DocumentTemplatePropertiesUpdateRequestConverter { + + @Mapping(target = "defaultValue", constant = "") + DocumentTemplatePropertyPojo toPojo(DocumentTemplatePropertiesUpdateRequest.PropertyRequest property, + DocumentTemplatePropertyType type); + + default List toPojo(DocumentTemplatePropertiesUpdateRequest request) { + return request.getProperties().stream() + .map(prop -> toPojo(prop, request.getType())) + .collect(Collectors.toList()); + } + +} diff --git a/core/src/main/java/com/databasir/core/domain/document/converter/DocumentTemplatePropertyResponseConverter.java b/core/src/main/java/com/databasir/core/domain/document/converter/DocumentTemplatePropertyResponseConverter.java new file mode 100644 index 0000000..09b354b --- /dev/null +++ b/core/src/main/java/com/databasir/core/domain/document/converter/DocumentTemplatePropertyResponseConverter.java @@ -0,0 +1,15 @@ +package com.databasir.core.domain.document.converter; + +import com.databasir.core.domain.document.data.DocumentTemplatePropertiesResponse; +import com.databasir.dao.tables.pojos.DocumentTemplatePropertyPojo; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface DocumentTemplatePropertyResponseConverter { + + List of( + List pojoList); + +} diff --git a/core/src/main/java/com/databasir/core/domain/document/data/DocumentTemplatePropertiesResponse.java b/core/src/main/java/com/databasir/core/domain/document/data/DocumentTemplatePropertiesResponse.java new file mode 100644 index 0000000..6be6521 --- /dev/null +++ b/core/src/main/java/com/databasir/core/domain/document/data/DocumentTemplatePropertiesResponse.java @@ -0,0 +1,41 @@ +package com.databasir.core.domain.document.data; + +import com.databasir.dao.enums.DocumentTemplatePropertyType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DocumentTemplatePropertiesResponse { + + private List columnFieldNameProperties = Collections.emptyList(); + + private List indexFieldNameProperties = Collections.emptyList(); + + private List triggerFieldNameProperties = Collections.emptyList(); + + private List foreignKeyFieldNameProperties = Collections.emptyList(); + + @Data + public static class DocumentTemplatePropertyResponse { + + private String key; + + private String value; + + private String defaultValue; + + private DocumentTemplatePropertyType type; + + private LocalDateTime createAt; + + } +} diff --git a/core/src/main/java/com/databasir/core/domain/document/data/DocumentTemplatePropertiesUpdateRequest.java b/core/src/main/java/com/databasir/core/domain/document/data/DocumentTemplatePropertiesUpdateRequest.java new file mode 100644 index 0000000..cd57acc --- /dev/null +++ b/core/src/main/java/com/databasir/core/domain/document/data/DocumentTemplatePropertiesUpdateRequest.java @@ -0,0 +1,28 @@ +package com.databasir.core.domain.document.data; + +import com.databasir.dao.enums.DocumentTemplatePropertyType; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Collections; +import java.util.List; + +@Data +public class DocumentTemplatePropertiesUpdateRequest { + + @NotNull + private DocumentTemplatePropertyType type; + + @NotEmpty + private List properties = Collections.emptyList(); + + @Data + public static class PropertyRequest { + + private String key; + + private String value; + + } +} diff --git a/core/src/main/java/com/databasir/core/domain/document/service/DocumentTemplateService.java b/core/src/main/java/com/databasir/core/domain/document/service/DocumentTemplateService.java new file mode 100644 index 0000000..82a1178 --- /dev/null +++ b/core/src/main/java/com/databasir/core/domain/document/service/DocumentTemplateService.java @@ -0,0 +1,46 @@ +package com.databasir.core.domain.document.service; + +import com.databasir.core.domain.document.converter.DocumentTemplatePropertiesUpdateRequestConverter; +import com.databasir.core.domain.document.converter.DocumentTemplatePropertyResponseConverter; +import com.databasir.core.domain.document.data.DocumentTemplatePropertiesResponse; +import com.databasir.core.domain.document.data.DocumentTemplatePropertiesUpdateRequest; +import com.databasir.dao.impl.DocumentTemplatePropertyDao; +import com.databasir.dao.tables.pojos.DocumentTemplatePropertyPojo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +import static com.databasir.dao.enums.DocumentTemplatePropertyType.*; + +@Service +@RequiredArgsConstructor +@Slf4j +public class DocumentTemplateService { + + private final DocumentTemplatePropertyDao documentTemplatePropertyDao; + + private final DocumentTemplatePropertyResponseConverter documentTemplatePropertyResponseConverter; + + private final DocumentTemplatePropertiesUpdateRequestConverter documentTemplatePropertiesUpdateRequestConverter; + + public DocumentTemplatePropertiesResponse getAllProperties() { + List properties = documentTemplatePropertyDao.selectAll(); + var propertiesGroupByType = documentTemplatePropertyResponseConverter.of(properties) + .stream() + .collect(Collectors.groupingBy(d -> d.getType())); + return DocumentTemplatePropertiesResponse.builder() + .columnFieldNameProperties(propertiesGroupByType.get(COLUMN_FIELD_NAME)) + .foreignKeyFieldNameProperties(propertiesGroupByType.get(FOREIGN_KEY_FIELD_NAME)) + .indexFieldNameProperties(propertiesGroupByType.get(INDEX_FIELD_NAME)) + .triggerFieldNameProperties(propertiesGroupByType.get(TRIGGER_FIELD_NAME)) + .build(); + } + + public void updateByType(DocumentTemplatePropertiesUpdateRequest request) { + List pojoList = documentTemplatePropertiesUpdateRequestConverter.toPojo(request); + documentTemplatePropertyDao.batchInsertOnDuplicateKeyUpdate(pojoList); + } +} diff --git a/core/src/main/java/com/databasir/core/domain/system/service/SystemService.java b/core/src/main/java/com/databasir/core/domain/system/service/SystemService.java index e24b584..4bcb803 100644 --- a/core/src/main/java/com/databasir/core/domain/system/service/SystemService.java +++ b/core/src/main/java/com/databasir/core/domain/system/service/SystemService.java @@ -1,72 +1,22 @@ package com.databasir.core.domain.system.service; -import com.databasir.common.codec.Aes; -import com.databasir.common.codec.Rsa; import com.databasir.core.domain.DomainErrors; import com.databasir.core.domain.system.data.SystemEmailResponse; import com.databasir.core.domain.system.data.SystemEmailUpdateRequest; -import com.databasir.dao.impl.SysKeyDao; import com.databasir.dao.impl.SysMailDao; -import com.databasir.dao.impl.UserDao; -import com.databasir.dao.impl.UserRoleDao; -import com.databasir.dao.tables.pojos.SysKeyPojo; import com.databasir.dao.tables.pojos.SysMailPojo; -import com.databasir.dao.tables.pojos.UserPojo; -import com.databasir.dao.tables.pojos.UserRolePojo; import lombok.RequiredArgsConstructor; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import javax.annotation.PostConstruct; import java.util.Optional; @Service @RequiredArgsConstructor public class SystemService { - private final SysKeyDao sysKeyDao; - private final SysMailDao sysMailDao; - private final UserDao userDao; - - private final UserRoleDao userRoleDao; - - @SuppressWarnings("checkstyle:all") - private BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); - - @PostConstruct - public void postInit() { - sysKeyDao.selectOptionTopOne() - .orElseGet(() -> { - SysKeyPojo pojo = new SysKeyPojo(); - pojo.setAesKey(Aes.randomBase64Key()); - Rsa.RsaBase64Key key = Rsa.generateBase64Key(); - pojo.setRsaPublicKey(key.getPublicBase64Key()); - pojo.setRsaPrivateKey(key.getPrivateBase64Key()); - sysKeyDao.insertAndReturnId(pojo); - return pojo; - }); - - String email = "N/A"; - String username = "databasir"; - Optional userOpt = userDao.selectByEmailOrUsername(username); - if (!userOpt.isPresent()) { - UserPojo admin = new UserPojo(); - admin.setEmail(email); - admin.setUsername(username); - admin.setPassword(bCryptPasswordEncoder.encode(username)); - admin.setEnabled(true); - admin.setNickname("Databasir Admin"); - Integer userId = userDao.insertAndReturnId(admin); - UserRolePojo role = new UserRolePojo(); - role.setUserId(userId); - role.setRole("SYS_OWNER"); - userRoleDao.insertAndReturnId(role); - } - } - public void renewKey() { // TODO } diff --git a/core/src/main/java/com/databasir/core/infrastructure/event/subscriber/DocumentEventSubscriber.java b/core/src/main/java/com/databasir/core/infrastructure/event/subscriber/DocumentEventSubscriber.java index 87a5d4a..98ea95e 100644 --- a/core/src/main/java/com/databasir/core/infrastructure/event/subscriber/DocumentEventSubscriber.java +++ b/core/src/main/java/com/databasir/core/infrastructure/event/subscriber/DocumentEventSubscriber.java @@ -7,7 +7,6 @@ import com.databasir.core.infrastructure.mail.MailSender; import com.databasir.dao.impl.ProjectDao; import com.databasir.dao.impl.SysMailDao; import com.databasir.dao.impl.UserDao; -import com.databasir.dao.impl.UserRoleDao; import com.databasir.dao.tables.pojos.ProjectPojo; import com.databasir.dao.tables.pojos.UserPojo; import lombok.RequiredArgsConstructor; @@ -27,8 +26,6 @@ public class DocumentEventSubscriber { private final MailSender mailSender; - private final UserRoleDao userRoleDao; - private final UserDao userDao; private final SysMailDao sysMailDao; diff --git a/core/src/main/java/com/databasir/core/infrastructure/event/subscriber/SystemStartedEventSubscriber.java b/core/src/main/java/com/databasir/core/infrastructure/event/subscriber/SystemStartedEventSubscriber.java new file mode 100644 index 0000000..02693e2 --- /dev/null +++ b/core/src/main/java/com/databasir/core/infrastructure/event/subscriber/SystemStartedEventSubscriber.java @@ -0,0 +1,137 @@ +package com.databasir.core.infrastructure.event.subscriber; + +import com.databasir.common.codec.Aes; +import com.databasir.common.codec.Rsa; +import com.databasir.core.domain.document.data.TableDocumentResponse; +import com.databasir.dao.enums.DocumentTemplatePropertyType; +import com.databasir.dao.impl.DocumentTemplatePropertyDao; +import com.databasir.dao.impl.SysKeyDao; +import com.databasir.dao.impl.UserDao; +import com.databasir.dao.impl.UserRoleDao; +import com.databasir.dao.tables.pojos.DocumentTemplatePropertyPojo; +import com.databasir.dao.tables.pojos.SysKeyPojo; +import com.databasir.dao.tables.pojos.UserPojo; +import com.databasir.dao.tables.pojos.UserRolePojo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.function.BiFunction; +import java.util.stream.Collectors; + +@Component +@Slf4j +@RequiredArgsConstructor +public class SystemStartedEventSubscriber { + + private final SysKeyDao sysKeyDao; + + private final UserDao userDao; + + private final UserRoleDao userRoleDao; + + private final DocumentTemplatePropertyDao documentTemplatePropertyDao; + + @SuppressWarnings("checkstyle:all") + private BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); + + @EventListener(classes = ContextRefreshedEvent.class) + public void onStarted(ContextRefreshedEvent event) { + log.info("begin to init system data"); + initSysOwnerIfNecessary(); + initDatabaseTypesIfNecessary(); + initTemplatePropertiesIfNecessary(); + log.info("system data init finished"); + } + + private void initTemplatePropertiesIfNecessary() { + List ignoreFields = List.of("createAt", "discussionCount", "id"); + BiFunction mapping = (field, type) -> { + String key = field.getName(); + String def = field.getName(); + DocumentTemplatePropertyPojo pojo = new DocumentTemplatePropertyPojo(); + pojo.setType(type); + pojo.setKey(key); + pojo.setDefaultValue(def); + return pojo; + }; + // column field name; + Field[] columnFields = TableDocumentResponse.ColumnDocumentResponse.class.getDeclaredFields(); + List columnProperties = Arrays.stream(columnFields) + .filter(f -> !ignoreFields.contains(f.getName())) + .map(field -> mapping.apply(field, DocumentTemplatePropertyType.COLUMN_FIELD_NAME)) + .collect(Collectors.toList()); + + // index field name; + Field[] indexFields = TableDocumentResponse.IndexDocumentResponse.class.getDeclaredFields(); + List indexProperties = Arrays.stream(indexFields) + .filter(f -> !ignoreFields.contains(f.getName())) + .map(field -> mapping.apply(field, DocumentTemplatePropertyType.INDEX_FIELD_NAME)) + .collect(Collectors.toList()); + + // foreign key field name; + Field[] fkFields = TableDocumentResponse.ForeignKeyDocumentResponse.class.getDeclaredFields(); + List fkProperties = Arrays.stream(fkFields) + .filter(f -> !ignoreFields.contains(f.getName())) + .map(field -> mapping.apply(field, DocumentTemplatePropertyType.FOREIGN_KEY_FIELD_NAME)) + .collect(Collectors.toList()); + + // trigger field name; + Field[] triggerFields = TableDocumentResponse.TriggerDocumentResponse.class.getDeclaredFields(); + List triggerProperties = Arrays.stream(triggerFields) + .filter(f -> !ignoreFields.contains(f.getName())) + .map(field -> mapping.apply(field, DocumentTemplatePropertyType.TRIGGER_FIELD_NAME)) + .collect(Collectors.toList()); + + List properties = new ArrayList<>(); + properties.addAll(columnProperties); + properties.addAll(indexProperties); + properties.addAll(fkProperties); + properties.addAll(triggerProperties); + documentTemplatePropertyDao.batchInsertOnDuplicateIgnore(properties); + + } + + private void initDatabaseTypesIfNecessary() { + // TODO + } + + private void initSysOwnerIfNecessary() { + sysKeyDao.selectOptionTopOne() + .orElseGet(() -> { + SysKeyPojo pojo = new SysKeyPojo(); + pojo.setAesKey(Aes.randomBase64Key()); + Rsa.RsaBase64Key key = Rsa.generateBase64Key(); + pojo.setRsaPublicKey(key.getPublicBase64Key()); + pojo.setRsaPrivateKey(key.getPrivateBase64Key()); + sysKeyDao.insertAndReturnId(pojo); + return pojo; + }); + + String email = "N/A"; + String username = "databasir"; + Optional userOpt = userDao.selectByEmailOrUsername(username); + if (!userOpt.isPresent()) { + UserPojo admin = new UserPojo(); + admin.setEmail(email); + admin.setUsername(username); + admin.setPassword(bCryptPasswordEncoder.encode(username)); + admin.setEnabled(true); + admin.setNickname("Databasir Admin"); + Integer userId = userDao.insertAndReturnId(admin); + UserRolePojo role = new UserRolePojo(); + role.setUserId(userId); + role.setRole("SYS_OWNER"); + userRoleDao.insertAndReturnId(role); + } + } + +} diff --git a/dao/build.gradle b/dao/build.gradle index 88721e3..938ab5e 100644 --- a/dao/build.gradle +++ b/dao/build.gradle @@ -66,6 +66,12 @@ jooq { includeExpression = 'app_type' includeTypes = '.*' } + forcedType { + userType = 'com.databasir.dao.enums.DocumentTemplatePropertyType' + converter = 'com.databasir.dao.converter.DocumentTemplatePropertyTypeConverter' + includeExpression = 'document_template_property.type' + includeTypes = '.*' + } } } generate { diff --git a/dao/generated-src/jooq/main/java/com/databasir/dao/tables/DocumentTemplateProperty.java b/dao/generated-src/jooq/main/java/com/databasir/dao/tables/DocumentTemplateProperty.java index b4bcbe0..a45b373 100644 --- a/dao/generated-src/jooq/main/java/com/databasir/dao/tables/DocumentTemplateProperty.java +++ b/dao/generated-src/jooq/main/java/com/databasir/dao/tables/DocumentTemplateProperty.java @@ -6,16 +6,29 @@ package com.databasir.dao.tables; import com.databasir.dao.Databasir; import com.databasir.dao.Keys; +import com.databasir.dao.converter.DocumentTemplatePropertyTypeConverter; +import com.databasir.dao.enums.DocumentTemplatePropertyType; import com.databasir.dao.tables.records.DocumentTemplatePropertyRecord; -import org.jooq.*; -import org.jooq.impl.DSL; -import org.jooq.impl.SQLDataType; -import org.jooq.impl.TableImpl; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Identity; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Row6; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.TableOptions; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.SQLDataType; +import org.jooq.impl.TableImpl; + /** * template property @@ -63,7 +76,7 @@ public class DocumentTemplateProperty extends TableImpldatabasir.document_template_property.type. */ - public final TableField TYPE = createField(DSL.name("type"), SQLDataType.VARCHAR(64).nullable(false), this, ""); + public final TableField TYPE = createField(DSL.name("type"), SQLDataType.VARCHAR(64).nullable(false), this, "", new DocumentTemplatePropertyTypeConverter()); /** * The column databasir.document_template_property.create_at. @@ -157,7 +170,7 @@ public class DocumentTemplateProperty extends TableImpl fieldsRow() { + public Row6 fieldsRow() { return (Row6) super.fieldsRow(); } } diff --git a/dao/generated-src/jooq/main/java/com/databasir/dao/tables/pojos/DocumentTemplatePropertyPojo.java b/dao/generated-src/jooq/main/java/com/databasir/dao/tables/pojos/DocumentTemplatePropertyPojo.java index 7d4ecc3..3452fa8 100644 --- a/dao/generated-src/jooq/main/java/com/databasir/dao/tables/pojos/DocumentTemplatePropertyPojo.java +++ b/dao/generated-src/jooq/main/java/com/databasir/dao/tables/pojos/DocumentTemplatePropertyPojo.java @@ -4,6 +4,8 @@ package com.databasir.dao.tables.pojos; +import com.databasir.dao.enums.DocumentTemplatePropertyType; + import java.io.Serializable; import java.time.LocalDateTime; @@ -16,12 +18,12 @@ public class DocumentTemplatePropertyPojo implements Serializable { private static final long serialVersionUID = 1L; - private Integer id; - private String key; - private String value; - private String defaultValue; - private String type; - private LocalDateTime createAt; + private Integer id; + private String key; + private String value; + private String defaultValue; + private DocumentTemplatePropertyType type; + private LocalDateTime createAt; public DocumentTemplatePropertyPojo() {} @@ -35,12 +37,12 @@ public class DocumentTemplatePropertyPojo implements Serializable { } public DocumentTemplatePropertyPojo( - Integer id, - String key, - String value, - String defaultValue, - String type, - LocalDateTime createAt + Integer id, + String key, + String value, + String defaultValue, + DocumentTemplatePropertyType type, + LocalDateTime createAt ) { this.id = id; this.key = key; @@ -111,14 +113,14 @@ public class DocumentTemplatePropertyPojo implements Serializable { /** * Getter for databasir.document_template_property.type. */ - public String getType() { + public DocumentTemplatePropertyType getType() { return this.type; } /** * Setter for databasir.document_template_property.type. */ - public void setType(String type) { + public void setType(DocumentTemplatePropertyType type) { this.type = type; } diff --git a/dao/generated-src/jooq/main/java/com/databasir/dao/tables/records/DocumentTemplatePropertyRecord.java b/dao/generated-src/jooq/main/java/com/databasir/dao/tables/records/DocumentTemplatePropertyRecord.java index 06474d0..cca1b4c 100644 --- a/dao/generated-src/jooq/main/java/com/databasir/dao/tables/records/DocumentTemplatePropertyRecord.java +++ b/dao/generated-src/jooq/main/java/com/databasir/dao/tables/records/DocumentTemplatePropertyRecord.java @@ -4,6 +4,7 @@ package com.databasir.dao.tables.records; +import com.databasir.dao.enums.DocumentTemplatePropertyType; import com.databasir.dao.tables.DocumentTemplateProperty; import com.databasir.dao.tables.pojos.DocumentTemplatePropertyPojo; @@ -20,7 +21,7 @@ import org.jooq.impl.UpdatableRecordImpl; * template property */ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class DocumentTemplatePropertyRecord extends UpdatableRecordImpl implements Record6 { +public class DocumentTemplatePropertyRecord extends UpdatableRecordImpl implements Record6 { private static final long serialVersionUID = 1L; @@ -85,15 +86,15 @@ public class DocumentTemplatePropertyRecord extends UpdatableRecordImpldatabasir.document_template_property.type. */ - public void setType(String value) { + public void setType(DocumentTemplatePropertyType value) { set(4, value); } /** * Getter for databasir.document_template_property.type. */ - public String getType() { - return (String) get(4); + public DocumentTemplatePropertyType getType() { + return (DocumentTemplatePropertyType) get(4); } /** @@ -124,12 +125,12 @@ public class DocumentTemplatePropertyRecord extends UpdatableRecordImpl fieldsRow() { + public Row6 fieldsRow() { return (Row6) super.fieldsRow(); } @Override - public Row6 valuesRow() { + public Row6 valuesRow() { return (Row6) super.valuesRow(); } @@ -154,7 +155,7 @@ public class DocumentTemplatePropertyRecord extends UpdatableRecordImpl field5() { + public Field field5() { return DocumentTemplateProperty.DOCUMENT_TEMPLATE_PROPERTY.TYPE; } @@ -184,7 +185,7 @@ public class DocumentTemplatePropertyRecord extends UpdatableRecordImpl { + + public DocumentTemplatePropertyTypeConverter() { + super(String.class, DocumentTemplatePropertyType.class); + } + +} diff --git a/dao/src/main/java/com/databasir/dao/enums/DocumentTemplatePropertyType.java b/dao/src/main/java/com/databasir/dao/enums/DocumentTemplatePropertyType.java new file mode 100644 index 0000000..6f03c41 --- /dev/null +++ b/dao/src/main/java/com/databasir/dao/enums/DocumentTemplatePropertyType.java @@ -0,0 +1,7 @@ +package com.databasir.dao.enums; + +public enum DocumentTemplatePropertyType { + + INDEX_FIELD_NAME, COLUMN_FIELD_NAME, TRIGGER_FIELD_NAME, FOREIGN_KEY_FIELD_NAME; + +} diff --git a/dao/src/main/java/com/databasir/dao/impl/DocumentTemplatePropertyDao.java b/dao/src/main/java/com/databasir/dao/impl/DocumentTemplatePropertyDao.java new file mode 100644 index 0000000..ba708c5 --- /dev/null +++ b/dao/src/main/java/com/databasir/dao/impl/DocumentTemplatePropertyDao.java @@ -0,0 +1,56 @@ +package com.databasir.dao.impl; + +import com.databasir.dao.tables.pojos.DocumentTemplatePropertyPojo; +import com.databasir.dao.tables.records.DocumentTemplatePropertyRecord; +import lombok.Getter; +import org.jooq.DSLContext; +import org.jooq.InsertReturningStep; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import static com.databasir.dao.Tables.DOCUMENT_TEMPLATE_PROPERTY; + +@Repository +public class DocumentTemplatePropertyDao extends BaseDao { + + @Autowired + @Getter + private DSLContext dslContext; + + public DocumentTemplatePropertyDao() { + super(DOCUMENT_TEMPLATE_PROPERTY, DocumentTemplatePropertyPojo.class); + } + + public void batchInsertOnDuplicateIgnore(Collection data) { + if (data == null || data.isEmpty()) { + return; + } + List> query = data.stream() + .map(pojo -> + + getDslContext() + .insertInto(DOCUMENT_TEMPLATE_PROPERTY) + .set(getDslContext().newRecord(DOCUMENT_TEMPLATE_PROPERTY, pojo)) + .onDuplicateKeyIgnore()) + .collect(Collectors.toList()); + getDslContext().batch(query).execute(); + } + + public void batchInsertOnDuplicateKeyUpdate(Collection data) { + if (data == null || data.isEmpty()) { + return; + } + List> query = data.stream() + .map(pojo -> getDslContext() + .insertInto(DOCUMENT_TEMPLATE_PROPERTY) + .set(getDslContext().newRecord(DOCUMENT_TEMPLATE_PROPERTY, pojo)) + .onDuplicateKeyUpdate() + .set(DOCUMENT_TEMPLATE_PROPERTY.VALUE, pojo.getValue())) + .collect(Collectors.toList()); + getDslContext().batch(query).execute(); + } +}