<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:07:59 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-738] design a backend module for storing notes</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-738</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;As described in 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;STCOM-59&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/STCOM-59&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Notes v1&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium&quot; /&gt;
            STCOM-59
        &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;
 we need a way to attach &quot;notes&quot; to various records in the system (users, items, etc). In the simplest form &quot;note&quot; is a piece of plain text, eventually it may include things like mentions or tiriggers.&lt;/p&gt;

&lt;p&gt;Proposed solution:&lt;/p&gt;

&lt;p&gt;1. Specify &apos;notes&apos; API resources (endpoints) using RAML and JSON Schema.&lt;br/&gt;
2. Create a new FOLIO module, mod-notes, that allows for CRUDing note records. mod-notes should be implemented as a standard RMB module&lt;br/&gt;
3. Each note record contains a piece of &lt;tt&gt;text&lt;/tt&gt;, &lt;tt&gt;createdDate&lt;/tt&gt;, &lt;tt&gt;updatedDate&lt;/tt&gt;, &lt;tt&gt;creatorId&lt;/tt&gt; of the authoring user, and a &lt;tt&gt;link&lt;/tt&gt; (&lt;tt&gt;path&lt;/tt&gt; + &lt;tt&gt;UUID&lt;/tt&gt;) to the record it attaches to&lt;br/&gt;
3. It should be possible to query notes for a given object (using the full &lt;tt&gt;link&lt;/tt&gt;, or just &lt;tt&gt;path&lt;/tt&gt; or just the &lt;tt&gt;UUID&lt;/tt&gt;) and for a given users (using &lt;tt&gt;creatorId&lt;/tt&gt; e.g to display all notes by a given user)&lt;br/&gt;
4. Permissions: standard permissions to Create/Read notes, user-specific permissions (can be modelled as &lt;tt&gt;self&lt;/tt&gt; endpoint) to Update/Delete notes created by the current user&lt;/p&gt;

&lt;p&gt;Note: there user stories talk about the ability to mark notes that the user have read, but we consider this capability to be related to notifications (which are are individual to each user) rather than notes.&lt;/p&gt;</description>
                <environment></environment>
        <key id="80322">FOLIO-738</key>
            <summary>design a backend module for storing notes</summary>
                <type id="10002" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium">New Feature</type>
                                            <priority id="10001" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p2.svg">P2</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="712020:38d1a08f-86a8-4df2-9191-239b16b0a81a">Heikki Levanto</assignee>
                                                                <reporter accountid="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d">Jakub Skoczen</reporter>
                                    <labels>
                            <label>core</label>
                            <label>sprint19</label>
                    </labels>
                <created>Mon, 24 Jul 2017 11:26:32 +0000</created>
                <updated>Mon, 12 Nov 2018 14:23:40 +0000</updated>
                            <resolved>Mon, 7 Aug 2017 12:41:32 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                    <timespent seconds="39600">1 day, 3 hours</timespent>
                                <comments>
                                                            <comment id="188926" author="712020:38d1a08f-86a8-4df2-9191-239b16b0a81a" created="Wed, 26 Jul 2017 08:24:15 +0000"  >&lt;p&gt;Some small comments about not to do, at least yet.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Notifications when new notes appear should be handled by the notification service, which is separate from this&lt;/li&gt;
	&lt;li&gt;Although notes could be attached to other notes, we probably don&apos;t want to go there, that can get messy in the UI.&lt;/li&gt;
	&lt;li&gt;At some point we may need more complex access flags to notes (private notes only visible for the creating user, locked notes that can not be edited without special permissions, etc). But not yet.&lt;/li&gt;
	&lt;li&gt;We may want to consider keeping editing history of a note, in some future version. For now, updateDate and UpdateUser should be sufficient&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Some comments on the access permissions&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;A note is visible for any user who can see the base object, and has permission to view notes&lt;/li&gt;
	&lt;li&gt;A note can be edited or deleted by any user who can edit the base object, and has permission to to edit notes&lt;/li&gt;
	&lt;li&gt;A note can be created by any user who can see the base note, and has permission to post notes&lt;/li&gt;
	&lt;li&gt;A user can list and view all notes he has created if he has permission to see notes.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="188927" author="712020:38d1a08f-86a8-4df2-9191-239b16b0a81a" created="Fri, 28 Jul 2017 11:42:53 +0000"  >&lt;p&gt;A note object should contain&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;id&lt;/em&gt; of the note itself&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;link&lt;/em&gt; to the item the note belongs to. Relative URL like &quot;/users/12345&quot;&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;text&lt;/em&gt; of the note. Can be fairly large. No special formatting (yet?)&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;creatorId&lt;/em&gt; UserId who created the note.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;createdDate&lt;/em&gt; Timestamp when the note was created&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;updatedBy&lt;/em&gt; UserId of the last person to update the note&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;updatedDate&lt;/em&gt; Timestamp of the last update&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;There seems to be no need to store the ID of the referred object, we can use truncation query on the link field (link endswith /12345). If needed for indexing and performance, it can be added later, and hidden from the user.&lt;/p&gt;</comment>
                                                            <comment id="188928" author="712020:38d1a08f-86a8-4df2-9191-239b16b0a81a" created="Fri, 28 Jul 2017 11:55:18 +0000"  >&lt;p&gt;The API should be fairly regular CRUD API with endpoints&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;/notes for creating, updating, deleting, listing, and getting notes.&lt;/li&gt;
	&lt;li&gt;/notes/_self for listing and getting notes created by the current user&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Selecting what notes to get is done by the usual cql querying&lt;/p&gt;</comment>
                                                            <comment id="188929" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Fri, 28 Jul 2017 13:01:48 +0000"  >&lt;p&gt;Heikki, it&apos;s worth noting that we are working on a generic meta-data section for thing like createdDate and createdBy, see: 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-592&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-592&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;meta-data section in FOLIO records (createdDate, updatedDate, creator, etc)&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            FOLIO-592
        &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;
. I think you should use it in your schema.&lt;/p&gt;</comment>
                                                            <comment id="188930" author="712020:38d1a08f-86a8-4df2-9191-239b16b0a81a" created="Fri, 28 Jul 2017 13:26:50 +0000"  >&lt;p&gt;Right, using a standard metadata section makes a lot of sense.&lt;/p&gt;</comment>
                                                            <comment id="188932" author="63e2a2771b13d42998e4e706" created="Fri, 28 Jul 2017 13:58:43 +0000"  >&lt;p&gt;Ok, I&apos;m going to share my reflection of this, to see if I understand it:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Notes are related to a single record&lt;/li&gt;
	&lt;li&gt;They are related by a path (relative to the root Okapi URL I&apos;m assuming)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The process a client would go through to find the notes for a record (e.g for an item with ID 12345):&lt;br/&gt;
1. Determine a path for a record (presumably based upon a template, e.g. /items/&lt;tt&gt;id&lt;/tt&gt; but might be based upon removing the base): /items/12345&lt;br/&gt;
2. Use that path in a CQL request like /notes?query=link=/items/12345 (I haven&apos;t escaped this for clarity)&lt;/p&gt;

&lt;p&gt;Given that we have representations of records addressable via different paths, e.g. users at /users/12345 or /bl-users/12345, or items /inventory/items/&lt;tt&gt;id&lt;/tt&gt; and /item-storage/items/&lt;tt&gt;id&lt;/tt&gt; which is the canonical path that all notes should be related to?&lt;/p&gt;</comment>
                                                            <comment id="188933" author="712020:38d1a08f-86a8-4df2-9191-239b16b0a81a" created="Fri, 28 Jul 2017 14:36:47 +0000"  >&lt;p&gt;Good question. I can see two ways out: Either the note belongs to /users/12345, and users-bl will fetch the notes too. Or the note belongs to the thing the UI is displaying, users-bl/12345, and the UI is responsible for fetching the notes when it wants to display them.  I lean a little towards the latter, but am not at all sure of all the implications.&lt;/p&gt;</comment>
                                                            <comment id="188934" author="712020:38d1a08f-86a8-4df2-9191-239b16b0a81a" created="Mon, 31 Jul 2017 13:14:10 +0000"  >&lt;p&gt;Discussed on our team-1 meeting, and decided to go by the storage link for now, and hope for the UI component being able to fetch its own notes.&lt;/p&gt;</comment>
                                                            <comment id="188935" author="712020:38d1a08f-86a8-4df2-9191-239b16b0a81a" created="Tue, 1 Aug 2017 13:12:56 +0000"  >&lt;p&gt;Design going in parallel with implementation (
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;MODNOTES-1&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/MODNOTES-1&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;implement a backend module for storing notes&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;
            MODNOTES-1
        &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;
)&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="54598">STCOM-59</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="70569">MODNOTES-1</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_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzxrn3:</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>Wed, 26 Jul 2017 08:24:15 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>