Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b0078ef

Browse files
Merge branch 'dev' into feature-funnelChart
2 parents 0531190 + 6e090b5 commit b0078ef

File tree

12 files changed

+70
-34
lines changed

12 files changed

+70
-34
lines changed

‎client/packages/lowcoder-comps/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lowcoder-comps",
3-
"version": "2.5.4",
3+
"version": "2.5.5",
44
"type": "module",
55
"license": "MIT",
66
"dependencies": {

‎client/packages/lowcoder/src/pages/editor/appEditorInternal.tsx‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,18 @@ function useSaveComp(
5353
if (!comp || comp === prevComp) {
5454
return;
5555
}
56+
5657
const curJson = comp.toJsonValue();
5758
const curJsonStr = JSON.stringify(curJson);
5859

59-
6060
if (!Boolean(prevAppId) && Boolean(applicationId)) {
6161
return setPrevAppId(applicationId);
6262
}
6363
if (prevAppId !== applicationId) {
6464
return setPrevAppId(applicationId);
6565
}
6666
if (!Boolean(prevJsonStr) && Boolean(curJsonStr)) {
67+
setPrevComp(comp)
6768
return setPrevJsonStr(curJsonStr);
6869
}
6970
if (prevJsonStr === curJsonStr) {
@@ -84,7 +85,7 @@ function useSaveComp(
8485
setPrevComp(comp);
8586
setPrevJsonStr(curJsonStr);
8687
setPrevAppId(applicationId);
87-
}, [comp, prevAppId,applicationId,prevComp,prevJsonStr, readOnly, dispatch]);
88+
}, [comp, applicationId, readOnly, dispatch]);
8889
}
8990

9091
interface AppEditorInternalViewProps {

‎client/packages/lowcoder/src/pages/userAuth/formLoginSteps.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ const StepHeader = (props : {
6666
title: string,
6767
}) => (
6868
<Flex justify="center" style={{marginBottom: '22px'}}>
69-
<h3 style={{margin: 0}}>{props.title}</h3>
69+
<h3 style={{margin: 0,padding: '2px 0 0 8px'}}>{props.title}</h3>
7070
</Flex>
7171
)
7272

‎server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/repository/ApplicationRepository.java‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,21 @@ public interface ApplicationRepository extends ReactiveMongoRepository<Applicati
2929
@Aggregation(pipeline = {"{ $match: { gid: ?0 } }", "{ $project: { 'editingApplicationDSL.settings': 1, _id: 1, gid: 1, organizationId: 1, name: 1, applicationType: 1, applicationStatus: 1, publicToAll: 1, publicToMarketplace: 1, agencyProfile: 1, editingUserId: 1, lastEditedAt: 1, createdAt: 1, updatedAt: 1, createdBy: 1, modifiedBy: 1, _class: 1}}"})
3030
Flux<Application> findByGid(@Nonnull String gid);
3131

32+
@Aggregation(pipeline = {"{ $match: { slug: ?0 } }", "{ $project: { 'editingApplicationDSL.settings': 1, _id: 1, gid: 1, organizationId: 1, name: 1, applicationType: 1, applicationStatus: 1, publicToAll: 1, publicToMarketplace: 1, agencyProfile: 1, editingUserId: 1, lastEditedAt: 1, createdAt: 1, updatedAt: 1, createdBy: 1, modifiedBy: 1, _class: 1}}"})
33+
Flux<Application> findBySlug(@Nonnull String slug);
34+
3235
Mono<Long> countByOrganizationIdAndApplicationStatus(String organizationId, ApplicationStatus applicationStatus);
3336

3437
@Query("{$or : [{'publishedApplicationDSL.queries.datasourceId':?0},{'editingApplicationDSL.queries.datasourceId':?0}]}")
3538
Flux<Application> findByDatasourceId(String datasourceId);
3639

3740
Flux<Application> findByIdIn(Collection<String> ids);
3841
Flux<Application> findByGidIn(Collection<String> ids);
42+
Flux<Application> findBySlugIn(Collection<String> slugs);
3943

4044
Flux<Application> findByCreatedByAndIdIn(String userId, Collection<String> ids);
4145
Flux<Application> findByCreatedByAndGidIn(String userId, Collection<String> gids);
46+
Flux<Application> findByCreatedByAndSlugIn(String userId, Collection<String> slugs);
4247

4348
/**
4449
* Filter public applications from list of supplied IDs
@@ -67,6 +72,8 @@ public interface ApplicationRepository extends ReactiveMongoRepository<Applicati
6772
* Find all agency applications
6873
*/
6974
Flux<Application> findByPublicToAllIsTrueAndAgencyProfileIsTrue();
70-
Mono<Boolean> existsBySlug(String slug);
75+
76+
@Query("{ 'organizationId': ?0, 'slug': ?1 }")
77+
Mono<Boolean> existsByOrganizationIdAndSlug(String organizationId, String slug);
7178

7279
}

‎server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/application/service/ApplicationServiceImpl.java‎

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.lowcoder.domain.permission.model.ResourceType;
1919
import org.lowcoder.domain.permission.service.ResourcePermissionService;
2020
import org.lowcoder.domain.user.repository.UserRepository;
21+
import org.lowcoder.domain.util.SlugUtils;
2122
import org.lowcoder.infra.annotation.NonEmptyMono;
2223
import org.lowcoder.infra.mongo.MongoUpsertHelper;
2324
import org.lowcoder.sdk.constants.FieldName;
@@ -60,9 +61,13 @@ public Mono<Application> findByIdWithoutDsl(String id) {
6061
return Mono.error(new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ID));
6162
}
6263

63-
if(FieldName.isGID(id))
64-
return Mono.from(repository.findByGid(id)).switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "CANT_FIND_APPLICATION", id)));
65-
return repository.findById(id)
64+
return Mono.from(repository.findBySlug(id))
65+
.switchIfEmpty(
66+
Mono.defer(() -> {
67+
if (FieldName.isGID(id))
68+
return Mono.from(repository.findByGid(id));
69+
return repository.findById(id);
70+
}))
6671
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "CANT_FIND_APPLICATION", id)));
6772
}
6873

@@ -123,7 +128,7 @@ public Mono<Long> countByOrganizationId(String orgId, ApplicationStatus applicat
123128
public Flux<Application> findByIdIn(List<String> applicationIds) {
124129
if(!applicationIds.isEmpty() && FieldName.isGID(applicationIds.get(0)))
125130
return repository.findByGidIn(applicationIds);
126-
return repository.findByIdIn(applicationIds);
131+
return repository.findBySlugIn(applicationIds).switchIfEmpty(repository.findByIdIn(applicationIds));
127132
}
128133

129134
@Override
@@ -279,7 +284,7 @@ public Mono<Set<String>> getPrivateApplicationIds(Collection<String> application
279284
.map(Application::getGid)
280285
.collect(Collectors.toSet());
281286

282-
return repository.findByCreatedByAndIdIn(userId, applicationIds)
287+
return repository.findByCreatedByAndSlugIn(userId, applicationIds).switchIfEmpty(repository.findByCreatedByAndIdIn(userId, applicationIds))
283288
.map(HasIdAndAuditing::getId)
284289
.collect(Collectors.toSet());
285290
}
@@ -349,15 +354,15 @@ public Mono<Map<String, Object>> getLiveDSLByApplicationId(String applicationId)
349354

350355
@Override
351356
public Mono<Application> updateSlug(String applicationId, String newSlug) {
352-
return repository.existsBySlug(newSlug).flatMap(exists -> {
357+
return repository.findById(applicationId).flatMap(application -> repository.existsByOrganizationIdAndSlug(application.getOrganizationId(), newSlug).flatMap(exists -> {
358+
if (!SlugUtils.validate(newSlug)) {
359+
return Mono.error(new BizException(BizError.SLUG_INVALID, "SLUG_INVALID"));
360+
}
353361
if (exists) {
354-
return Mono.error(new BizException(BizError.DUPLICATE_ENTRY, "Slug already exists"));
362+
return Mono.error(new BizException(BizError.SLUG_DUPLICATE_ENTRY, "SLUG_DUPLICATE_ENTRY"));
355363
}
356-
return repository.findById(applicationId)
357-
.flatMap(application -> {
358-
application.setSlug(newSlug);
359-
return repository.save(application);
360-
});
361-
});
364+
application.setSlug(newSlug);
365+
return repository.save(application);
366+
}));
362367
}
363368
}

‎server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ public interface OrganizationRepository extends ReactiveMongoRepository<Organiza
1616

1717
Flux<Organization> findByIdInAndState(Collection<String> id, OrganizationState state);
1818
Flux<Organization> findByGidInAndState(Collection<String> gid, OrganizationState state);
19+
Flux<Organization> findBySlugInAndState(Collection<String> slug, OrganizationState state);
1920
Flux<Organization> findByGid(String gid);
21+
Flux<Organization> findBySlug(String slug);
2022
Flux<Organization> findByState(OrganizationState state);
2123

2224
Mono<Organization> findByIdAndState(String id, OrganizationState state);
2325
Mono<Organization> findByGidAndState(String gid, OrganizationState state);
26+
Mono<Organization> findBySlugAndState(String slug, OrganizationState state);
2427

2528
Mono<Organization> findBySourceAndThirdPartyCompanyIdAndState(String source, String tpCompanyId, OrganizationState state);
2629

‎server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.lowcoder.domain.organization.repository.OrganizationRepository;
1717
import org.lowcoder.domain.user.model.User;
1818
import org.lowcoder.domain.user.repository.UserRepository;
19+
import org.lowcoder.domain.util.SlugUtils;
1920
import org.lowcoder.infra.annotation.PossibleEmptyMono;
2021
import org.lowcoder.infra.mongo.MongoUpsertHelper;
2122
import org.lowcoder.sdk.config.CommonConfig;
@@ -169,7 +170,7 @@ public Mono<Organization> getById(String id) {
169170
if(FieldName.isGID(id))
170171
return repository.findByGidAndState(id, ACTIVE)
171172
.switchIfEmpty(deferredError(UNABLE_TO_FIND_VALID_ORG, "INVALID_ORG_ID"));
172-
return repository.findByIdAndState(id, ACTIVE)
173+
return repository.findBySlugAndState(id, ACTIVE).switchIfEmpty(repository.findByIdAndState(id, ACTIVE))
173174
.switchIfEmpty(deferredError(UNABLE_TO_FIND_VALID_ORG, "INVALID_ORG_ID"));
174175
}
175176

@@ -179,7 +180,7 @@ public Mono<OrganizationCommonSettings> getOrgCommonSettings(String orgId) {
179180
return repository.findByGidAndState(orgId, ACTIVE)
180181
.switchIfEmpty(deferredError(UNABLE_TO_FIND_VALID_ORG, "INVALID_ORG_ID"))
181182
.map(Organization::getCommonSettings);
182-
return repository.findByIdAndState(orgId, ACTIVE)
183+
return repository.findBySlugAndState(orgId, ACTIVE).switchIfEmpty(repository.findByIdAndState(orgId, ACTIVE))
183184
.switchIfEmpty(deferredError(UNABLE_TO_FIND_VALID_ORG, "INVALID_ORG_ID"))
184185
.map(Organization::getCommonSettings);
185186
}
@@ -188,7 +189,7 @@ public Mono<OrganizationCommonSettings> getOrgCommonSettings(String orgId) {
188189
public Flux<Organization> getByIds(Collection<String> ids) {
189190
if(!ids.isEmpty() && FieldName.isGID(ids.stream().findFirst().get()))
190191
return repository.findByGidInAndState(ids, ACTIVE);
191-
return repository.findByIdInAndState(ids, ACTIVE);
192+
return repository.findBySlugInAndState(ids, ACTIVE).switchIfEmpty(repository.findByIdInAndState(ids, ACTIVE));
192193
}
193194

194195
@Override
@@ -221,7 +222,7 @@ public Mono<Boolean> uploadLogo(String organizationId, Part filePart) {
221222
public Mono<Boolean> deleteLogo(String organizationId) {
222223
Mono<Organization> organizationMono;
223224
if(FieldName.isGID(organizationId)) organizationMono = repository.findByGidAndState(organizationId, ACTIVE);
224-
else organizationMono = repository.findByIdAndState(organizationId, ACTIVE);
225+
else organizationMono = repository.findBySlugAndState(organizationId, ACTIVE).switchIfEmpty(repository.findByIdAndState(organizationId, ACTIVE));
225226
return organizationMono
226227
.flatMap(organization -> {
227228
// delete from asset repo.
@@ -292,8 +293,11 @@ private String buildCommonSettingsUpdateTimeKey(String key) {
292293
@Override
293294
public Mono<Organization> updateSlug(String organizationId, String newSlug) {
294295
return repository.existsBySlug(newSlug).flatMap(exists -> {
296+
if (!SlugUtils.validate(newSlug)) {
297+
return Mono.error(new BizException(BizError.SLUG_INVALID, "SLUG_INVALID"));
298+
}
295299
if (exists) {
296-
return Mono.error(new BizException(BizError.DUPLICATE_ENTRY, "Slug already exists"));
300+
return Mono.error(new BizException(BizError.SLUG_DUPLICATE_ENTRY, "SLUG_DUPLICATE_ENTRY"));
297301
}
298302
return repository.findById(organizationId)
299303
.flatMap(organization -> {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.lowcoder.domain.util;
2+
3+
public class SlugUtils {
4+
public static Boolean validate(String slug) {
5+
return slug.matches("^[a-zA-Z0-9_-]*$");
6+
}
7+
}

‎server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/exception/BizError.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ public enum BizError {
154154
ILLEGAL_BUNDLE_PERMISSION_ID(500, 6404),
155155

156156
//slug 6501 - 6501
157-
DUPLICATE_ENTRY(403, 6501);
157+
SLUG_DUPLICATE_ENTRY(403, 6501),
158+
SLUG_INVALID(403, 6502);
158159

159160
static {
160161
checkDuplicates(values(), BizError::getBizErrorCode);

‎server/api-service/lowcoder-sdk/src/main/resources/locale_en.properties‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,4 +282,6 @@ ORG_DELETED_FOR_ENTERPRISE_MODE=Provided enterpriseOrgId workspace has been dele
282282
DISABLE_AUTH_CONFIG_FORBIDDEN=Can not disable current administrator''s last identity provider.
283283
USER_NOT_EXIST=User not exist.
284284
DUPLICATE_AUTH_CONFIG_ADDITION=Provider auth type already added to organization
285-
EMAIL_PROVIDER_DISABLED=Email provider is disabled.
285+
EMAIL_PROVIDER_DISABLED=Email provider is disabled.
286+
SLUG_DUPLICATE_ENTRY=Slug already exists
287+
SLUG_INVALID=Slug format is invalid

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /