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 - Replication & Collector
RSS Requirements for Ingestion: https://cloud.servus.at/s/iH8x27gmHJH26Tj
Full documentation at https://git.fairkom.net/emb/displ.eu/repco/-/tree/main/docs?ref_type=heads
REPCO Requirements for Display EU: https://hackmd.io/LDGoiG7WQEOC7-KozhPLDw
## Language support
Data model: https://hackmd.io/MCDTLRa-RViNbcxl6D7sog?view#Data-modeling
Repco currently supports the following languages: Bulgarian, Croatian, Czech, Dutch, English, Finnish, French, German, Greek, Hungarian, Italian, Polish, Portuguese, Romanian, Russian, Slovakian, Spanish, Swedish, Turkish, Ukrainian.
Incoming content items are automatically translated into the supported languages.
## required features
## Auto-teasers
### language support
Repco automatically creates 2 teasers for incoming content items based on their full texts.
* all entities have a content language header
* Short teaser for tile preview (consisting of max. three sentences or bullet points)
* translations are regular entities that have a header `IsTranslationOf` that links back to the entity in the original language entity
* Long teaser (around 2 paragraphs) with a minimum of 300 characters
* queries support either listing entities in a particular language (originals and translations), or all originals (in all languages)
* relations between entities (e.g. from ContentItem to Concepts) always link to the original. translations are then resolved in a second step.
* translations may be marked as user- or auto-generated including metadata about their origin
* 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
* open question: translation of metadata, concepts, etc
### subtitles
Teasers are automatically translated into the supported languages.
* repco has to support subtitles per media asset
## Ingestion
* subtitles have to support translations
### activitypub import
Repco supports these exchange standards for data ingestion:
* repco can import channels from activitypub servers
* RSS 2.0
* must support mastodon and peertube feeds
* Channels from ActivityPub servers, such as peertube (e.g. displayeurope.video)
* must support media attachements
* Wordpress REST API by making use of the WP Plugin "Transposer for Display Europe"
* Custom REST APIs such as for CBA and XRCB
### full-text search
## API
* all content in a repco repo is (optionally) indexed into a full-text search engine
* GraphQL API usage examples: [https://git.fairkom.net/emb/displ.eu/repco/-/wikis/GraphQL-Queries](https://git.fairkom.net/emb/displ.eu/repco/-/wikis/GraphQL-Queries)
* 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
### minimal management UI
## Cross-lingual, semantic full-text search
*create and sync repos
*All content in a Repco repo is indexed in a full-text vector database
*manage datasources
*Special consideration has to be put to support multilingual search
*view status of ingest tasks
*Repco provides a GraphQL interface to perform search queries
## non-feature tasks
## Search & Recommendations
repco needs development in these fields independent of the mentioned features to become a production-ready tool:
A search & recommendation algorithm includes:
### seperate core from domain data model
* Semantic similarity
* Collaborative Filtering
* Personalisation by user data tracking (click history, search history and manually specified interests)
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
## Dashboard/Backend: Management UI
### schema evolution for domain data model
The REST API provides CRUD endpoints for content management:
* add more flexible schema definition to e.g. include indexing properties
Manage...
* develop and test a way to perform schema migrations
* Content Items
* have a good developer and devops experience for schema evolution over time
* Media Assets
* Concepts (Tags)
* Contributors
* Content Groupings
* Datasources and Repos
* View ingestions status of a data source
### monitoring and error handling
## In improvement
* better way to surface errors during ingest (which can always happen because external data sources may be nonconfirming)
### Better monitoring and error handling
* monitoring, e.g. via a prometheus endpoint
### testing and devops
* Better way to surface errors during ingest (which can always happen because external data sources may be nonconfirming)
* Async ingest and job monitoring via BullMQ
* write more unit and integration tests
### Testing and devops
* devops guides for deployment and updates
## potential later features
* Add more documentation
* Write more unit and integration tests
* Devops guides for deployment and updates
### job queues and bots
## Archive
* have APIs for bots/workers to pull and push content from/to repco
### User Stories
* support different authentication methods
### user content
* support storing user-generated content in repco repos
* support different authentication methods
## User Stories
* 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.
* 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.
* 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
* 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
...
@@ -93,36 +85,3 @@ currently, the domain data model and the lower data model are not properly seper
...
@@ -93,36 +85,3 @@ currently, the domain data model and the lower data model are not properly seper
* 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.
* 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
* Uploaderin Reka verfasst auf eurozine.com einen Artikel auf Englisch. REPCO kann den RSS Feed als Data Source indizieren
* 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
* 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
\ No newline at end of file
**Monitoring Tools**
* Übersicht über den Datenpool
* Status einzelner Data Sources und Ingestionprozesse
* Fehlermeldungsprotokoll
* Möglichkeit, neue Data Source zu erstellen, neu zu ingesten oder zu löschen
**Weiteres Vorgehen**
Kriterien für Abnahme definieren: \
bspw. Skalierbarkeit bei Planung miteinbeziehen. Muss nicht nur bei 100 ContentItems, sondern auch mit Millionen funktionieren.
Erstes Stundenkontingent vereinbaren, enge Feedbackloops alle zwei Wochen.
Ingo macht Issues aus User Stories im GIT Repo.
WareTec macht Schätzungsaufschlag und trifft sich mit arso, um dann die Details zu klären und bessere Schätzung zu kriegen.\
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
- graphql api will be extended to allow queries to filter by language code
- mapping for cba datasource will be adjusted for these changes
For later:
Licenses: only ingest cc licensed content (or public domain?)