Movatterモバイル変換


[0]ホーム

URL:


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

Commitb3a33dd

Browse files
authored
Merge pull request#707 from lowcoder-org/ptm-apps-enhancements
Private/Public Marketplace Feature
2 parents5cfac16 +ac12f11 commitb3a33dd

File tree

13 files changed

+149
-27
lines changed

13 files changed

+149
-27
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public interface ApplicationRepository extends ReactiveMongoRepository<Applicati
3838
Flux<Application>findByPublicToAllIsTrueAndPublicToMarketplaceIsOrAgencyProfileIsAndIdIn
3939
(BooleanpublicToMarketplace,BooleanagencyProfile,Collection<String>ids);
4040

41+
Flux<Application>findByPublicToAllIsTrueAndPublicToMarketplaceIsAndAgencyProfileIsAndIdIn(BooleanpublicToMarketplace,BooleanagencyProfile,Collection<String>ids);
42+
4143
Flux<Application>findByPublicToAllIsTrueAndPublicToMarketplaceIsTrue();
4244

4345
Flux<Application>findByPublicToAllIsTrueAndAgencyProfileIsTrue();

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

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33

44
importstaticorg.lowcoder.domain.application.ApplicationUtil.getDependentModulesFromDsl;
55

6-
importjava.util.Collection;
7-
importjava.util.List;
8-
importjava.util.Map;
9-
importjava.util.Set;
6+
importjava.util.*;
107
importjava.util.stream.Collectors;
118

129
importorg.lowcoder.domain.application.model.Application;
@@ -155,11 +152,43 @@ public Mono<Boolean> setApplicationPublicToAll(String applicationId, boolean pub
155152
returnmongoUpsertHelper.updateById(application,applicationId);
156153
}
157154

158-
publicMono<Boolean>setApplicationPublicToMarketplace(StringapplicationId,booleanpublicToMarketplace) {
159-
Applicationapplication =Application.builder()
160-
.publicToMarketplace(publicToMarketplace)
161-
.build();
162-
returnmongoUpsertHelper.updateById(application,applicationId);
155+
publicMono<Boolean>setApplicationPublicToMarketplace(StringapplicationId,BooleanpublicToMarketplace,
156+
Stringtitle,Stringcategory,Stringdescription,Stringimage) {
157+
158+
returnfindById(applicationId)
159+
.map(application -> {
160+
Map<String,Object>applicationDsl =application.getEditingApplicationDSL();
161+
if (applicationDsl.containsKey("ui")) {
162+
Map<String,Object>dataObject = (Map<String,Object>)applicationDsl.get("ui");
163+
164+
if(publicToMarketplace) {
165+
Map<String,Object>marketplaceMeta =newHashMap<>();
166+
marketplaceMeta.put("title",title);
167+
marketplaceMeta.put("description",description);
168+
marketplaceMeta.put("category",category);
169+
marketplaceMeta.put("image",image);
170+
if (dataObject.containsKey("marketplaceMeta")) {
171+
dataObject.replace("marketplaceMeta",marketplaceMeta);
172+
}else {
173+
dataObject.put("marketplaceMeta",marketplaceMeta);
174+
}
175+
}else {
176+
dataObject.remove("marketplaceMeta");
177+
}
178+
179+
applicationDsl.replace("ui",dataObject);
180+
181+
}
182+
183+
returnApplication.builder()
184+
.publicToMarketplace(publicToMarketplace)
185+
.editingApplicationDSL(applicationDsl)
186+
.build();
187+
188+
})
189+
.flatMap(application ->mongoUpsertHelper.updateById(application,applicationId));
190+
191+
163192
}
164193

165194
publicMono<Boolean>setApplicationAsAgencyProfile(StringapplicationId,booleanagencyProfile) {
@@ -171,10 +200,24 @@ public Mono<Boolean> setApplicationAsAgencyProfile(String applicationId, boolean
171200

172201
@NonEmptyMono
173202
@SuppressWarnings("ReactiveStreamsNullableInLambdaInTransform")
174-
publicMono<Set<String>>getPublicApplicationIds(Collection<String>applicationIds,BooleanisAnonymous) {
175-
returnrepository.findByPublicToAllIsTrueAndPublicToMarketplaceIsOrAgencyProfileIsAndIdIn(!isAnonymous, !isAnonymous,applicationIds)
176-
.map(HasIdAndAuditing::getId)
177-
.collect(Collectors.toSet());
203+
publicMono<Set<String>>getPublicApplicationIds(Collection<String>applicationIds,BooleanisAnonymous,BooleanisPrivateMarketplace) {
204+
205+
if(isAnonymous) {
206+
if(isPrivateMarketplace) {
207+
returnrepository.findByPublicToAllIsTrueAndPublicToMarketplaceIsAndAgencyProfileIsAndIdIn(false,false,applicationIds)
208+
.map(HasIdAndAuditing::getId)
209+
.collect(Collectors.toSet());
210+
}else {
211+
returnrepository.findByPublicToAllIsTrueAndPublicToMarketplaceIsAndAgencyProfileIsAndIdIn(true,false,applicationIds)
212+
.map(HasIdAndAuditing::getId)
213+
.collect(Collectors.toSet());
214+
}
215+
}else {
216+
returnrepository.findByPublicToAllIsTrueAndPublicToMarketplaceIsOrAgencyProfileIsAndIdIn(true,true,applicationIds)
217+
.map(HasIdAndAuditing::getId)
218+
.collect(Collectors.toSet());
219+
}
220+
178221

179222
}
180223
}

‎server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ApplicationPermissionHandler.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ protected Mono<Map<String, List<ResourcePermission>>> getAnonymousUserPermission
4646
}
4747

4848
Set<String>applicationIds =newHashSet(resourceIds);
49-
returnMono.zip(applicationService.getPublicApplicationIds(applicationIds,Boolean.TRUE),
49+
returnMono.zip(applicationService.getPublicApplicationIds(applicationIds,Boolean.TRUE,config.getMarketplace().isPrivateMode()),
5050
templateSolution.getTemplateApplicationIds(applicationIds))
5151
.map(tuple -> {
5252
Set<String>publicAppIds =tuple.getT1();
@@ -61,7 +61,7 @@ protected Mono<Map<String, List<ResourcePermission>>> getAnonymousUserPermission
6161
(Collection<String>resourceIds,ResourceActionresourceAction) {
6262

6363
Set<String>applicationIds =newHashSet(resourceIds);
64-
returnMono.zip(applicationService.getPublicApplicationIds(applicationIds,Boolean.FALSE),
64+
returnMono.zip(applicationService.getPublicApplicationIds(applicationIds,Boolean.FALSE,config.getMarketplace().isPrivateMode()),
6565
templateSolution.getTemplateApplicationIds(applicationIds))
6666
.map(tuple -> {
6767
Set<String>publicAppIds =tuple.getT1();

‎server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionHandler.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
importorg.lowcoder.domain.permission.model.ResourceRole;
2727
importorg.lowcoder.domain.permission.model.ResourceType;
2828
importorg.lowcoder.domain.permission.model.UserPermissionOnResourceStatus;
29+
importorg.lowcoder.sdk.config.CommonConfig;
2930
importorg.springframework.beans.factory.annotation.Autowired;
3031

3132
importcom.google.common.collect.Maps;
@@ -44,6 +45,9 @@ abstract class ResourcePermissionHandler {
4445
@Autowired
4546
privateOrgMemberServiceorgMemberService;
4647

48+
@Autowired
49+
protectedCommonConfigconfig;
50+
4751
publicMono<Map<String,List<ResourcePermission>>>getAllMatchingPermissions(StringuserId,
4852
Collection<String>resourceIds,
4953
ResourceActionresourceAction) {

‎server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/config/CommonConfig.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class CommonConfig {
4444
privateCookiecookie =newCookie();
4545
privateJsExecutorjsExecutor =newJsExecutor();
4646
privateSet<String>disallowedHosts =newHashSet<>();
47+
privateMarketplacemarketplace =newMarketplace();
4748

4849
publicbooleanisSelfHost() {
4950
return !isCloud();
@@ -145,6 +146,12 @@ public static class JsExecutor {
145146
privateStringhost;
146147
}
147148

149+
@Data
150+
publicstaticclassMarketplace {
151+
152+
privatebooleanprivateMode =Boolean.TRUE;
153+
}
154+
148155

149156
@Getter
150157
@Setter

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -514,10 +514,11 @@ public Mono<Boolean> setApplicationPublicToAll(String applicationId, boolean pub
514514
.then(applicationService.setApplicationPublicToAll(applicationId,publicToAll));
515515
}
516516

517-
publicMono<Boolean>setApplicationPublicToMarketplace(StringapplicationId,booleanpublicToMarketplace) {
517+
publicMono<Boolean>setApplicationPublicToMarketplace(StringapplicationId,ApplicationEndpoints.ApplicationPublicToMarketplaceRequestrequest) {
518518
returncheckCurrentUserApplicationPermission(applicationId,ResourceAction.SET_APPLICATIONS_PUBLIC_TO_MARKETPLACE)
519519
.then(checkApplicationStatus(applicationId,NORMAL))
520-
.then(applicationService.setApplicationPublicToMarketplace(applicationId,publicToMarketplace));
520+
.then(applicationService.setApplicationPublicToMarketplace
521+
(applicationId,request.publicToMarketplace(),request.title(),request.category(),request.description(),request.image()));
521522
}
522523

523524
publicMono<Boolean>setApplicationAsAgencyProfile(StringapplicationId,booleanagencyProfile) {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
importorg.lowcoder.api.application.view.ApplicationView;
1818
importorg.lowcoder.api.application.view.MarketplaceApplicationInfoView;
1919
importorg.lowcoder.api.framework.view.ResponseView;
20+
importorg.lowcoder.api.home.SessionUserService;
2021
importorg.lowcoder.api.home.UserHomeApiService;
2122
importorg.lowcoder.api.home.UserHomepageView;
2223
importorg.lowcoder.api.util.BusinessEventPublisher;
@@ -39,6 +40,7 @@ public class ApplicationController implements ApplicationEndpoints {
3940
privatefinalUserHomeApiServiceuserHomeApiService;
4041
privatefinalApplicationApiServiceapplicationApiService;
4142
privatefinalBusinessEventPublisherbusinessEventPublisher;
43+
privatefinalSessionUserServicesessionUserService;
4244

4345
@Override
4446
publicMono<ResponseView<ApplicationView>>create(@RequestBodyCreateApplicationRequestcreateApplicationRequest) {
@@ -155,7 +157,7 @@ public Mono<ResponseView<List<MarketplaceApplicationInfoView>>> getMarketplaceAp
155157
@Override
156158
publicMono<ResponseView<List<MarketplaceApplicationInfoView>>>getAgencyProfileApplications(@RequestParam(required =false)IntegerapplicationType) {
157159
ApplicationTypeapplicationTypeEnum =applicationType ==null ?null :ApplicationType.fromValue(applicationType);
158-
returnuserHomeApiService.getAllMarketplaceApplications(applicationTypeEnum)
160+
returnuserHomeApiService.getAllAgencyProfileApplications(applicationTypeEnum)
159161
.collectList()
160162
.map(ResponseView::success);
161163
}
@@ -214,7 +216,7 @@ public Mono<ResponseView<Boolean>> setApplicationPublicToAll(@PathVariable Strin
214216
@Override
215217
publicMono<ResponseView<Boolean>>setApplicationPublicToMarketplace(@PathVariableStringapplicationId,
216218
@RequestBodyApplicationPublicToMarketplaceRequestrequest) {
217-
returnapplicationApiService.setApplicationPublicToMarketplace(applicationId,request.publicToMarketplace())
219+
returnapplicationApiService.setApplicationPublicToMarketplace(applicationId,request)
218220
.map(ResponseView::success);
219221
}
220222

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,33 @@ public Boolean publicToAll() {
270270
}
271271
}
272272

273-
publicrecordApplicationPublicToMarketplaceRequest(BooleanpublicToMarketplace) {
273+
publicrecordApplicationPublicToMarketplaceRequest(BooleanpublicToMarketplace,Stringtitle,
274+
Stringdescription,Stringcategory,Stringimage) {
274275
@Override
275276
publicBooleanpublicToMarketplace() {
276277
returnBooleanUtils.isTrue(publicToMarketplace);
277278
}
279+
280+
@Override
281+
publicStringtitle() {
282+
returntitle;
283+
}
284+
285+
@Override
286+
publicStringdescription() {
287+
returndescription;
288+
}
289+
290+
@Override
291+
publicStringcategory() {
292+
returncategory;
293+
}
294+
295+
@Override
296+
publicStringimage() {
297+
returnimage;
298+
}
299+
278300
}
279301

280302
publicrecordApplicationAsAgencyProfileRequest(BooleanagencyProfile) {

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/view/MarketplaceApplicationInfoView.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,20 @@
22

33
importlombok.Builder;
44
importlombok.Getter;
5+
importlombok.Setter;
56
importorg.lowcoder.domain.application.model.ApplicationStatus;
67

78
@Builder
89
@Getter
10+
@Setter
911
publicclassMarketplaceApplicationInfoView {
1012

13+
// marketplace specific details
14+
privateStringtitle;
15+
privateStringdescription;
16+
privateStringcategory;
17+
privateStringimage;
18+
1119
// org details
1220
privatefinalStringorgId;
1321
privatefinalStringorgName;

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/security/SecurityConfig.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
108108
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,CONFIG_URL),// system config
109109
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,CONFIG_URL +"/deploymentId"),// system config
110110
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,APPLICATION_URL +"/*/view"),// application view
111+
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,APPLICATION_URL +"/*/view_marketplace"),// application view
112+
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,APPLICATION_URL +"/marketplace-apps"),// marketplace apps
113+
111114
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,USER_URL +"/me"),
112115
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,USER_URL +"/currentUser"),
113116

@@ -132,6 +135,8 @@ SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
132135
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.CONFIG_URL +"/deploymentId"),
133136
ServerWebExchangeMatchers.pathMatchers(HttpMethod.HEAD,NewUrl.STATE_URL +"/healthCheck"),
134137
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.APPLICATION_URL +"/*/view"),
138+
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.APPLICATION_URL +"/*/view_marketplace"),
139+
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.APPLICATION_URL +"/marketplace-apps"),// marketplace apps
135140
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.USER_URL +"/me"),
136141
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.USER_URL +"/currentUser"),
137142
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.GROUP_URL +"/list"),
@@ -177,6 +182,8 @@ private CorsConfigurationSource buildCorsConfigurationSource() {
177182
source.registerCorsConfiguration(GROUP_URL +"/list",skipCheckCorsForAll);
178183
source.registerCorsConfiguration(QUERY_URL +"/execute",skipCheckCorsForAll);
179184
source.registerCorsConfiguration(APPLICATION_URL +"/*/view",skipCheckCorsForAll);
185+
source.registerCorsConfiguration(APPLICATION_URL +"/*/view_marketplace",skipCheckCorsForAll);
186+
source.registerCorsConfiguration(APPLICATION_URL +"/marketplace-apps",skipCheckCorsForAll);
180187
source.registerCorsConfiguration(GITHUB_STAR,skipCheckCorsForAll);
181188
source.registerCorsConfiguration(ORGANIZATION_URL +"/*/datasourceTypes",skipCheckCorsForAll);
182189
source.registerCorsConfiguration(DATASOURCE_URL +"/jsDatasourcePlugins",skipCheckCorsForAll);
@@ -186,6 +193,8 @@ private CorsConfigurationSource buildCorsConfigurationSource() {
186193
source.registerCorsConfiguration(NewUrl.GROUP_URL +"/list",skipCheckCorsForAll);
187194
source.registerCorsConfiguration(NewUrl.QUERY_URL +"/execute",skipCheckCorsForAll);
188195
source.registerCorsConfiguration(NewUrl.APPLICATION_URL +"/*/view",skipCheckCorsForAll);
196+
source.registerCorsConfiguration(NewUrl.APPLICATION_URL +"/*/view_marketplace",skipCheckCorsForAll);
197+
source.registerCorsConfiguration(NewUrl.APPLICATION_URL +"/marketplace-apps",skipCheckCorsForAll);
189198
source.registerCorsConfiguration(NewUrl.ORGANIZATION_URL +"/*/datasourceTypes",skipCheckCorsForAll);
190199
source.registerCorsConfiguration(NewUrl.DATASOURCE_URL +"/jsDatasourcePlugins",skipCheckCorsForAll);
191200

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp