Skip to content

Commit 915dc91

Browse files
committed
feat: solve the deserialization of polymorphism in mongodb
1 parent cd7c5a2 commit 915dc91

25 files changed

+212
-159
lines changed

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/authentication/AuthenticationServiceImpl.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ private Flux<FindAuthConfig> findAllAuthConfigsByDomain() {
7070
.stream()
7171
.map(abstractAuthConfig -> new FindAuthConfig(abstractAuthConfig, organization))
7272
.collect(Collectors.toList())
73-
)
74-
.doOnNext(__ -> log.info("find auth configs by domain"));
73+
);
7574
}
7675

7776
protected Flux<FindAuthConfig> findAllAuthConfigsForEnterpriseMode() {
@@ -84,15 +83,13 @@ protected Flux<FindAuthConfig> findAllAuthConfigsForEnterpriseMode() {
8483
.stream()
8584
.map(abstractAuthConfig -> new FindAuthConfig(abstractAuthConfig, organization))
8685
.collect(Collectors.toList())
87-
)
88-
.doOnNext(__ -> log.info("find auth configs for enterprise mode."));
86+
);
8987
}
9088

9189
private Flux<FindAuthConfig> findAllAuthConfigsForSaasMode() {
9290
if (commonConfig.getWorkspace().getMode() == WorkspaceMode.SAAS) {
9391
return Flux.fromIterable(authProperties.getAuthConfigs())
94-
.map(abstractAuthConfig -> new FindAuthConfig(abstractAuthConfig, null))
95-
.doOnNext(__ -> log.info("find auth configs for saas mode"));
92+
.map(abstractAuthConfig -> new FindAuthConfig(abstractAuthConfig, null));
9693
}
9794
return Flux.empty();
9895
}

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/configurations/MongoConfig.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import com.mongodb.ReadConcern;
2626
import com.mongodb.ReadPreference;
2727
import com.mongodb.WriteConcern;
28-
import com.openblocks.domain.encryption.EncryptionService;
29-
import com.openblocks.domain.encryption.ModelEncryptionEventListener;
3028
import com.openblocks.domain.user.model.User;
3129
import com.openblocks.sdk.config.MaterialProperties;
3230
import com.openblocks.sdk.models.HasIdAndAuditing;
@@ -104,10 +102,4 @@ public ReactiveGridFsTemplate reactiveGridFsTemplate(ReactiveMongoDatabaseFactor
104102
public MongoTemplate mongoTemplate(MongoDatabaseFactory mongoDbFactory, MappingMongoConverter mappingMongoConverter) {
105103
return new MongoTemplate(mongoDbFactory, mappingMongoConverter);
106104
}
107-
108-
@Bean
109-
public <E> ModelEncryptionEventListener<E> encryptionMongoEventListener(EncryptionService encryptionService) {
110-
return new ModelEncryptionEventListener<>(encryptionService);
111-
}
112-
113105
}

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/encryption/DecryptRequired.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/encryption/EncryptRequired.java

Lines changed: 0 additions & 7 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.openblocks.domain.mongodb;
2+
3+
public interface AfterMongodbRead {
4+
5+
void afterMongodbRead(MongodbInterceptorContext context);
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.openblocks.domain.mongodb;
2+
3+
public interface BeforeMongodbWrite {
4+
5+
void beforeMongodbWrite(MongodbInterceptorContext context);
6+
}
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
1-
package com.openblocks.domain.encryption;
1+
package com.openblocks.domain.mongodb;
22

3+
import org.springframework.beans.factory.annotation.Autowired;
34
import org.springframework.context.event.EventListener;
45
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
56
import org.springframework.data.mongodb.core.mapping.event.AfterConvertEvent;
67
import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;
8+
import org.springframework.stereotype.Component;
79

10+
import com.openblocks.domain.encryption.EncryptionService;
811
import com.openblocks.infra.mongo.MongoUpsertHelper;
912
import com.openblocks.sdk.event.BeforeSaveEvent;
1013

1114
import lombok.extern.slf4j.Slf4j;
1215

1316
@Slf4j
14-
public class ModelEncryptionEventListener<E> extends AbstractMongoEventListener<E> {
17+
@Component
18+
public class MongodbEventListener<E> extends AbstractMongoEventListener<E> {
1519

16-
private final EncryptionService encryptionService;
17-
18-
public ModelEncryptionEventListener(EncryptionService encryptionService) {
19-
this.encryptionService = encryptionService;
20-
}
20+
@Autowired
21+
private EncryptionService encryptionService;
2122

2223
@Override
2324
public void onBeforeConvert(BeforeConvertEvent<E> event) {
2425
E source = event.getSource();
2526

26-
if (source instanceof EncryptRequired encryptRequired) {
27-
encryptRequired.encrypt(encryptionService);
27+
if (source instanceof BeforeMongodbWrite beforeMongodbWrite) {
28+
beforeMongodbWrite.beforeMongodbWrite(new MongodbInterceptorContext(encryptionService));
2829
}
2930
}
3031

3132
@Override
3233
public void onAfterConvert(AfterConvertEvent<E> event) {
3334
E source = event.getSource();
3435

35-
if (source instanceof DecryptRequired decryptRequired) {
36-
decryptRequired.decrypt(encryptionService);
36+
if (source instanceof AfterMongodbRead afterMongodbRead) {
37+
afterMongodbRead.afterMongodbRead(new MongodbInterceptorContext(encryptionService));
3738
}
3839
}
3940

@@ -44,8 +45,8 @@ public void onAfterConvert(AfterConvertEvent<E> event) {
4445
public <T> void onBeforeSaveEvent(BeforeSaveEvent<T> beforeSaveEvent) {
4546
T source = beforeSaveEvent.source();
4647

47-
if (source instanceof EncryptRequired encryptRequired) {
48-
encryptRequired.encrypt(encryptionService);
48+
if (source instanceof BeforeMongodbWrite beforeMongodbWrite) {
49+
beforeMongodbWrite.beforeMongodbWrite(new MongodbInterceptorContext(encryptionService));
4950
}
5051
}
5152
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.openblocks.domain.mongodb;
2+
3+
import com.openblocks.domain.encryption.EncryptionService;
4+
5+
public record MongodbInterceptorContext(EncryptionService encryptionService) {
6+
}

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/organization/model/EnterpriseConnectionConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66

77
public interface EnterpriseConnectionConfig {
88

9-
List<AbstractAuthConfig> getAuthConfigs();
9+
List<AbstractAuthConfig> getConfigs();
1010
}

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/organization/model/Organization.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
import com.fasterxml.jackson.annotation.JsonIgnore;
1717
import com.fasterxml.jackson.annotation.JsonProperty;
18-
import com.openblocks.domain.encryption.DecryptRequired;
19-
import com.openblocks.domain.encryption.EncryptRequired;
20-
import com.openblocks.domain.encryption.EncryptionService;
18+
import com.openblocks.domain.mongodb.AfterMongodbRead;
19+
import com.openblocks.domain.mongodb.BeforeMongodbWrite;
20+
import com.openblocks.domain.mongodb.MongodbInterceptorContext;
2121
import com.openblocks.sdk.auth.AbstractAuthConfig;
2222
import com.openblocks.sdk.models.HasIdAndAuditing;
2323

@@ -30,7 +30,7 @@
3030
@Setter
3131
@NoArgsConstructor
3232
@Document
33-
public class Organization extends HasIdAndAuditing implements EncryptRequired, DecryptRequired {
33+
public class Organization extends HasIdAndAuditing implements BeforeMongodbWrite, AfterMongodbRead {
3434

3535
private static final OrganizationCommonSettings EMPTY_SETTINGS = new OrganizationCommonSettings();
3636

@@ -68,17 +68,15 @@ public String toString() {
6868
}
6969

7070
@Override
71-
public void decrypt(EncryptionService encryptionService) {
71+
public void afterMongodbRead(MongodbInterceptorContext context) {
7272
ofNullable(getOrganizationDomain())
73-
.map(domain -> domain.doDecrypt(encryptionService::decryptString))
74-
.ifPresent(this::setOrganizationDomain);
73+
.ifPresent(domain -> domain.afterMongodbRead(context));
7574
}
7675

7776
@Override
78-
public void encrypt(EncryptionService encryptionService) {
77+
public void beforeMongodbWrite(MongodbInterceptorContext context) {
7978
ofNullable(getOrganizationDomain())
80-
.map(domain -> domain.doEncrypt(encryptionService::encryptString))
81-
.ifPresent(this::setOrganizationDomain);
79+
.ifPresent(domain -> domain.beforeMongodbWrite(context));
8280
}
8381

8482
public OrganizationCommonSettings getCommonSettings() {
@@ -99,7 +97,7 @@ public long getCreateTime() {
9997

10098
public List<AbstractAuthConfig> getAuthConfigs() {
10199
return Optional.ofNullable(organizationDomain)
102-
.map(OrganizationDomain::getAuthConfigs)
100+
.map(OrganizationDomain::getConfigs)
103101
.orElse(Collections.emptyList());
104102
}
105103
}

0 commit comments

Comments
 (0)