Skip to content

Commit

Permalink
add index
Browse files Browse the repository at this point in the history
  • Loading branch information
cekk committed Jul 18, 2024
1 parent 42aacc6 commit d3e9c77
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 0 deletions.
20 changes: 20 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,26 @@ Essendo una ricerca, il risultato è paginato a 25 di default, ma si può aument
Si può anche filtrare per un determinato tipo di contenuto, aggiungendo alla query per esempio: *&portal_type=Servizio*.


Strutture
-------------------

Alcuni content-type tipo Servizio o Struttura, hanno una correlazione con le Strutture.

Da una Struttura, è possibile sapere quali contenuti la correlano facendo una ricerca in catalogo sull'indice **struttura_correlata**.

Ad esempio::

> http://localhost:8080/Plone/++api++/@search?struttura_correlata=xxx


Dove xxx è l'uid di una Struttura.

Questa chiamata ritorna tutti i contenuti del sito che correlano quella Struttura.
Essendo una ricerca, il risultato è paginato a 25 di default, ma si può aumentare con determinati parametri.

Si può anche filtrare per un determinato tipo di contenuto, aggiungendo alla query per esempio: *&portal_type=Servizio*.


Installazione
=============

Expand Down
23 changes: 23 additions & 0 deletions src/iosanita/contenttypes/indexers/relations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
from plone.dexterity.interfaces import IDexterityContent
from plone.indexer.decorator import indexer


@indexer(IDexterityContent)
def uo_correlata_uid(context, **kw):
""" """
return [
x.to_object.UID()
for x in getattr(context.aq_base, "uo_correlata", [])
if x.to_object
]


@indexer(IDexterityContent)
def struttura_correlata_uid(context, **kw):
""" """
return [
x.to_object.UID()
for x in getattr(context.aq_base, "struttura_correlata", [])
if x.to_object
]
74 changes: 74 additions & 0 deletions src/iosanita/contenttypes/tests/test_struttura_correlata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
"""Setup tests for this package."""
from iosanita.contenttypes.testing import INTEGRATION_TESTING
from plone import api
from plone.app.testing import setRoles
from plone.app.testing import TEST_USER_ID
from z3c.relationfield import RelationValue
from zope.component import getUtility
from zope.event import notify
from zope.intid.interfaces import IIntIds
from zope.lifecycleevent import ObjectModifiedEvent

import unittest


class TestStrutturaCorrelata(unittest.TestCase):
""""""

layer = INTEGRATION_TESTING

def setUp(self):
self.app = self.layer["app"]
self.portal = self.layer["portal"]
self.portal_url = self.portal.absolute_url()
setRoles(self.portal, TEST_USER_ID, ["Manager"])

intids = getUtility(IIntIds)

self.struttura1 = api.content.create(
container=self.portal, type="Struttura", title="struttura 1"
)
self.struttura2 = api.content.create(
container=self.portal, type="Struttura", title="struttura 2"
)
self.struttura_test = api.content.create(
container=self.portal,
type="Struttura",
title="Test struttura",
)
self.servizio_test = api.content.create(
container=self.portal,
type="Servizio",
title="Test servizio",
)
self.struttura_test.struttura_correlata = [
RelationValue(intids.getId(self.struttura1))
]
self.servizio_test.struttura_correlata = [
RelationValue(intids.getId(self.struttura1)),
RelationValue(intids.getId(self.struttura2)),
]
notify(ObjectModifiedEvent(self.struttura_test))
notify(ObjectModifiedEvent(self.servizio_test))

def test_struttura_correlata_reference_in_struttura_is_in_catalog(self):
""" """
res = api.content.find(struttura_correlata_uid=self.struttura1.UID())

self.assertEqual(len(res), 2)
uids = [x.UID for x in res]
self.assertIn(self.struttura_test.UID(), uids)

def test_struttura_correlata_reference_in_servizio_is_in_catalog(self):
""" """
res = api.content.find(struttura_correlata_uid=self.struttura1.UID())

self.assertEqual(len(res), 2)
uids = [x.UID for x in res]
self.assertIn(self.servizio_test.UID(), uids)

res = api.content.find(struttura_correlata_uid=self.struttura2.UID())

self.assertEqual(len(res), 1)
self.assertEqual(self.servizio_test.UID(), res[0].UID)

0 comments on commit d3e9c77

Please sign in to comment.