Skip to content

Commit a5b0a84

Browse files
authored
Merge pull request lowcoder-org#167 from jerry-goodman/develop
Improve the material api and fix some bugs
2 parents 0c7c917 + 34663fc commit a5b0a84

File tree

22 files changed

+205
-115
lines changed

22 files changed

+205
-115
lines changed

server/openblocks-domain/src/main/java/com/openblocks/domain/material/model/MaterialMeta.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ public class MaterialMeta extends HasIdAndAuditing {
1515
private String filename;
1616
private String orgId;
1717
private long size;// in bytes
18+
private MaterialType type;
1819
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.openblocks.domain.material.model;
2+
3+
public enum MaterialType {
4+
5+
COMMON, LOGO, FAVICON
6+
}

server/openblocks-domain/src/main/java/com/openblocks/domain/material/repository/MaterialMateRepository.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.springframework.stereotype.Repository;
55

66
import com.openblocks.domain.material.model.MaterialMeta;
7+
import com.openblocks.domain.material.model.MaterialType;
78

89
import reactor.core.publisher.Flux;
910
import reactor.core.publisher.Mono;
@@ -13,5 +14,9 @@ public interface MaterialMateRepository extends ReactiveMongoRepository<Material
1314

1415
Flux<MaterialMeta> findByOrgId(String orgId);
1516

17+
Flux<MaterialMeta> findByOrgIdAndType(String orgId, MaterialType type);
18+
19+
Flux<MaterialMeta> findByOrgIdAndFilenameAndType(String orgId, String filename, MaterialType type);
20+
1621
Mono<Boolean> existsByOrgIdAndFilename(String orgId, String filename);
1722
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ public OrganizationCommonSettings getCommonSettings() {
8484
public static class OrganizationCommonSettings extends HashMap<String, Object> {
8585
public static final String USER_EXTRA_TRANSFORMER = "userExtraTransformer";
8686
public static final String USER_EXTRA_TRANSFORMER_UPDATE_TIME = "userExtraTransformer_updateTime";
87+
88+
// custom branding configs
89+
public static final String CUSTOM_BRANDING_KEY = "branding";
8790
}
8891

8992
public long getCreateTime() {

server/openblocks-domain/src/main/java/com/openblocks/domain/organization/service/OrganizationService.java

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

1616
public interface OrganizationService {
1717

18+
@PossibleEmptyMono
19+
Mono<Organization> getOrganizationInEnterpriseMode();
20+
1821
Mono<Organization> create(Organization organization, String creatorUserId);
1922

2023
Mono<Organization> createDefault(User user);

server/openblocks-domain/src/main/java/com/openblocks/domain/organization/service/OrganizationServiceImpl.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.openblocks.domain.organization.model.QOrganization;
3030
import com.openblocks.domain.organization.repository.OrganizationRepository;
3131
import com.openblocks.domain.user.model.User;
32+
import com.openblocks.infra.annotation.PossibleEmptyMono;
3233
import com.openblocks.infra.mongo.MongoUpsertHelper;
3334
import com.openblocks.sdk.config.CommonConfig;
3435
import com.openblocks.sdk.config.dynamic.Conf;
@@ -91,7 +92,7 @@ public Mono<Organization> createDefault(User user) {
9192
return create(organization, user.getId());
9293
}
9394
// enterprise mode
94-
return joinOrgForEnterpriseMode(user.getId())
95+
return joinOrganizationInEnterpriseMode(user.getId())
9596
.flatMap(join -> {
9697
if (Boolean.TRUE.equals(join)) {
9798
return Mono.empty();
@@ -101,17 +102,26 @@ public Mono<Organization> createDefault(User user) {
101102
});
102103
}
103104

104-
private Mono<Boolean> joinOrgForEnterpriseMode(String userId) {
105+
private Mono<Boolean> joinOrganizationInEnterpriseMode(String userId) {
106+
return getOrganizationInEnterpriseMode()
107+
.flatMap(organization -> orgMemberService.addMember(organization.getId(), userId, MemberRole.MEMBER))
108+
.defaultIfEmpty(false);
109+
}
110+
111+
@Override
112+
@PossibleEmptyMono
113+
public Mono<Organization> getOrganizationInEnterpriseMode() {
114+
if (commonConfig.getWorkspace().getMode() == WorkspaceMode.SAAS) {
115+
return Mono.empty();
116+
}
105117
return Mono.defer(() -> {
106118
String enterpriseOrgId = commonConfig.getWorkspace().getEnterpriseOrgId();
107119
if (StringUtils.isNotBlank(enterpriseOrgId)) {
108120
return repository.findById(enterpriseOrgId);
109121
}
110122
return Mono.empty();
111123
})
112-
.switchIfEmpty(repository.findAll().next())
113-
.flatMap(organization -> orgMemberService.addMember(organization.getId(), userId, MemberRole.MEMBER))
114-
.defaultIfEmpty(false);
124+
.switchIfEmpty(repository.findAll().next());
115125
}
116126

117127
@Override

server/openblocks-infra/src/main/java/com/openblocks/infra/birelation/BiRelationService.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ public Mono<Boolean> upsert(BiRelation biRelation) {
7777
Preconditions.checkArgument(isNotBlank(biRelation.getTargetId()));
7878
Preconditions.checkArgument(biRelation.getBizType() != null);
7979

80-
Query query = buildQuery(biRelation.getSourceId(), biRelation.getTargetId(), biRelation.getBizType());
81-
return mongoUpsertHelper.upsert(biRelation, query);
80+
Criteria criteria = buildCriteria(biRelation.getSourceId(), biRelation.getTargetId(), biRelation.getBizType());
81+
return mongoUpsertHelper.upsert(biRelation, criteria);
8282
}
8383

8484
public Flux<BiRelation> getBySourceIds(BiRelationBizType bizType, Collection<String> sourceIds) {
@@ -169,11 +169,14 @@ public Mono<Long> countByTargetId(BiRelationBizType bizType, String targetId) {
169169
return biRelationRepository.countByBizTypeAndTargetId(bizType, targetId);
170170
}
171171

172-
private Query buildQuery(String sourceId, String targetId, BiRelationBizType bizType) {
173-
Criteria criteria = where(BIZ_TYPE).is(bizType)
172+
private Criteria buildCriteria(String sourceId, String targetId, BiRelationBizType bizType) {
173+
return where(BIZ_TYPE).is(bizType)
174174
.and(SOURCE_ID).is(sourceId)
175175
.and(TARGET_ID).is(targetId);
176-
return new Query(criteria);
176+
}
177+
178+
private Query buildQuery(String sourceId, String targetId, BiRelationBizType bizType) {
179+
return new Query(buildCriteria(sourceId, targetId, bizType));
177180
}
178181

179182
public Mono<BiRelation> getById(String id) {

server/openblocks-infra/src/main/java/com/openblocks/infra/constant/NewUrl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package com.openblocks.infra.constant;
22

33
public final class NewUrl {
4+
5+
private NewUrl() {
6+
}
7+
48
public static final String PREFIX = "/api";
59
public static final String ORGANIZATION_URL = PREFIX + "/organizations";
610
public static final String DATASOURCE_URL = PREFIX + "/datasources";
@@ -21,5 +25,7 @@ public final class NewUrl {
2125
public static final String LIBRARY_QUERY_RECORD_URL = PREFIX + "/library-query-records";
2226

2327
public static final String FOLDER_URL = PREFIX + "/folders";
28+
29+
public static final String GITHUB_STAR = PREFIX + "/misc/github-star";
2430
public static final String MATERIAL_URL = PREFIX + "/materials";
2531
}

server/openblocks-infra/src/main/java/com/openblocks/infra/mongo/MongoUpsertHelper.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,26 +89,39 @@ public <T extends HasIdAndAuditing> Mono<T> upsertWithAuditingParams(T newResour
8989
.switchIfEmpty(Mono.defer(() -> reactiveMongoTemplate.save(newResource)));
9090
}
9191

92+
/**
93+
* reactiveMongoTemplate#upsert is not used because createdAt/createdBy/updatedAt/updatedBy params cannot be set here
94+
*/
95+
@SuppressWarnings("unchecked")
96+
public <T extends HasIdAndAuditing> Mono<T> upsertWithAuditingParams(T newResource, Criteria criteria) {
97+
return reactiveMongoTemplate.findOne(new Query(criteria), (Class<T>) newResource.getClass())
98+
.flatMap(existingResource -> {
99+
newResource.setId(existingResource.getId());
100+
newResource.setCreatedAt(existingResource.getCreatedAt());
101+
newResource.setCreatedBy(existingResource.getCreatedBy());
102+
return reactiveMongoTemplate.save(newResource);
103+
})
104+
.switchIfEmpty(Mono.defer(() -> reactiveMongoTemplate.save(newResource)));
105+
}
106+
92107
/**
93108
* used for createdAt/createdBy/updatedAt/updatedBy is not required
94109
*/
95110
public <T> Mono<Boolean> upsert(T newResource, String uniqueKeyName, String uniqueKeyValue) {
96-
Query query = new Query(Criteria.where(uniqueKeyName).is(uniqueKeyValue));
97-
return upsert(newResource, query);
111+
return upsert(newResource, Criteria.where(uniqueKeyName).is(uniqueKeyValue));
98112
}
99113

100114
public Mono<Boolean> upsert(Update update, String uniqueKeyName, String uniqueKeyValue, Class<?> collection) {
101-
Query query = new Query(Criteria.where(uniqueKeyName).is(uniqueKeyValue));
102-
return upsert(update, query, collection);
115+
return upsert(update, Criteria.where(uniqueKeyName).is(uniqueKeyValue), collection);
103116
}
104117

105-
public <T> Mono<Boolean> upsert(T newResource, Query query) {
118+
public <T> Mono<Boolean> upsert(T newResource, Criteria criteria) {
106119
Update update = convertToUpdate(newResource);
107-
return upsert(update, query, newResource.getClass());
120+
return upsert(update, criteria, newResource.getClass());
108121
}
109122

110-
public Mono<Boolean> upsert(Update update, Query query, Class<?> collection) {
111-
return reactiveMongoTemplate.upsert(query, update, collection)
123+
public Mono<Boolean> upsert(Update update, Criteria criteria, Class<?> collection) {
124+
return reactiveMongoTemplate.upsert(new Query(criteria), update, collection)
112125
.map(updateResult -> updateResult.getModifiedCount() > 0);
113126
}
114127

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.openblocks.sdk.util;
2+
3+
import com.google.common.hash.Hashing;
4+
5+
public class HashUtils {
6+
7+
@SuppressWarnings("UnstableApiUsage")
8+
public static String hash(byte[] content) {
9+
return Hashing.sha256().hashBytes(content).toString();
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.openblocks.api.util;
1+
package com.openblocks.sdk.util;
22

33
import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM;
44
import static org.springframework.http.MediaType.APPLICATION_PDF;
@@ -7,6 +7,7 @@
77
import static org.springframework.http.MediaType.IMAGE_PNG;
88

99
import javax.annotation.Nonnull;
10+
import javax.annotation.Nullable;
1011

1112
import org.apache.commons.lang3.StringUtils;
1213
import org.springframework.http.MediaType;
@@ -15,21 +16,34 @@
1516

1617
public class MediaTypeUtils {
1718

19+
@Nonnull
20+
@SuppressWarnings("ConstantConditions")
1821
public static MediaType parse(String filename) {
22+
return parse(filename, APPLICATION_OCTET_STREAM);
23+
}
24+
25+
@Nullable
26+
public static MediaType parse(String filename, @Nullable MediaType defaultContentType) {
1927
Preconditions.checkArgument(StringUtils.isNotBlank(filename));
2028
String[] split = filename.split("\\.");
21-
return getMediaType(split[split.length - 1]);
29+
return getMediaType(split[split.length - 1], defaultContentType);
2230
}
2331

2432
@Nonnull
33+
@SuppressWarnings("ConstantConditions")
2534
public static MediaType getMediaType(String fileType) {
35+
return getMediaType(fileType, APPLICATION_OCTET_STREAM);
36+
}
37+
38+
@Nullable
39+
public static MediaType getMediaType(String fileType, @Nullable MediaType defaultContentType) {
2640
return switch (fileType) {
2741
case "jpg", "jpeg" -> IMAGE_JPEG;
2842
case "gif" -> IMAGE_GIF;
2943
case "png" -> IMAGE_PNG;
3044
case "pdf" -> APPLICATION_PDF;
3145
case "svg" -> new MediaType("image", "svg+xml");
32-
default -> APPLICATION_OCTET_STREAM;
46+
default -> defaultContentType;
3347
};
3448
}
3549
}

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.openblocks.api.authentication.service;
22

33
import com.openblocks.api.authentication.request.AuthRequestContext;
4-
import com.openblocks.domain.organization.model.EnterpriseConnectionConfig;
54
import com.openblocks.domain.user.model.AuthorizedUser;
65
import com.openblocks.domain.user.model.User;
76
import com.openblocks.sdk.auth.AbstractAuthConfig;
@@ -17,6 +16,4 @@ public interface AuthenticationApiService {
1716
Mono<Void> onUserRegister(User user);
1817

1918
Mono<AbstractAuthConfig> findAuthConfig(String source, AuthRequestContext context, String domain);
20-
21-
Mono<EnterpriseConnectionConfig> getEnterpriseConnectionConfigMono(String domain);
2219
}

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
import com.openblocks.api.authentication.request.AuthRequestFactory;
1616
import com.openblocks.api.authentication.request.form.FormAuthRequestContext;
1717
import com.openblocks.api.usermanagement.OrgApiService;
18-
import com.openblocks.domain.organization.model.EnterpriseConnectionConfig;
19-
import com.openblocks.domain.organization.model.Organization;
2018
import com.openblocks.domain.organization.service.OrganizationService;
2119
import com.openblocks.domain.user.model.AuthorizedUser;
2220
import com.openblocks.domain.user.model.User;
@@ -80,14 +78,6 @@ public Mono<AbstractAuthConfig> findAuthConfig(String source, AuthRequestContext
8078
.switchIfEmpty(ofError(LOG_IN_SOURCE_NOT_SUPPORTED, "LOG_IN_SOURCE_NOT_SUPPORTED"));
8179
}
8280

83-
@Override
84-
public Mono<EnterpriseConnectionConfig> getEnterpriseConnectionConfigMono(String domain) {
85-
return organizationService.getByDomain(domain)
86-
.map(Organization::getOrganizationDomain)
87-
.cast(EnterpriseConnectionConfig.class)
88-
.defaultIfEmpty(envAuthConfig);
89-
}
90-
9181
@Override
9282
public Mono<Void> onUserRegister(User user) {
9383
return organizationService.createDefault(user).then();

server/openblocks-server/src/main/java/com/openblocks/api/config/ConfigController.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.openblocks.api.config;
22

3+
import javax.annotation.PostConstruct;
4+
35
import org.springframework.beans.factory.annotation.Autowired;
46
import org.springframework.web.bind.annotation.GetMapping;
57
import org.springframework.web.bind.annotation.PathVariable;
@@ -9,13 +11,15 @@
911
import org.springframework.web.bind.annotation.RestController;
1012
import org.springframework.web.server.ServerWebExchange;
1113

12-
import com.openblocks.api.authentication.service.AuthenticationApiService;
1314
import com.openblocks.api.framework.view.ResponseView;
15+
import com.openblocks.api.usermanagement.OrgApiService;
1416
import com.openblocks.infra.config.model.ServerConfig;
1517
import com.openblocks.infra.config.repository.ServerConfigRepository;
1618
import com.openblocks.infra.constant.NewUrl;
1719
import com.openblocks.infra.constant.Url;
1820
import com.openblocks.sdk.config.CommonConfig;
21+
import com.openblocks.sdk.config.dynamic.Conf;
22+
import com.openblocks.sdk.config.dynamic.ConfigCenter;
1923
import com.openblocks.sdk.util.UriUtils;
2024

2125
import lombok.extern.slf4j.Slf4j;
@@ -33,7 +37,22 @@ public class ConfigController {
3337
private ServerConfigRepository serverConfigRepository;
3438

3539
@Autowired
36-
private AuthenticationApiService authenticationApiService;
40+
private OrgApiService orgApiService;
41+
42+
@Autowired
43+
private ConfigCenter configCenter;
44+
45+
private Conf<String> deploymentIdConf;
46+
47+
@PostConstruct
48+
public void init() {
49+
deploymentIdConf = configCenter.deployment().ofString("id", "");
50+
}
51+
52+
@GetMapping(value = "/deploymentId")
53+
public Mono<String> getDeploymentId() {
54+
return Mono.just(deploymentIdConf.get());
55+
}
3756

3857
@GetMapping("/{key}")
3958
public Mono<ResponseView<ServerConfig>> getServerConfig(@PathVariable String key) {
@@ -51,14 +70,7 @@ public Mono<ResponseView<ServerConfig>> updateServerConfig(@PathVariable String
5170
@GetMapping
5271
public Mono<ResponseView<ConfigView>> getConfig(ServerWebExchange exchange) {
5372
String domain = UriUtils.getRefererDomain(exchange);
54-
return authenticationApiService.getEnterpriseConnectionConfigMono(domain)
55-
.map(enterpriseConnectionConfig ->
56-
ConfigView.builder()
57-
.authConfigs(enterpriseConnectionConfig.getAuthConfigs())
58-
.isCloudHosting(commonConfig.isCloud())
59-
.workspaceMode(commonConfig.getWorkspace().getMode())
60-
.build()
61-
)
73+
return orgApiService.getOrganizationConfigs(domain)
6274
.map(ResponseView::success);
6375
}
6476

server/openblocks-server/src/main/java/com/openblocks/api/config/ConfigView.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,15 @@
88
import com.openblocks.sdk.auth.AbstractAuthConfig;
99
import com.openblocks.sdk.constants.WorkspaceMode;
1010

11-
import lombok.Builder;
1211
import lombok.Getter;
12+
import lombok.experimental.SuperBuilder;
1313

14-
@Builder
1514
@Getter
15+
@SuperBuilder
1616
public class ConfigView {
1717

1818
private boolean isCloudHosting;
1919
private List<AbstractAuthConfig> authConfigs;
20-
@JsonInclude(Include.NON_EMPTY)
21-
private String warning;
2220
private WorkspaceMode workspaceMode;
21+
private boolean selfDomain;
2322
}

0 commit comments

Comments
 (0)