RSS Requirements for Ingestion: https://cloud.servus.at/s/iH8x27gmHJH26Tj
List of GraphQL queries: [https://git.fairkom.net/emb/displ.eu/repco/-/wikis/GraphQL-Queries](https://git.fairkom.net/emb/displ.eu/repco/-/wikis/GraphQL-Queries)
REPCO Requirements for Display EU: https://hackmd.io/LDGoiG7WQEOC7-KozhPLDw
RSS Requirements for Ingestion: https://cloud.servus.at/s/iH8x27gmHJH26Tj
Data model: https://hackmd.io/MCDTLRa-RViNbcxl6D7sog?view#Data-modeling
REPCO Requirements for Display EU: https://hackmd.io/LDGoiG7WQEOC7-KozhPLDw
* translations are regular entities that have a header `IsTranslationOf` that links back to the entity in the original language entity
* queries support either listing entities in a particular language (originals and translations), or all originals (in all languages)
* all entities have a content language header
* relations between entities (e.g. from ContentItem to Concepts) always link to the original. translations are then resolved in a second step.
* translations are regular entities that have a header `IsTranslationOf` that links back to the entity in the original language entity
* translations may be marked as user- or auto-generated including metadata about their origin
* queries support either listing entities in a particular language (originals and translations), or all originals (in all languages)
* open question: how to deal with the graphql api for nested entites?
* relations between entities (e.g. from ContentItem to Concepts) always link to the original. translations are then resolved in a second step.
* ingest translation and language info from cba datasource has to be fully supported
* translations may be marked as user- or auto-generated including metadata about their origin
* open question: translation of metadata, concepts, etc
* open question: how to deal with the graphql api for nested entites?
* ingest translation and language info from cba datasource has to be fully supported
### subtitles
* open question: translation of metadata, concepts, etc
* repco has to support subtitles per media asset
### subtitles
* subtitles have to support translations
* repco has to support subtitles per media asset
### activitypub import
* subtitles have to support translations
* repco can import channels from activitypub servers
### activitypub import
* must support mastodon and peertube feeds
* must support media attachements
* repco can import channels from activitypub servers
* must support mastodon and peertube feeds
### full-text search
* must support media attachements
* all content in a repco repo is (optionally) indexed into a full-text search engine
### full-text search
* special consideration has to be put to support multilingual search, approach is tbd (index per language vs multi-language indexes)
* the repco server provides a GraphQL interface to perform search queries
* all content in a repco repo is (optionally) indexed into a full-text search engine
* special consideration has to be put to support multilingual search, approach is tbd (index per language vs multi-language indexes)
### minimal management UI
* the repco server provides a GraphQL interface to perform search queries
* create and sync repos
### minimal management UI
* manage datasources
* view status of ingest tasks
* create and sync repos
* manage datasources
## non-feature tasks
* view status of ingest tasks
repco needs development in these fields independent of the mentioned features to become a production-ready tool:
## non-feature tasks
### seperate core from domain data model
repco needs development in these fields independent of the mentioned features to become a production-ready tool:
currently, the domain data model and the lower data model are not properly seperated in the codebase. this is needed to better support schema evolution
### seperate core from domain data model
### schema evolution for domain data model
currently, the domain data model and the lower data model are not properly seperated in the codebase. this is needed to better support schema evolution
* add more flexible schema definition to e.g. include indexing properties
### schema evolution for domain data model
* develop and test a way to perform schema migrations
* have a good developer and devops experience for schema evolution over time
* add more flexible schema definition to e.g. include indexing properties
* develop and test a way to perform schema migrations
### monitoring and error handling
* have a good developer and devops experience for schema evolution over time
* better way to surface errors during ingest (which can always happen because external data sources may be nonconfirming)
### monitoring and error handling
* monitoring, e.g. via a prometheus endpoint
* better way to surface errors during ingest (which can always happen because external data sources may be nonconfirming)
### testing and devops
* monitoring, e.g. via a prometheus endpoint
* write more unit and integration tests
### testing and devops
* devops guides for deployment and updates
* write more unit and integration tests
## potential later features
* devops guides for deployment and updates
### job queues and bots
## potential later features
* have APIs for bots/workers to pull and push content from/to repco
### job queues and bots
* support different authentication methods
* have APIs for bots/workers to pull and push content from/to repco
### user content
* support different authentication methods
* support storing user-generated content in repco repos
### user content
* support different authentication methods
* support storing user-generated content in repco repos
## User Stories
* support different authentication methods
* Besucherin Madeleine aus Frankreich steigt auf displ.eu zum ersten Mal ein. Sie bekommt alle Inhalte (Texte und Audio- bzw. Videountertitelungen) automatisch in der im Browser eingestellten Sprache auf Französisch ausgeliefert.
## User Stories
* Besucher Pablo ist interessiert an Inhalten zu einem ähnlichen Thema, zu dem er auf displ.eu gerade einen Artikel liest. Als Empfehlung erhält er einen Artikel, der zwar ursprünglich in einer anderen Originalsprache verfasst wurde, dank einer Übersetzung und einer entsprechenden Suchfunktion aber für ihn in der gerade ausgewählten Sprache als Suchergebnis angezeigt wird
* Besucherin Waltraud sucht auf displ.eu nach einem bestimmten Thema mit einem deutschen Begriff. Da sie auch Spanisch spricht, klickt sie als Zielsprache neben Deutsch auch Spanisch an. Als Suchergebnisse werden ihr Beiträge aus beiden Sprachen angezeigt
* Besucherin Madeleine aus Frankreich steigt auf displ.eu zum ersten Mal ein. Sie bekommt alle Inhalte (Texte und Audio- bzw. Videountertitelungen) automatisch in der im Browser eingestellten Sprache auf Französisch ausgeliefert.
* Uploader Harald lädt Videos über cba.media hoch. Dort übersetzt er ein sein zugehöriges Post auf English und Polnisch. Zusätzlich lässt er Untertitel für diese beide Sprachen erstellen. Die Videos werden sowohl auf cba.media, als auch unter displ.eu untertitelt mit Möglichkeit zur Auswahl angezeigt. Der Beschreibungstext kann von Personen, die Englisch oder Polnisch als Sprache eingestellt haben, direkt in diesen rezipiert werden. Auch mit der Suche über REPCO kann sein Video gefunden werden.
* Besucher Pablo ist interessiert an Inhalten zu einem ähnlichen Thema, zu dem er auf displ.eu gerade einen Artikel liest. Als Empfehlung erhält er einen Artikel, der zwar ursprünglich in einer anderen Originalsprache verfasst wurde, dank einer Übersetzung und einer entsprechenden Suchfunktion aber für ihn in der gerade ausgewählten Sprache als Suchergebnis angezeigt wird
* Userin Britta betreibt für das Projekt Display EU einen Mastodon Channel, den sie auf einem dedicated Space auf der displ.eu Startseite angezeigt haben möchte. Ihre Toots enthalten neben Textnachrichten auch Bilder oder Videos. In REPCO fügt der:die Admin den Channel als Datasource hinzu. Mithilfe der CMS-Tools von displ.eu kann der Channel inkl. aller Medieninhalte automatisiert über REPCO eingebunden und auch durchsucht werden.
* Besucherin Waltraud sucht auf displ.eu nach einem bestimmten Thema mit einem deutschen Begriff. Da sie auch Spanisch spricht, klickt sie als Zielsprache neben Deutsch auch Spanisch an. Als Suchergebnisse werden ihr Beiträge aus beiden Sprachen angezeigt
* Uploader Emre lädt Videos auf eine PeerTube-Instanz hoch, die mit REPCO indiziert wird. Dort stellt er auch verschiedene Untertitelversionen bereit. Auf displ.eu kann dank einer Unterstützung für ActivityPub das Video inklusive der Untertitel angezeigt werden.
* Uploader Harald lädt Videos über cba.media hoch. Dort übersetzt er ein sein zugehöriges Post auf English und Polnisch. Zusätzlich lässt er Untertitel für diese beide Sprachen erstellen. Die Videos werden sowohl auf cba.media, als auch unter displ.eu untertitelt mit Möglichkeit zur Auswahl angezeigt. Der Beschreibungstext kann von Personen, die Englisch oder Polnisch als Sprache eingestellt haben, direkt in diesen rezipiert werden. Auch mit der Suche über REPCO kann sein Video gefunden werden.
* Besucherin Magdalena gibt einen Suchbegriff auf displ.eu ein. Die Daten werden über das Frontend an REPCO weitergegeben, das wiederum einen ElasticSearch Index abfragt und die Suchergebnisse über die GraphQL API per JSON an das CMS zur Anzeige zurückgibt. Die Suchergebnisse werden auf der displ.eu Suchergebnisseite angezeigt und verlinken dort auf die originalen URLs der Data Sources.
* Userin Britta betreibt für das Projekt Display EU einen Mastodon Channel, den sie auf einem dedicated Space auf der displ.eu Startseite angezeigt haben möchte. Ihre Toots enthalten neben Textnachrichten auch Bilder oder Videos. In REPCO fügt der:die Admin den Channel als Datasource hinzu. Mithilfe der CMS-Tools von displ.eu kann der Channel inkl. aller Medieninhalte automatisiert über REPCO eingebunden und auch durchsucht werden.
* Uploaderin Reka verfasst auf eurozine.com einen Artikel auf Englisch. REPCO kann den RSS Feed als Data Source indizieren
* Uploader Emre lädt Videos auf eine PeerTube-Instanz hoch, die mit REPCO indiziert wird. Dort stellt er auch verschiedene Untertitelversionen bereit. Auf displ.eu kann dank einer Unterstützung für ActivityPub das Video inklusive der Untertitel angezeigt werden.
* Das Entwicklerteam wird beauftragt, zusätzliche Metadatenfelder für die Ingestion hinzuzufügen. REPCO kann das Datenmodell erweitern und sich die fehlenden Daten in das bestehende Dataset holen, ohne den ganzen Ingestion-Prozess komplett neu wiederholen zu müssen
* Besucherin Magdalena gibt einen Suchbegriff auf displ.eu ein. Die Daten werden über das Frontend an REPCO weitergegeben, das wiederum einen ElasticSearch Index abfragt und die Suchergebnisse über die GraphQL API per JSON an das CMS zur Anzeige zurückgibt. Die Suchergebnisse werden auf der displ.eu Suchergebnisseite angezeigt und verlinken dort auf die originalen URLs der Data Sources.
* Uploaderin Reka verfasst auf eurozine.com einen Artikel auf Englisch. REPCO kann den RSS Feed als Data Source indizieren
**Monitoring Tools**
* Das Entwicklerteam wird beauftragt, zusätzliche Metadatenfelder für die Ingestion hinzuzufügen. REPCO kann das Datenmodell erweitern und sich die fehlenden Daten in das bestehende Dataset holen, ohne den ganzen Ingestion-Prozess komplett neu wiederholen zu müssen
* Übersicht über den Datenpool
**Monitoring Tools**
* Status einzelner Data Sources und Ingestionprozesse
* Fehlermeldungsprotokoll
* Übersicht über den Datenpool
* Möglichkeit, neue Data Source zu erstellen, neu zu ingesten oder zu löschen
* Status einzelner Data Sources und Ingestionprozesse
* Fehlermeldungsprotokoll
**Weiteres Vorgehen**
* Möglichkeit, neue Data Source zu erstellen, neu zu ingesten oder zu löschen
Kriterien für Abnahme definieren: \
**Weiteres Vorgehen**
bspw. Skalierbarkeit bei Planung miteinbeziehen. Muss nicht nur bei 100 ContentItems, sondern auch mit Millionen funktionieren.
Kriterien für Abnahme definieren: \
Erstes Stundenkontingent vereinbaren, enge Feedbackloops alle zwei Wochen.
bspw. Skalierbarkeit bei Planung miteinbeziehen. Muss nicht nur bei 100 ContentItems, sondern auch mit Millionen funktionieren.
Ingo macht Issues aus User Stories im GIT Repo.
Erstes Stundenkontingent vereinbaren, enge Feedbackloops alle zwei Wochen.
WareTec macht Schätzungsaufschlag und trifft sich mit arso, um dann die Details zu klären und bessere Schätzung zu kriegen.\
Ingo macht Issues aus User Stories im GIT Repo.
Anschließend nochmal Treffen mit Ingo, danach schauen, dass wir Schritt für Schritt zu Arbeitspaketen und erste Stundenkontingenten kommen.
WareTec macht Schätzungsaufschlag und trifft sich mit arso, um dann die Details zu klären und bessere Schätzung zu kriegen.\
Nächster Termin: Freitag, 14.7., 12 Uhr
Anschließend nochmal Treffen mit Ingo, danach schauen, dass wir Schritt für Schritt zu Arbeitspaketen und erste Stundenkontingenten kommen.
Nächster Termin: Freitag, 14.7., 12 Uhr
- specified fields in database schema will contain up to 15 different translations
- texts will be tagged as original language, translation or auto-generated
- revisions will have a new field containing all translation language codes
- specified fields in database schema will contain up to 15 different translations
- graphql api will be extended to allow queries to filter by language code
- texts will be tagged as original language, translation or auto-generated
- mapping for cba datasource will be adjusted for these changes
- revisions will have a new field containing all translation language codes
- graphql api will be extended to allow queries to filter by language code
For later:
- mapping for cba datasource will be adjusted for these changes
For later:
Licenses: only ingest cc licensed content (or public domain?)
Licenses: only ingest cc licensed content (or public domain?)