<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:07:04 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[FOLIO-611] Document general-purpose aggregation in business-modules</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-611</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;As discussed in a break-out session on Dublin day 2.&lt;/p&gt;</description>
                <environment></environment>
        <key id="79814">FOLIO-611</key>
            <summary>Document general-purpose aggregation in business-modules</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10002" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p3.svg">P3</priority>
                        <status id="3" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/inprogress.png" description="This issue is being actively worked on at the moment by the assignee.">In Progress</status>
                    <statusCategory id="4" key="indeterminate" colorName="yellow"/>
                                    <resolution id="-1">Unresolved</resolution>
                                                        <assignee accountid="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d">Jakub Skoczen</assignee>
                                                                <reporter accountid="5bffed52a1b46046f530c8f7">Mike Taylor</reporter>
                                    <labels>
                            <label>core</label>
                            <label>doc</label>
                            <label>dublin</label>
                            <label>sprint15</label>
                            <label>sprint18</label>
                            <label>sprint19</label>
                    </labels>
                <created>Fri, 19 May 2017 09:30:56 +0000</created>
                <updated>Tue, 15 Jan 2019 11:53:55 +0000</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>10</watches>
                                                    <timespent seconds="3600">1 hour</timespent>
                                <comments>
                                                            <comment id="190565" author="5bffed52a1b46046f530c8f7" created="Fri, 19 May 2017 09:31:45 +0000"  >&lt;p&gt;As far as I remember, we didn&apos;t take permanent notes on any of this. I remember what was said (at least, I think I do), so I will briefly write it up. Then we can decide who will actually &lt;em&gt;do&lt;/em&gt; it &lt;img class=&quot;emoticon&quot; src=&quot;/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                                                            <comment id="190569" author="5bffed52a1b46046f530c8f7" created="Fri, 19 May 2017 09:52:33 +0000"  >&lt;p&gt;&lt;b&gt;Problem statement&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Much of what we have talked about as being the work of the business-logic modules is not really business-login, in the sense that it involves no knowledge of the business.&lt;/p&gt;

&lt;p&gt;An example of actual business knowledge would be knowing that when you create a loan record for item &lt;em&gt;foo&lt;/em&gt; to user &lt;em&gt;bar&lt;/em&gt;, you also need to set the status of item &lt;em&gt;foo&lt;/em&gt; to &quot;On Loan&quot;.&lt;/p&gt;

&lt;p&gt;But the generic functionality that we have needed repeatedly is trivial joining of multiple low-level records to a high-level one. For example, when we fetch user &lt;em&gt;baz&lt;/em&gt;, the low-level user record that mod-users retrieves contains a &lt;b&gt;patronGroupId&lt;/b&gt;. But we want the record returned to the client to include the whole patron-group record corresponding to that ID (not least so we can see the patron-group&apos;s human-readable name, to show to the user).&lt;/p&gt;

&lt;p&gt;But more than this: we also need to attach multiple instances of other kinds of objects. For example, the user typically has multiple loans. There is no loanId in the low-level user record; a separately addressable loan object expresses the loan of an item to a user. So we need to check the loans API for all of user &lt;em&gt;baz&lt;/em&gt;&apos;s loans, and attach an object for each of these.&lt;/p&gt;

&lt;p&gt;So in general, we need the ability to join &lt;em&gt;both&lt;/em&gt; sub-objects that are directly linked from the main object &lt;em&gt;and&lt;/em&gt; those that are associated with it by a link table.&lt;/p&gt;</comment>
                                                            <comment id="190574" author="5bffed52a1b46046f530c8f7" created="Fri, 19 May 2017 09:56:43 +0000"  >&lt;p&gt;&lt;b&gt;How to express the request&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We need to let the client specify which of the many possible joined objects to include in the records that it gets &amp;#8211; for example, we might want a user&apos;s patron-group but not want to bother fetching the loans.&lt;/p&gt;

&lt;p&gt;The JSON-API people have a generic way of expressing requests, that we might adopt. See &lt;a href=&quot;http://jsonapi.org/format/#fetching-includes&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://jsonapi.org/format/#fetching-includes&lt;/a&gt; &amp;#8211; briefly, you ask for &lt;tt&gt;/users?include=patronGroups,loans&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;JSON-API also specifies a record format to be returned, containing these associated objects. I worry that this is overly pedantic and verbose.&lt;/p&gt;</comment>
                                                            <comment id="190578" author="5bffed52a1b46046f530c8f7" created="Fri, 19 May 2017 10:03:40 +0000"  >&lt;p&gt;&lt;b&gt;Permissions&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;There is &amp;#8211; or we thought there was &amp;#8211; an issue with what included information the logged-in user has access to. For example, I may be logged in as a user who has permission to see patron-groups, but not to see user-permissions.&lt;/p&gt;

&lt;p&gt;We ran out of time to think this through, but as it&apos;s turned over in my mind since then, I suspect there is actually no problem: the back-end should simply include whichever of the included subrecords there is permission for, but omit those that the user is not permitted to get. The aggregate response would come back as a 200 OK provided that the main object could be fetched and provided that the &lt;em&gt;only&lt;/em&gt; kind of error fetching the sub-objects is permission denied.&lt;/p&gt;</comment>
                                                            <comment id="190582" author="5bffed52a1b46046f530c8f7" created="Fri, 19 May 2017 10:04:06 +0000"  >&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; I have now captured everything we discussed &amp;#8211; but please, people, shout if I missed anything.&lt;/p&gt;</comment>
                                                            <comment id="190585" author="5d1cd1e35e43080ce8bf881f" created="Fri, 19 May 2017 10:04:48 +0000"  >&lt;p&gt;(The overly pedantic and verbose format for multiple-record-responses ie. compound documents: &lt;a href=&quot;http://jsonapi.org/format/#document-resource-identifier-objects&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://jsonapi.org/format/#document-resource-identifier-objects&lt;/a&gt; )&lt;/p&gt;</comment>
                                                            <comment id="190588" author="5c38e8d616ac1e4f7cbc660a" created="Fri, 19 May 2017 10:37:30 +0000"  >&lt;p&gt;Didn&apos;t we also have the issue of how to express schemas (for RAML) for the business logic modules? That is, how to build a new schema using references to existing ones, without having conflicts?&lt;/p&gt;</comment>
                                                            <comment id="190591" author="5bffed52a1b46046f530c8f7" created="Fri, 19 May 2017 10:39:32 +0000"  >&lt;p&gt;Ah yes, so we did! (My brain discarded that bit, because it&apos;s back-end only &lt;img class=&quot;emoticon&quot; src=&quot;/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt; )&lt;/p&gt;</comment>
                                                            <comment id="190593" author="63e2a2771b13d42998e4e706" created="Mon, 22 May 2017 11:12:07 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5c38e8d616ac1e4f7cbc660a&quot; class=&quot;user-hover&quot; rel=&quot;5c38e8d616ac1e4f7cbc660a&quot; data-account-id=&quot;5c38e8d616ac1e4f7cbc660a&quot; accountid=&quot;5c38e8d616ac1e4f7cbc660a&quot; rel=&quot;noreferrer&quot;&gt;Kurt Nordstrom&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5bffed52a1b46046f530c8f7&quot; class=&quot;user-hover&quot; rel=&quot;5bffed52a1b46046f530c8f7&quot; data-account-id=&quot;5bffed52a1b46046f530c8f7&quot; accountid=&quot;5bffed52a1b46046f530c8f7&quot; rel=&quot;noreferrer&quot;&gt;Mike Taylor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The issue for covering sharing of schema and interface definitions is 
    &lt;span class=&quot;jira-issue-macro&quot; data-jira-key=&quot;FOLIO-614&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-614&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Be able to share JSON schema definitions between interfaces&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium&quot; /&gt;
            FOLIO-614
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-complete jira-macro-single-issue-export-pdf&quot;&gt;Open&lt;/span&gt;
            &lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;Hugs&lt;/p&gt;</comment>
                                                            <comment id="190597" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Mon, 22 May 2017 11:19:45 +0000"  >&lt;p&gt;have been experimenting with the &quot;oneOf&quot;&lt;br/&gt;
see &lt;a href=&quot;http://json-schema.org/example2.html&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://json-schema.org/example2.html&lt;/a&gt; for an example.&lt;/p&gt;

&lt;p&gt;validation on the rmb layer will need coding to support this&lt;/p&gt;</comment>
                                                            <comment id="190601" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Tue, 23 May 2017 07:42:59 +0000"  >&lt;p&gt;an update on &lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
oneOf. 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; a usage example may look like this:&lt;/p&gt;


&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
  &lt;span class=&quot;code-quote&quot;&gt;&quot;patronGroup&quot;&lt;/span&gt;: {
    &lt;span class=&quot;code-quote&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;object&quot;&lt;/span&gt;,
    &lt;span class=&quot;code-quote&quot;&gt;&quot;oneOf&quot;&lt;/span&gt;: [
      {
        &lt;span class=&quot;code-quote&quot;&gt;&quot;$schema&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;http:&lt;span class=&quot;code-comment&quot;&gt;//json-schema.org/draft-04/schema#&quot;&lt;/span&gt;,
&lt;/span&gt;        &lt;span class=&quot;code-quote&quot;&gt;&quot;title&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;Id Reference&quot;&lt;/span&gt;,
        &lt;span class=&quot;code-quote&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;object&quot;&lt;/span&gt;,
        &lt;span class=&quot;code-quote&quot;&gt;&quot;properties&quot;&lt;/span&gt;: {
          &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt;: {
            &lt;span class=&quot;code-quote&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;string&quot;&lt;/span&gt;,
            &lt;span class=&quot;code-quote&quot;&gt;&quot;pattern&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$&quot;&lt;/span&gt;
          }
        }
      },
      {
        &lt;span class=&quot;code-quote&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;object&quot;&lt;/span&gt;,
        &lt;span class=&quot;code-quote&quot;&gt;&quot;$ref&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;usergroup.json&quot;&lt;/span&gt;
      }
    ],
    &lt;span class=&quot;code-quote&quot;&gt;&quot;additionalProperties&quot;&lt;/span&gt;: &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;
  }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;where the id schema should be more of a public schema and referenced by any implementation.&lt;/p&gt;

&lt;p&gt;the current problem is that jsonschema2pojo which is used to generate the pojos in rmb and also creates the validation annotations in the pojos used by the rmb validator does not support this (does not inject annotations / creates an empty pojo) - there is an open issue on this.&lt;/p&gt;

&lt;p&gt;so if we want to go this route it would mean&lt;br/&gt;
1. no rmb validation on those fields - will need to be handled by the implementation&lt;br/&gt;
2. implement generic validation for those fields within the rmb (so that it behaves like all other validations)&lt;/p&gt;</comment>
                                                            <comment id="190606" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Tue, 30 May 2017 13:45:03 +0000"  >&lt;p&gt;Breakout about this planned for Thursday 01.06 at 15:00&lt;/p&gt;</comment>
                                                            <comment id="190609" author="5c38e8d616ac1e4f7cbc660a" created="Thu, 1 Jun 2017 20:27:07 +0000"  >&lt;p&gt;Ok, so here&apos;s how I see things going down:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Schema sharing: For now, we use the &lt;tt&gt;raml&lt;/tt&gt; repo and git submodules to allow schemas to be easily referenced in a cross-module fashion. I agree that we can do better, but I am not thrilled with any sort of Java-centric solution.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Composite schema design: Hold off on the &quot;oneOf&quot; designation for now, since we don&apos;t have programmatic support for it in the RMB anyhow. Follow the example Marc uses in the loan schema, with the id and object of the related records. &lt;a href=&quot;https://github.com/folio-org/mod-circulation/blob/master/ramls/schema/loan.json&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/mod-circulation/blob/master/ramls/schema/loan.json&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Request format. Go with the &quot;includes&quot; query parameter for specifying which related records to include with the main record. For filtering records by querties across modules, we most likely will need a way to provide some kind of mapping to the foreign data sources for the purpose of generating CQL sub-queries. Some kind of repeatable way to do this would be welcome.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Investigate using the RMB&apos;s http join functionality for driving the composite record assembly. If we could extract this functionality into a small external library, I think that would be ideal.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="190614" author="5bffed52a1b46046f530c8f7" created="Fri, 2 Jun 2017 06:00:40 +0000"  >&lt;p&gt;Consider users-bl trying to implement this query:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;username=a* and materialType=book&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;We can implement that as:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
&lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; mt = MaterialTypes.findbyName(&lt;span class=&quot;code-quote&quot;&gt;&apos;book&apos;&lt;/span&gt;);
&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; Users.find(`username=a* and materialTypeId=${mt}`);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That is easy.&lt;/p&gt;

&lt;p&gt;But now consider a query that &lt;em&gt;looks&lt;/em&gt; very similar:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;username=a* and permission=items.read&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;There is no analogous implementation. Instead we have to do something much more complex:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
&lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; users1 = Users.find(`username=a*`);
&lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; users2 = UserPermissions.find(`permission=items.read`);
&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; someHowCombineResults(users1, users2);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That requires that we search in two separate modules, and combine the results.&lt;/p&gt;</comment>
                                                            <comment id="190618" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Fri, 2 Jun 2017 07:00:44 +0000"  >&lt;p&gt;I will admit that my preferences are as follows:&lt;br/&gt;
1. have each project maintain 2...n modules, &lt;br/&gt;
    module 1: the raml specs / schemas&lt;br/&gt;
    module 2...n: the actual coding&lt;br/&gt;
2. create a submodule from the raml module (if this is doable)&lt;br/&gt;
3. isnt the loan schema actually what we are trying to avoid as it does not reuse the item schema? or are you referring to the concept of id + item in the schema?&lt;br/&gt;
    the two options we discussed:&lt;br/&gt;
    1. oneOf - most elegant solution, part of v4 spec of json schema (but more complicated)&lt;br/&gt;
    2. include the id and a ref to the schema - with the ref optional (this is easier of course)&lt;br/&gt;
4. will try to catch kurt later today / early next week about the rmb functionality - i think it should suffice for all use cases we&apos;ve discussed so far, including rollback url options it offers (of course for small result sets)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5bffed52a1b46046f530c8f7&quot; class=&quot;user-hover&quot; rel=&quot;5bffed52a1b46046f530c8f7&quot; data-account-id=&quot;5bffed52a1b46046f530c8f7&quot; accountid=&quot;5bffed52a1b46046f530c8f7&quot; rel=&quot;noreferrer&quot;&gt;Mike Taylor&lt;/a&gt; - what field would contain data that can be used to join records from the permission and user responses (which field do they share that can be used to match and combine)?&lt;/p&gt;

&lt;p&gt;in any case - large result sets returned from each service break this implementation. i have an unpublished feature locally which allows a module to request content from a module (for caching) - and ask to be notified when that data is updated for that request (by indicating a url to call) - this would probably be better suited for a producer / consumer messaging framework - but if we are trying to avoid an indexing layer for this - then this may work for medium (1000&apos;s - 10,000&apos;s) sized result sets&lt;/p&gt;

</comment>
                                                            <comment id="190623" author="5bffed52a1b46046f530c8f7" created="Fri, 2 Jun 2017 07:14:51 +0000"  >&lt;blockquote&gt;&lt;p&gt;Mike Taylor - what field would contain data that can be used to join records from the permission and user responses (which field do they share that can be used to match and combine)?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;User-ID. In the Users records, it&apos;s just `id`, and in the User-Permissions records, it&apos;s ... currently missing.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;in any case - large result sets returned from each service break this implementation.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;My point exactly.&lt;/p&gt;</comment>
                                                            <comment id="190628" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Fri, 2 Jun 2017 07:42:58 +0000"  >&lt;p&gt;one more issue i guess while on the topic - looking at the loans - if we really only need two fields out of lets say 30 - we are holding the course and the standard is to bring in the entire record - if in the future an optimization is needed, we will handle on a per case basis&lt;/p&gt;</comment>
                                                            <comment id="190631" author="63e2a2771b13d42998e4e706" created="Fri, 2 Jun 2017 08:05:06 +0000"  >&lt;p&gt;When I referred to the loan schema in the circulation module, it was more as a possible example of the idea that &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f8314dfbdef80006f6f572d&quot; class=&quot;user-hover&quot; rel=&quot;5f8314dfbdef80006f6f572d&quot; data-account-id=&quot;5f8314dfbdef80006f6f572d&quot; accountid=&quot;5f8314dfbdef80006f6f572d&quot; rel=&quot;noreferrer&quot;&gt;Adam Dickmeiss&lt;/a&gt; referred to by having a separate id and de-referenced representation properties in the schema and not as an exemplar of all aspects we talked about yesterday.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=712020%3A32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; class=&quot;user-hover&quot; rel=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; data-account-id=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; accountid=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; rel=&quot;noreferrer&quot;&gt;shale99&lt;/a&gt; I agree that one of the considerations we need to keep in mind when sharing schema is that they will be used in different contexts. For example, when being included for de-referenced representations we might find more properties are included than necessary, or when sharing between storage and business logic modules, the de-referenced representation might never be provided by the storage module.&lt;/p&gt;

&lt;p&gt;I agree that there will likely be limitations to any current implementation that might need further work in the future. Does the proposed interface allow us to describe the questions and responses we want in a way which means we can incrementally improve the implementation?&lt;/p&gt;</comment>
                                                            <comment id="190636" author="5c38e8d616ac1e4f7cbc660a" created="Fri, 2 Jun 2017 17:48:56 +0000"  >&lt;p&gt;To join users and user-permissions associations, you would use the &quot;username&quot; field. I suppose we could switch things so that the user-permission association table tracks by userid instead, but it&apos;s a LOT more human friendly to go off of username.&lt;/p&gt;

&lt;p&gt;Regarding the loan schema...yes, I was referring to it more in regard to the id/object thing as opposed to the referential thing. Here&apos;s my compositeUser schema with IDs and objects. &lt;a href=&quot;https://github.com/folio-org/raml/blob/add-mod-user-bl/schemas/mod-users-bl/compositeUser.json&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/raml/blob/add-mod-user-bl/schemas/mod-users-bl/compositeUser.json&lt;/a&gt;&lt;/p&gt;
</comment>
                                                            <comment id="190640" author="5bffed52a1b46046f530c8f7" created="Fri, 2 Jun 2017 18:00:27 +0000"  >&lt;p&gt;Joining on something other than the PK make me itchy.&lt;/p&gt;</comment>
                                                            <comment id="190641" author="5c38e8d616ac1e4f7cbc660a" created="Fri, 2 Jun 2017 18:03:33 +0000"  >&lt;p&gt;In the case of the permissionUsers table, the username is the primary key.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/folio-org/raml/blob/master/schemas/mod-permissions/permissionUser.json&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/raml/blob/master/schemas/mod-permissions/permissionUser.json&lt;/a&gt;&lt;/p&gt;</comment>
                                                            <comment id="190644" author="5bffed52a1b46046f530c8f7" created="Fri, 2 Jun 2017 18:56:50 +0000"  >&lt;p&gt;How can that make sense when it&apos;s not the PK of the table that permissionsUsers joins?&lt;/p&gt;</comment>
                                                            <comment id="190648" author="5c38e8d616ac1e4f7cbc660a" created="Fri, 2 Jun 2017 19:24:12 +0000"  >&lt;p&gt;It&apos;s a unique field...you won&apos;t have two users with the same username on a given tenant.&lt;/p&gt;

&lt;p&gt;It was implemented before the decision was made to use opaque userids for the user object. That said, I do prefer it, but I suppose we could retool the permissions association to go by userid as opposed to username. Would this screw up much of the workings of UI components, though?&lt;/p&gt;</comment>
                                                            <comment id="190653" author="5bffed52a1b46046f530c8f7" created="Fri, 2 Jun 2017 23:18:25 +0000"  >&lt;p&gt;The UI&apos;s use of permissions associations would hardly even notice if this change was made: all it does is fetch &lt;a href=&quot;http://localhost:9130/perms/users/auth_test1/permissions?full=true&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://localhost:9130/perms/users/auth_test1/permissions?full=true&lt;/a&gt; and it would be easy enough to use (say) &lt;a href=&quot;http://localhost:9130/perms/users/77136CF1-FF93-4C45-B7B5-187BCB711745/permissions?full=true&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;http://localhost:9130/perms/users/77136CF1-FF93-4C45-B7B5-187BCB711745/permissions?full=true&lt;/a&gt; instead.&lt;/p&gt;

&lt;p&gt;(Not that I am seriously suggesting we change it at this point; but clearly the way it works now is not in accordance with our general guidelines.)&lt;/p&gt;</comment>
                                                            <comment id="190657" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Sun, 4 Jun 2017 07:01:23 +0000"  >&lt;p&gt;i would like to  &lt;b&gt;&lt;font color=&quot;red&quot;&gt;summarize&lt;/font&gt;&lt;/b&gt; current status:&lt;/p&gt;

&lt;p&gt;1. when a schema needs to contains the option of either an id or a de-referenced object (injected object of another schema into a schema). The schema will include 2 entries:&lt;br/&gt;
    a. (required) id field - &lt;b&gt;fieldNameId&lt;/b&gt;&lt;br/&gt;
    b. (optional) De-referenced object - &lt;b&gt;fieldName&lt;/b&gt;&lt;br/&gt;
2. a client will indicate which De-referenced fields should be populated via the &lt;b&gt;include=&lt;/b&gt; query string&lt;br/&gt;
3. schemas needed by a module need to be available to that module locally.&lt;br/&gt;
    a. &lt;b&gt;WHAT IS THE DECISION HERE?&lt;/b&gt; submodules from central raml repo, submodule per module - please vote. &lt;/p&gt;

&lt;p&gt;Using the RMB cross-module join you can easily auto-populate the de-referenced field in the schema - by joining id&apos;s received from the response json with the fieldNameId field value (it is a one liner to populate). consider moving to separate lib so that we can centralize this type of functionality and add features / maintain one tool&lt;/p&gt;

&lt;p&gt;&lt;b&gt;The above outlines &lt;font color=&quot;red&quot;&gt;read&lt;/font&gt; functionality for smaller result sets.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Medium to large sets will break this and will require a more robust solution, for example, an indexing layer (solr / elastic). &lt;/p&gt;

&lt;p&gt;Question: if we flag a module as needing to provide medium / large result set joins - hence we need to index (do something else to) its data - we should consider using a single method for all types of joins for that module.&lt;/p&gt;</comment>
                                                            <comment id="190661" author="5c38e8d616ac1e4f7cbc660a" created="Mon, 5 Jun 2017 05:33:12 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=712020%3A32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; class=&quot;user-hover&quot; rel=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; data-account-id=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; accountid=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; rel=&quot;noreferrer&quot;&gt;shale99&lt;/a&gt; Good summary! Thanks!&lt;/p&gt;

&lt;p&gt;My preference for sharing schemas would be to use a central repo. I am not dogmatically opposed to doing it differently, if somebody can outline how it will work.&lt;/p&gt;
</comment>
                                                            <comment id="190663" author="5bffed52a1b46046f530c8f7" created="Mon, 5 Jun 2017 11:07:09 +0000"  >&lt;p&gt;&amp;gt; &lt;b&gt;WHAT IS THE DECISION HERE?&lt;/b&gt; submodules from central raml repo, submodule per module - please vote.&lt;/p&gt;

&lt;p&gt;No preference. (I guess because, as a front-end guy, I am only really interested in the API.)&lt;/p&gt;</comment>
                                                            <comment id="190666" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Tue, 6 Jun 2017 07:11:09 +0000"  >&lt;p&gt;one more minor issue up for a vote&lt;/p&gt;

&lt;p&gt;the &lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
include
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;query param &lt;/p&gt;

&lt;p&gt;raml does not support comma seperated params as multi values - but rather as a single value with commas - what that means is the implementer will need to parse this&lt;/p&gt;

&lt;p&gt;there is support however for multi valued query params in the following manner &lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
include=field_a&amp;amp;include=field_b.....
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;this will also pass a list of strings (field names) - to implementing functions which is more convenient.&lt;/p&gt;

&lt;p&gt;seems like there is no html standard for this - but i did see people lean towards  multiple fields (not commas) , although this does lengthen the url&lt;/p&gt;

&lt;p&gt;i have implemented the raml trait in this way but i dont find this critical, i guess this is more to the ui guys, what is more convenient for you?&lt;/p&gt;</comment>
                                                            <comment id="190671" author="5bffed52a1b46046f530c8f7" created="Tue, 6 Jun 2017 09:33:29 +0000"  >&lt;p&gt;As one who will be dealing only with the API and not with the implementation, I strongly prefer adhering to the syntax specified in the JSON-API guidelines.&lt;/p&gt;</comment>
                                                            <comment id="190673" author="63e2a2771b13d42998e4e706" created="Tue, 6 Jun 2017 10:56:48 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=712020%3A32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; class=&quot;user-hover&quot; rel=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; data-account-id=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; accountid=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; rel=&quot;noreferrer&quot;&gt;shale99&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5c38e8d616ac1e4f7cbc660a&quot; class=&quot;user-hover&quot; rel=&quot;5c38e8d616ac1e4f7cbc660a&quot; data-account-id=&quot;5c38e8d616ac1e4f7cbc660a&quot; accountid=&quot;5c38e8d616ac1e4f7cbc660a&quot; rel=&quot;noreferrer&quot;&gt;Kurt Nordstrom&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My understanding from last weeks meeting was that we left ourselves with two ownership options:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Use a centralised repository for all schema&lt;/li&gt;
	&lt;li&gt;Nominate a single exemplar module implementation to own at particular schema (and the central repository only contains highly common schema)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;And two sharing options (although it sounds like we&apos;ve decided on using sub-modules for the moment):&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Provide a set of hosted packages (of some sort), each of which contains a cohesive set of (1 or more) related schema&lt;/li&gt;
	&lt;li&gt;Use git sub-modules for including the relevant git repository which owns the desired schema&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I&apos;m only referring to schema, however interfaces might take a similar form.&lt;/p&gt;

&lt;p&gt;It might be worth branching the conversation about sharing schema onto 
    &lt;span class=&quot;jira-issue-macro&quot; data-jira-key=&quot;FOLIO-614&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-614&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Be able to share JSON schema definitions between interfaces&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium&quot; /&gt;
            FOLIO-614
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-complete jira-macro-single-issue-export-pdf&quot;&gt;Open&lt;/span&gt;
            &lt;/span&gt;
&lt;/p&gt;</comment>
                                                            <comment id="190677" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Tue, 6 Jun 2017 13:15:57 +0000"  >&lt;p&gt;Please put the conclusion in a markdown file e.g &quot;Aggregation Guidelines&quot; in the central repository as indicated by &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=61cd0ca0bce5e00069e98be7&quot; class=&quot;user-hover&quot; rel=&quot;61cd0ca0bce5e00069e98be7&quot; data-account-id=&quot;61cd0ca0bce5e00069e98be7&quot; accountid=&quot;61cd0ca0bce5e00069e98be7&quot; rel=&quot;noreferrer&quot;&gt;David Crossley&lt;/a&gt;&lt;/p&gt;</comment>
                                                            <comment id="190681" author="61cd0ca0bce5e00069e98be7" created="Wed, 7 Jun 2017 06:46:43 +0000"  >&lt;p&gt;Perhaps at dev.folio.org/doc/business-modules-aggregation&lt;/p&gt;

&lt;p&gt;Would someone please summarise the &quot;conclusion&quot;. Then i could create the doc, expand it into full text, etc.&lt;/p&gt;</comment>
                                                            <comment id="190685" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Tue, 13 Jun 2017 14:06:06 +0000"  >&lt;p&gt;summarize recent call:&lt;/p&gt;

&lt;p&gt;1. include list passed in by the client will indicate to the service what data to retrieve&lt;br/&gt;
2. composite (envelope) schemas will not contain ids , rather only object references &lt;br/&gt;
3. when an aggregate call fails - currently return the error code with the first error to occur (open issue to look at this further)&lt;/p&gt;

&lt;p&gt;for example:&lt;/p&gt;

&lt;p&gt;composite schema will not contain both &lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;

    &lt;span class=&quot;code-quote&quot;&gt;&quot;patronGroupId&quot;&lt;/span&gt;: {
      &lt;span class=&quot;code-quote&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;string&quot;&lt;/span&gt;
    },
    &lt;span class=&quot;code-quote&quot;&gt;&quot;patronGroup&quot;&lt;/span&gt;: {
      &lt;span class=&quot;code-quote&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;object&quot;&lt;/span&gt;,
      &lt;span class=&quot;code-quote&quot;&gt;&quot;$ref&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;../mod-users/usergroup.json&quot;&lt;/span&gt;
},
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;but rather only &lt;/p&gt;


&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
    &lt;span class=&quot;code-quote&quot;&gt;&quot;patronGroup&quot;&lt;/span&gt;: {
      &lt;span class=&quot;code-quote&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;object&quot;&lt;/span&gt;,
      &lt;span class=&quot;code-quote&quot;&gt;&quot;$ref&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;../mod-users/usergroup.json&quot;&lt;/span&gt;
   }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;if the include requested by the client does not request the patron group , this objecct will not be included in the response. note that the patron group id may exist in the user object which may be requested and included in the composite response&lt;/p&gt;

&lt;p&gt;comments?&lt;/p&gt;</comment>
                                                            <comment id="190687" author="63e2a2771b13d42998e4e706" created="Thu, 15 Jun 2017 10:20:10 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=712020%3A32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; class=&quot;user-hover&quot; rel=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; data-account-id=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; accountid=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; rel=&quot;noreferrer&quot;&gt;shale99&lt;/a&gt; I think I might need help in my understanding.&lt;/p&gt;

&lt;p&gt;Taking the user business logic example, would this be a sensible representation of the user at this level, based upon what was agreed about composite schema (assuming that the request states including the group information):&lt;/p&gt;

&lt;p&gt;{&lt;br/&gt;
  &quot;user&quot;: &lt;/p&gt;
{
    &quot;id&quot;: &quot;...&quot;
    &quot;username&quot;: &quot;foo&quot;
    ...
    &quot;patronGroupId&quot;: &quot;....&quot;
  }
&lt;p&gt;,&lt;br/&gt;
  &quot;patronGroup&quot;: &lt;/p&gt;
{
    &quot;id&quot;: &quot;...&quot;,
   &quot;name&quot;: &quot;...&quot;
   ...
  }
&lt;p&gt;}&lt;/p&gt;</comment>
                                                            <comment id="190691" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Thu, 15 Jun 2017 10:30:22 +0000"  >&lt;p&gt;yes&lt;/p&gt;</comment>
                                                            <comment id="190693" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Thu, 15 Jun 2017 11:05:51 +0000"  >&lt;p&gt;I think this looks sensible. What is the behavior when the client did not requested a particular object to be requested? Would we return e.g &lt;tt&gt;patronGroup: &quot;null&quot;&lt;/tt&gt; or omit it the entry from the response? Since we state in the schema that the entry is optional, maybe we should omit it entirely &amp;#8211; returning null may give impression that the object is indeed null.&lt;/p&gt;</comment>
                                                            <comment id="190696" author="712020:32bb56ac-50e7-4787-b4af-ed3089d9401c" created="Thu, 15 Jun 2017 11:07:12 +0000"  >&lt;p&gt;omitted in my opinion&lt;/p&gt;</comment>
                                                            <comment id="190700" author="63e2a2771b13d42998e4e706" created="Thu, 15 Jun 2017 11:20:49 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Ab8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; class=&quot;user-hover&quot; rel=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; data-account-id=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; accountid=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; rel=&quot;noreferrer&quot;&gt;Jakub Skoczen&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=712020%3A32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; class=&quot;user-hover&quot; rel=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; data-account-id=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; accountid=&quot;712020:32bb56ac-50e7-4787-b4af-ed3089d9401c&quot; rel=&quot;noreferrer&quot;&gt;shale99&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My preference would be to omit it entirely. &lt;/p&gt;

&lt;p&gt;From the experiments I&apos;ve tried with schema, if we decide to validate the response, the patronGroup would be expected to be an object and I don&apos;t think null validates again that definition (unless we say that patronGroup can be an object or null).&lt;/p&gt;</comment>
                                                            <comment id="190703" author="5bffed52a1b46046f530c8f7" created="Thu, 15 Jun 2017 12:51:50 +0000"  >&lt;p&gt;Agreed; omit.&lt;/p&gt;</comment>
                                                            <comment id="190706" author="63e2a2771b13d42998e4e706" created="Tue, 27 Jun 2017 16:17:39 +0000"  >&lt;p&gt;As part of this change, we seem to be changing to using nested properties for the primary record. Where we used to have the user or item as the top level JSON object, we now represent them as compositions, where one of the properties is for this primary record e.g.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
{
  &lt;span class=&quot;code-quote&quot;&gt;&quot;user&quot;&lt;/span&gt;: {
    &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt;: ...,
    &lt;span class=&quot;code-quote&quot;&gt;&quot;username&quot;&lt;/span&gt;: ...,
   ...
  }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;instead of:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
{
  &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt;: ...,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;username&quot;&lt;/span&gt;: ...,
  ...
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If we have business logic interfaces that don&apos;t currently have any related records and so no inclusions, do we still want to nest the primary record (as this makes it more consistent and allow for extension to these related records later without necessarily breaking compatibility)?&lt;/p&gt;</comment>
                                                            <comment id="190711" author="63e2a2771b13d42998e4e706" created="Fri, 7 Jul 2017 11:16:13 +0000"  >&lt;p&gt;As I work on 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;MODINV-16&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/MODINV-16&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Migrate to RAML Module Builder&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium&quot; /&gt;
            MODINV-16
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
 which includes migrating the inventory interface to use this composite includes format (and potentially to sharing schema definition, as this was part of the motivation for this style of interface), I&apos;ve encountered a few questions around how we want to approach certain aspects (I&#8217;ll ask more as I figure out how to better express them).&lt;/p&gt;

&lt;p&gt;1. Up until now, the collection resource type has used the same resource representation for read and write (GET, POST and PUT) meaning that a client can GET a representation and modify it to make write requests if it chooses to.&lt;/p&gt;

&lt;p&gt;Following the discussions about aggregation, we are defining composite representations (e.g. &lt;a href=&quot;https://github.com/folio-org/raml/blob/82f83f5dab40f60de9aa664b0940df41b77a3e76/schemas/mod-users-bl/compositeUser.json&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/raml/blob/82f83f5dab40f60de9aa664b0940df41b77a3e76/schemas/mod-users-bl/compositeUser.json&lt;/a&gt;) for read (GET) responses.&lt;/p&gt;

&lt;p&gt;Do we want to preserve the symmetry between read and write requests or use the none-composite representation of the primary record for write operations (POST/PUT)?&lt;/p&gt;

&lt;p&gt;2. Given we intend to share the schema between storage and business logic modules, if a business logic module needs to extend the representation, should it do it by adding properties to the composite schema (meaning that it doesn&#8217;t only do aggregation of related record representations)?&lt;/p&gt;</comment>
                                                            <comment id="190716" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Tue, 25 Jul 2017 13:16:08 +0000"  >&lt;p&gt;Let&apos;s put a page under the website GH repo about aggregation.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10002">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="53566">OKAPI-300</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="80227">FOLIO-671</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60195">MODINV-16</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="79883">FOLIO-704</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="79341">FOLIO-614</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="35336">MODUSERBL-3</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60201">MODINV-21</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10144"><![CDATA[Core: Platform]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzxo5z:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 19 May 2017 10:04:48 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                </customfields>
    </item>
</channel>
</rss>