ReČeK · modul Agentura (mod-br-agency)

Založení nového titulu a produktu z GUI

Pořadí, ve kterém GUI volá REST metody agenturního modulu, když uživatel ručně zakládá nový titul a produkt — od načtení číselníkových hodnot do formuláře (ONIX, autoři, vydavatel), přes uložení titulu a produktu, přidělení ISBN/ISMN, až po zveřejnění do veřejného katalogu. Cesty odkazují do recek-swagger.tritius.cz. Žádný hromadný import ze souboru — vše vzniká interaktivně.

Base URL /api → mod-br-agency Swagger recek-swagger.tritius.cz Hlavičky x-okapi-tenant / -token / -url

1 Otevření formuláře — načtení číselníků (ONIX & ostatní)

Když uživatel otevře formulář nového titulu/produktu, GUI si nejdřív načte data pro našeptávače a rozbalovací seznamy. Nic se nezakládá — jsou to čtecí (GET) volání, která naplní pole formuláře: role autorů, forma produktu, typ obsahu, stav vydání (vše z ONIX číselníků), dále vydavatele a osoby.

ONIX číselníky pro rozbalovací pole

Číselník = OnixCodetable (např. List 17 – role kontributora, List 150 – forma produktu, List 81 – typ obsahu, List 64 – stav vydání). Konkrétní hodnoty = OnixCodetableItem. GUI načte položky daného číselníku a nabídne je ve výběru; do titulu/produktu se pak ukládá jen id zvolené položky.

GET/onix-codetables GET/onix-codetable-items?query=…

Pole ve formulářiONIX číselníkKam se uloží
Role autoraList 17 – Contributor roletitleContributions[].roles[].role
Forma produktuList 150 – Product formproduct.form
Typ obsahuList 81 – Content typeproduct.primaryContentType
Stav vydáníList 64 – Publishing statusproduct.publishingStatus

Vydavatel a osoby pro našeptávače

PoleEndpointÚčel
Vydavatel (owner)GET/agency-publishers/searchVýběr vlastníka titulu
Autor (osoba)GET/persons · GET/persons/search-optionsNašeptávač autorů

2 Přidání autora / kontributora

Autor není volný text — je to osoba (fyzická nebo právnická). Uživatel ho ve formuláři buď vybere z našeptávače (data z kroku 1), nebo — pokud neexistuje — rovnou založí novou osobu. Přiřazení k titulu se pak uloží jako součást těla titulu v poli titleContributions[] (krok 3).

  1. Vybrat existující osobu
    Z našeptávače — /persons / /persons/search-options (načteno v kroku 1). GUI si drží zvolené person.id.
  2. Nebo založit novou osobu přímo z formuláře
    Fyzická osoba (autor-člověk) nebo právnická osoba (korporace/instituce jako původce). Vrací id, které se použije v kontribuci.

    POST/natural-persons POST/legal-persons

  3. Zvolit roli (z ONIX List 17) a pořadí
    Role se vybírá z číselníku načteného v kroku 1; ukládá se jako OnixCodetableItem. Kontributor se neposílá samostatně — je součástí těla titulu.

Struktura kontributora v těle titulu

// TitleDto.titleContributions[]
{
  "person": { "id": "<id z /natural-persons | /legal-persons>" },
  "sequenceNumber": 1,
  "roles": [
    { "role": { "id": "<OnixCodetableItem, List 17 – např. A01 autor>" } }
  ]
}

Doplňková pole: firstName / lastName / name (denormalizovaný zápis), biographicalNote, unnamedPerson (nejmenovaný přispěvatel jako ONIX kód).

Změnu údajů o už existující osobě lze nahlásit agentuře přes POST/natural-persons/report-change / POST/legal-persons/report-change.

3 Uložení titulu

Po vyplnění formuláře GUI uloží titul jedním voláním. Titul patří vydavateli (ownerId z kroku 1) a nese autory (titleContributions z kroku 2), názvy, jazyky a témata.

  1. Vytvořit titul
    V těle ownerId, names[], languages[], subjects[] a titleContributions[]. Odpověď obsahuje id nového titulu.

    POST/titles

  2. Případná úprava titulu
    Optimistický zámek — v těle posílejte aktuální version.

    PUT/titles/{id} GET/titles/{id}

4 Uložení produktu k titulu

Produkt je konkrétní vydání/forma titulu (tištěná kniha, e-kniha, audio…). Odkazuje na titul (title.id z kroku 3) a nese ONIX atributy z číselníků: forma (form), typ obsahu (primaryContentType), stav vydání (publishingStatus), rozsah, cena. GUI má dvě cesty:

Cesta A — nejdřív jen produkt, číslo zvlášť

POST/products — produkt vznikne bez čísla; ISBN/ISMN přidělíte samostatně v kroku 5.

Cesta B — uložit produkt a rovnou přidělit číslo (doporučeno pro GUI)

POST/products/create-with-number — jedním voláním založí produkt a pokusí se přidělit číslo.

Tělo ProductCreateWithNumberRequest: product, assignProductNumber=true, volitelně publisherPrefixId (konkrétní prefix z feasibility) a magnitude (velikost bloku pro nový prefix: 1 = 10, 2 = 100, 3 = 1000 čísel).

Klíčové chování: produkt se uloží vždy. Když přidělení čísla vyžaduje rozhodnutí uživatele (vytvořit nový prefix) nebo selže obchodní podmínka, odpověď vrátí productNumber: null a needsPublisherPrefix: true — produkt zůstává uložený, číslo se dořeší krokem 5.

5 Přidělení čísla produktu (ISBN / ISMN)

Ruční přidělení má tři fáze: ověření proveditelnosti → náhled → přidělení. Feasibility lze volat i před vznikem produktu (jen z titulu), takže GUI dopředu ví, zda a z jakého prefixu jde číslo přidělit, a podle toho zobrazí volby ve formuláři produktu.

  1. Ověřit proveditelnost (feasibility)
    Jen z titleId. Řekne, zda lze přidělit, případně proč ne, a nabídne prefixy k výběru (prefixes[]) nebo příznak needsNewPrefix.

    GET/product-numbers/assign/feasibility/{titleId}

  2. Náhled přidělení (preview)
    Ukáže konkrétní hodnotu, kterou by systém přidělil (agenturní + vydavatelský prefix + pořadové číslo), bez zápisu.

    POST/product-numbers/assign/preview GET/product-numbers/assign/{productId}/by-product-id

  3. Přidělit číslo (commit)
    Zapíše číslo k produktu. Tělo ProductNumberAssignRequest: productId, publisherId (povinné), volitelně publisherPrefixId / agencyPrefixId / productNumberId, případně magnitude pro nový prefix.

    POST/product-numbers/assign

Proč přidělení selže — kódy reason z feasibility

ReasonVýznam
PUBLISHER_CLOSEDVydavatel titulu je uzavřený.
DATA_NOT_CONFIRMEDPotvrzení dat garantem chybí nebo je starší než 1 rok.
NO_AGENCY_PREFIXPro registrační agenturu není nastaven agenturní prefix.
NO_AVAILABLE_NUMBERSAktivní prefix vydavatele nemá volná čísla.
needsNewPrefix = true (při canAssign = true): přidělit lze, ale je potřeba založit nový vydavatelský prefix — uživatel zvolí velikost bloku (magnitude). Jinak feasibility vrátí prefixes[] s volbami (každá má publisherPrefixId + čitelný label jako 978-80-7702).

Doplňkové operace nad čísly

AkceEndpoint
Čísla přiřazená tituluGET/product-numbers/by-title/{titleId}
Zrušit výběr číslaPOST/product-numbers/{id}/deselect
Blokovat / odblokovat čísloPUT/product-numbers/{id}/block · PUT/product-numbers/{id}/unblock

6 Zviditelnění produktu ve veřejném katalogu

Produkt je po uložení defaultně privátní. Zveřejnění je změna dostupnosti na PUBLIC. Veřejný katalog čte z indexu (Solr), takže po hromadnějších změnách je vhodné spustit přeindexaci.

  1. Nastavit dostupnost produktu na PUBLIC
    Tělo ProductAccessibilityRequest: { "accessibility": "PUBLIC" } (hodnoty PUBLIC / PRIVATE). Po zveřejnění se plní publicTime.

    PATCH/products/{id}/accessibility

  2. (Volitelně) přeindexovat veřejný katalog
    Admin operace pro obnovu vyhledávacího indexu.

    POST/reindex

  3. Ověřit ve veřejném pohledu
    Veřejné čtení titulů, vydavatelů a autorů.

    GET/titles/search GET/titles/{id}

Do veřejného katalogu se produkt dostane jen tehdy, když má přidělené číslo (krok 5) a dostupnost PUBLIC.

Stavový diagram celého toku

Cesta ručního založení jednoho titulu a produktu z GUI — od načtení číselníků po zveřejnění, včetně rozhodovacích uzlů u přidělení čísla.

1 · Otevřít formulář — načíst číselníky GET /onix-codetable-items · /persons · /agency-publishers 2 · Autor = osoba POST /natural|legal-persons 3 · Uložit titul POST /titles (+ contributions) 4 · Uložit produkt POST /products[/create-with-number] 5a · Feasibility GET …/assign/feasibility/{titleId} canAssign? reason / needsNewPrefix Nelze — vyřešit důvod closed · not confirmed · no prefix 5b · Preview → Assign POST /product-numbers/assign 6 · Zveřejnit PATCH /products/{id}/accessibility contributions[] ne po nápravě ano
číselníky / entity produkt & číslo ověření / rozhodnutí blokující stav zveřejněno

Přehled endpointů podle pořadí

#MetodaCestaÚčel
1GET/onix-codetables · /onix-codetable-itemsHodnoty do rozbalovacích polí (role, forma, obsah, stav)
1GET/agency-publishers/searchNašeptávač vydavatele (owner)
1GET/persons · /persons/search-optionsNašeptávač autora
2POST/natural-persons · /legal-personsZaložení nové osoby (autora)
3POST/titlesUložení titulu (+ titleContributions[])
4POST/productsUložení produktu bez čísla
4+5POST/products/create-with-numberProdukt + přidělení čísla jedním voláním
5aGET/product-numbers/assign/feasibility/{titleId}Ověření proveditelnosti
5bPOST/product-numbers/assign/previewNáhled přiděleného čísla
5bPOST/product-numbers/assignPřidělení ISBN/ISMN
6PATCH/products/{id}/accessibilityZveřejnění (PUBLIC)
6POST/reindexPřeindexace veřejného katalogu