Skip to content

Commit

Permalink
Merge branch 'feature-DATAAPI-21_atomic-changes-and-formula-fields' i…
Browse files Browse the repository at this point in the history
…nto release-3.6.0
  • Loading branch information
DominicWatson committed Aug 3, 2023
2 parents 7625dc8 + a57e886 commit 1407651
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 6 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## v3.5.5

* [#73](https://github.com/pixl8/preside-ext-data-api/issues/73) Exit early from field rendering to avoid needless handler invocation

## v3.5.4

* [#71](https://github.com/pixl8/preside-ext-data-api/issues/71) Remove unecessary helper methods
Expand Down
5 changes: 3 additions & 2 deletions config/Config.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ component {
settings.features.restTokenAuth.enabled = true;

settings.features.dataApiQueue = settings.features.dataApiQueue ?: { enabled=true };
settings.features.dataApiUseNullForNumerics = settings.features.dataApiUseNullForNumerics ?: { enabled=true };
settings.features.dataApiUseNullForStrings = settings.features.dataApiUseNullForStrings ?: { enabled=true };
settings.features.dataApiUseNullForNumerics = settings.features.dataApiUseNullForNumerics ?: { enabled=true };
settings.features.dataApiUseNullForStrings = settings.features.dataApiUseNullForStrings ?: { enabled=true };
settings.features.dataApiFormulaFieldsForAtomic = settings.features.dataApiFormulaFieldsForAtomic ?: { enabled=true };
}

private void function _setupRestApis( required struct settings ) {
Expand Down
41 changes: 41 additions & 0 deletions services/DataApiConfigurationService.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,27 @@ component {
} );
}

public array function getEntityFormulaFields( required string entity, boolean aliases=false ) {
var args = arguments;
var cacheKey = "getEntityFormulaFields" & _getDataApiNamespace() & args.entity & args.aliases;

return _simpleLocalCache( cacheKey, function(){
var entities = getEntities();
var fields = entities[ args.entity ].formulaFields ?: [];

if ( !args.aliases ) {
return fields;
}

var aliases = [];
var fieldSettings = getFieldSettings( args.entity );
for( var field in fields ) {
ArrayAppend( aliases, fieldSettings[ field ].alias ?: field );
}
return aliases;
} );
}

public array function getFilterFields( required string entity ) {
var args = arguments;
var cacheKey = "getFilterFields" & _getDataApiNamespace() & args.entity;
Expand Down Expand Up @@ -235,6 +256,10 @@ component {

entities[ entityName ].upsertFields = _cleanupUpsertFields( objectName, entities[ entityName ].upsertFields, entities[ entityName ].allowIdInsert );

if ( $isFeatureEnabled( "dataApiFormulaFieldsForAtomic" ) ) {
entities[ entityName ].formulaFields = _formulaFields( objectName, namespace );
}

if ( excludeFields.len() ) {
for( var field in ListToArray( excludeFields ) ) {
entities[ entityName ].selectFields.delete( field );
Expand Down Expand Up @@ -648,6 +673,22 @@ component {
return fields;
}

private array function _formulaFields( required string objectName, required string namespace ) {
var props = $getPresideObjectService().getObjectProperties( arguments.objectName );
var propEnabledKey = "dataApiEnabled#arguments.namespace#";
var fields = [];

for( var fieldName in props ) {
if ( ( len( trim( props[ fieldName ].formula ?: "" ) ) || len( trim( props[ fieldName ].default ?: "" ) ) ) &&
( !isBoolean( props[ fieldName ][ propEnabledKey ] ?: "" ) || !props[ fieldName ][ propEnabledKey ] )
) {
arrayAppend( fields, fieldName );
}
}

return fields;
}

private array function _cleanupUpsertFields( required string objectName, required array fields, required boolean allowIdInsert ) {
var props = $getPresideObjectService().getObjectProperties( objectName );
var idField = $getPresideObjectService().getIdField( objectName );
Expand Down
18 changes: 14 additions & 4 deletions services/DataApiQueueService.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ component {

switch( record.operation ) {
case "delete":
returnStruct.data.append( {
StructAppend( returnStruct.data, {
operation = "delete"
, entity = entity
, recordId = record.record_id
Expand All @@ -72,14 +72,24 @@ component {
};
if ( queueSettings.atomicChanges && Len( Trim( record.data ) ) ) {
try {
dataEntry.record = _aliasFields( record.object_name, DeserializeJson( record.data ) );
var recordData = DeserializeJson( record.data );

if ( $isFeatureEnabled( "dataApiFormulaFieldsForAtomic" ) ) {
var formulaFields = configSvc.getEntityFormulaFields( entity=entity );

if ( ArrayLen( formulaFields ) ) {
StructAppend( recordData, apiSvc.getSingleRecord( entity=entity, recordId=record.record_id, fields=formulaFields ), false );
}
}

dataEntry.record = _aliasFields( record.object_name, recordData );
} catch( any e ) {
dataEntry.record = record.data;
}
} else {
dataEntry.record = apiSvc.getSingleRecord( entity=entity, recordId=record.record_id, fields=[] )
}
returnStruct.data.append( dataEntry );
StructAppend( returnStruct.data, dataEntry );
}
}
}
Expand Down Expand Up @@ -391,7 +401,7 @@ component {
var configService = _getConfigService();
for( var key in arguments.data ) {
var alias = configService.getAliasForPropertyName( arguments.objectName, key );
aliased[ alias ] = arguments.data[ key ];
aliased[ alias ] = arguments.data[ key ] ?: nullValue();
}

return aliased;
Expand Down
4 changes: 4 additions & 0 deletions services/DataApiService.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,10 @@ component {
return $isFeatureEnabled( "dataApiUseNullForStrings" ) ? NullValue() : "";
}

if ( !Len( arguments.value ?: "" ) ) {
return $isFeatureEnabled( "dataApiUseNullForStrings" ) ? NullValue() : "";
}

if ( $getContentRendererService().rendererExists( renderer, "dataapi" ) ) {
try {
var renderedContent = $renderContent( renderer, arguments.value, "dataapi", arguments.fieldSettings );
Expand Down

0 comments on commit 1407651

Please sign in to comment.