1111import lombok .extern .jackson .Jacksonized ;
1212import org .apache .commons .collections4 .MapUtils ;
1313import org .apache .commons .lang3 .BooleanUtils ;
14+ import org .lowcoder .domain .application .ApplicationUtil ;
15+ import org .lowcoder .domain .application .service .ApplicationRecordService ;
1416import org .lowcoder .domain .query .model .ApplicationQuery ;
1517import org .lowcoder .sdk .exception .BizError ;
1618import org .lowcoder .sdk .exception .BizException ;
1921import org .springframework .data .annotation .Transient ;
2022import org .springframework .data .mongodb .core .mapping .Document ;
2123import org .springframework .util .StringUtils ;
24+ import reactor .core .publisher .Mono ;
2225
2326import java .time .Instant ;
2427import java .util .*;
@@ -41,7 +44,6 @@ public class Application extends HasIdAndAuditing {
4144 private Integer applicationType ;
4245 private ApplicationStatus applicationStatus ;
4346
44- private Map <String , Object > publishedApplicationDSL ;
4547 private Map <String , Object > editingApplicationDSL ;
4648
4749 @ Setter
@@ -63,7 +65,6 @@ public Application(
6365 @ JsonProperty ("name" ) String name ,
6466 @ JsonProperty ("applicationType" ) Integer applicationType ,
6567 @ JsonProperty ("applicationStatus" ) ApplicationStatus applicationStatus ,
66- @ JsonProperty ("publishedApplicationDSL" ) Map <String , Object > publishedApplicationDSL ,
6768 @ JsonProperty ("editingApplicationDSL" ) Map <String , Object > editingApplicationDSL ,
6869 @ JsonProperty ("publicToAll" ) Boolean publicToAll ,
6970 @ JsonProperty ("publicToMarketplace" ) Boolean publicToMarketplace ,
@@ -76,7 +77,6 @@ public Application(
7677 this .name = name ;
7778 this .applicationType = applicationType ;
7879 this .applicationStatus = applicationStatus ;
79- this .publishedApplicationDSL = publishedApplicationDSL ;
8080 this .publicToAll = publicToAll ;
8181 this .publicToMarketplace = publicToMarketplace ;
8282 this .agencyProfile = agencyProfile ;
@@ -87,43 +87,28 @@ public Application(
8787
8888 @ Transient
8989 private final Supplier <Set <ApplicationQuery >> editingQueries =
90- memoize (() -> Optional . ofNullable (editingApplicationDSL )
90+ memoize (() -> ofNullable (editingApplicationDSL )
9191 .map (map -> map .get ("queries" ))
9292 .map (queries -> JsonUtils .fromJsonSet (JsonUtils .toJson (queries ), ApplicationQuery .class ))
9393 .orElse (Collections .emptySet ()));
9494
95- @ Transient
96- private final Supplier <Set <ApplicationQuery >> liveQueries =
97- memoize (() -> JsonUtils .fromJsonSet (JsonUtils .toJson (getLiveApplicationDsl ().get ("queries" )), ApplicationQuery .class ));
98-
9995 @ Transient
10096 private final Supplier <Set <String >> editingModules = memoize (() -> getDependentModulesFromDsl (editingApplicationDSL ));
10197
102- @ Transient
103- private final Supplier <Set <String >> liveModules = memoize (() -> getDependentModulesFromDsl (getLiveApplicationDsl ()));
104-
105- @ Transient
106- private final Supplier <Object > liveContainerSize = memoize (() -> {
107- if (ApplicationType .APPLICATION .getValue () == getApplicationType ()) {
108- return null ;
109- }
110- return getContainerSizeFromDSL (getLiveApplicationDsl ());
111- });
112-
11398 public Set <ApplicationQuery > getEditingQueries () {
11499 return editingQueries .get ();
115100 }
116101
117- public Set <ApplicationQuery > getLiveQueries () {
118- return liveQueries . get ();
102+ public Mono < Set <ApplicationQuery >> getLiveQueries (ApplicationRecordService applicationRecordService ) {
103+ return getLiveApplicationDsl ( applicationRecordService ). mapNotNull ( liveApplicationDSL -> JsonUtils . fromJsonSet ( JsonUtils . toJson ( liveApplicationDSL . get ("queries" )), ApplicationQuery . class ) );
119104 }
120105
121106 public Set <String > getEditingModules () {
122107 return editingModules .get ();
123108 }
124109
125- public Set <String > getLiveModules () {
126- return liveModules . get ( );
110+ public Mono < Set <String >> getLiveModules (ApplicationRecordService applicationRecordService ) {
111+ return getLiveApplicationDsl ( applicationRecordService ). map ( ApplicationUtil :: getDependentModulesFromDsl );
127112 }
128113
129114 public boolean isPublicToAll () {
@@ -138,23 +123,25 @@ public boolean agencyProfile() {
138123 return BooleanUtils .toBooleanDefaultIfNull (agencyProfile , false );
139124 }
140125
141- public ApplicationQuery getQueryByViewModeAndQueryId (boolean isViewMode , String queryId ) {
142- return ( isViewMode ? getLiveQueries () : getEditingQueries ())
126+ public Mono < ApplicationQuery > getQueryByViewModeAndQueryId (boolean isViewMode , String queryId , ApplicationRecordService applicationRecordService ) {
127+ return getLiveQueries ( applicationRecordService ). map ( liveQueries -> ( isViewMode ? liveQueries : getEditingQueries ())
143128 .stream ()
144129 .filter (query -> queryId .equals (query .getId ()) || queryId .equals (query .getGid ()))
145130 .findFirst ()
146- .orElseThrow (() -> new BizException (BizError .QUERY_NOT_FOUND , "LIBRARY_QUERY_NOT_FOUND" ));
131+ .orElseThrow (() -> new BizException (BizError .QUERY_NOT_FOUND , "LIBRARY_QUERY_NOT_FOUND" ))) ;
147132 }
148133
149134 /**
150135 * all published dsl will be kept in a list in the future
151136 */
152137 @ Transient
153138 @ JsonIgnore
154- public Map <String , Object > getLiveApplicationDsl () {
155- var dsl = MapUtils .isEmpty (publishedApplicationDSL ) ? editingApplicationDSL : publishedApplicationDSL ;
156- if (dsl == null ) dsl = new HashMap <>();
157- return dsl ;
139+ public Mono <Map <String , Object >> getLiveApplicationDsl (ApplicationRecordService applicationRecordService ) {
140+ return applicationRecordService .getLatestRecordByApplicationId (this .getId ()).map (applicationRecord -> {
141+ Map <String , Object > dsl = applicationRecord == null ? editingApplicationDSL : applicationRecord .getApplicationDSL ();
142+ if (dsl == null ) dsl = new HashMap <>();
143+ return dsl ;
144+ });
158145 }
159146
160147 public String getOrganizationId () {
@@ -193,12 +180,17 @@ public String getCategory() {
193180
194181 public Map <String , Object > getEditingApplicationDSLOrNull () {return editingApplicationDSL ; }
195182
196- public Object getLiveContainerSize () {
197- return liveContainerSize .get ();
183+ public Mono <Object > getLiveContainerSize (ApplicationRecordService applicationRecordService ) {
184+ return getLiveApplicationDsl (applicationRecordService ).flatMap (dsl -> {
185+ if (ApplicationType .APPLICATION .getValue () == getApplicationType ()) {
186+ return Mono .empty ();
187+ }
188+ return Mono .just (getContainerSizeFromDSL (dsl ));
189+ });
198190 }
199191
200- public Map <String , Object > getPublishedApplicationDSL () {
201- return publishedApplicationDSL ;
192+ public Mono < Map <String , Object >> getPublishedApplicationDSL (ApplicationRecordService applicationRecordService ) {
193+ return applicationRecordService . getLatestRecordByApplicationId ( this . getId ()). map ( ApplicationRecord :: getApplicationDSL ) ;
202194 }
203195
204196}
0 commit comments