🗞️Effingo

Effingo is a SaaS service to copy Naviga Doc articles to print articles, update the articles according to a configuration and connect the articles to a list.

API

The API consists of a lambda function which is called through a load balancer. There's also a S3 bucket for storing conversion rules configurations. The API is implemented using Twirp and therefore supports both protobuf and Rest calls.

Endpoints

  • GetConfiguration - Get specified transformation configuration.

  • AddConfiguration - Add transformation configuration.

  • RemoveConfiguration - Remove transformation configuration.

  • CopyListArticles - Copy articles and connect the copies to a list using transformation configuration and sets the publication date.

  • PrintArticle - Copy an article using transformation configuration and sets the publication date.

  • AddConfiguration and RemoveConfiguration requires permission "effingo:administration".

  • CopyListArticles, PrintArticle and GetConfiguration requires permission "effingo:user.

Transform Configuration

A transform configuration is used for specifying conditions and updates for example set properties, add and remove blocks.

Transformation fields use_channel and use_any_channel controls if mainchannel, channels or both should be checked to match channel_selection. The same property will be updated for the article copy.

When optional transformation field use_any_channel is set to true the channel selection is checked for either a matching mainchannel link or channel link.

For reference about the navigadoc document format see https://github.com/navigacontentlab/navigadoc.

There is one configuration for each unit. The configuration is stored per organisation and unit.

The configuration has a number of updates which is applied either per mainchannel or to all articles. The operations can be conditioned to match/not match a property or block, for example a specific category.

The action can be add or remove a block and/or property. For blocks the path should be specified to the articles content, meta or links section.

Configuration

  • use_channel Checks channel links instead of mainchannel for destination and channel selection when set.

  • use_any_channel Matches channel_selection for both main channel and channel.

  • sorting Optional list sorting specification.

  • transformations The optional transformations to be performed on copied articles.

Transformations

  • name Optional transformation description.

  • channel_selection Transformation is only applied to article copies with these mainchannels. If not set or empty channel_selection the transformation will be applied to articles with any mainchannel.

  • conditions Optional conditions to filter articles by matching blocks or properties for which the transformation should be applied.

  • updates The updates for setting properties, document status and removing and adding blocks.

Replacing a block can be accomplished with remove_block followed by aadd_block updates.

Conditions

  • match Match all blocks and properties that are listed in the defined path or all if no path is set.

  • no_match Check that no listed block or property is set in the defined path or all if no path is set.

Possible path values in add_blocks and remove_blocks for limiting the match to a document section are

  • "Any" or 0 - find anywhere in the document Links, Content or Meta and the default value

  • "Links" or 1 find in document Links

  • "Content" or 2 find in document Content and

  • "Meta" or 3 find in document Meta.

Match and NoMatch checks listed blocks, listed properties and optional document status. Static document properties that can be checked with properties name/value are

  • "status"

  • "provider"

  • "language"

  • "published" and

  • "unpublished".

Updates

The update can remove blocks, add blocks and set properties. Replacing a blocks is accomplished by remove and add block.

  • remove_blocks Removes the specified blocks in a specified path if found.

  • add_blocks Adds the specified blocks in a specified path.

  • set_properties Set document properties. If a property value is empty the property will be removed. Static properties that can be updated are the same as listed above for match/no_match.

  • document_status Set the document status to the specified value.

Example: General transformation for source article main channel with conditions and updates

Sorting and grouping

The articles in the list can be sorted and grouped in descending or ascending order by adding the sorting clause.

Sorting

  • insert_sort sorts inserted articles by best effort but does not change the sorting for the existing articles in the list. When insert_sort is not set articles are added last in the list. Default is false.

  • sort_property is optional and applies sorting before grouping when used.

  • group_property is optional and applies grouping by a property or block. Must be specified when group_pattern is used since the group_pattern uses the value from group_property.

  • group_pattern is used for grouping in a specified order and not for example alphabetically, see below for type of grouping with type.

Sort and group property

  • property for sorting or grouping by document property value or property parameter. Use value_field "parameters:name" to lookup parameter "name". Default for value_field is "value" which looks up the property value.

  • block Used for looking up a document block value. The name of the block property is given in the value_field. To lookup a value from block data the data field should be prefixed by "data:" in the value_field.

  • type The sort type for string or number.

  • descending Sorts the elements descending if set to true. Not applicable for grouping when group_pattern is being used.

To use a value for a block stored in data use prefix data: for the value_field.

To use a parameters value for properties use prefix parameters: for the value_field.

The value_field is case insensitive.

The sort_property type can be set to sort as string, integer or float.

  • SortString or 0 is the default

  • SortInt or 1

  • SortFloat or 2

The group_property type can be set to sort as string, integer or float. When group_pattern is used the type can be set to group by pattern in two different ways.

  • GroupDefined or 3 which means the articles are grouped in the group pattern defined.

  • GroupRolling or 4 takes the first article with the specified pattern, according to the sorted values value and then the next value and starts over if there are more articles.

Example: Sort and group by pattern

Sort articles descending according to the number property priority and group according to the pattern.

Transform Configuration Examples

Example: Remove and add blocks

Example: Remove x-im/teaser block

Example: Change property

Example: Set document status

Deployment

To deploy the effingo service in a specific region you can do the following.

  • Install infomaker/core/deploy-manager with brew.

  • Checkout this project and go to the project folder.

  • Set the aws profile and region for example. The region should be eu-west-1 since that's where deploy-manager is running.

  • Ensure that the ssm parameters exists in region and environment:

  • Create bindings note the branch value must match the profile used (im-saasdev|im-saasstage|im-saasprod) Get the bindings for the environment.

If bindings can't be found the should be created, otherwise just add the wanted region:

or

  • List bindings:

  • Ensure pipelines using:

You should see that the new region is being created for example:

  • Deploy the latest version:

Last updated