.. _config_migration:

==================================
Migrace z Imwhooseru
==================================

PEVA Connector vznikl vyčleněním importu PEvA z nástroje Imwhooser. Tabulky
PEvA (``pv_fund``, ``property`` a fond-only část ``elza_queue``) jsou v obou
aplikacích shodné, takže PEVA Connector umí převzít existující databázi
Imwhooseru.

Idempotentní schéma
===================

Migrace databáze (Liquibase) jsou navržené tak, aby fungovaly ve dvou
scénářích:

 - **Nová (prázdná) databáze** - schéma se vytvoří. Tabulka ``elza_queue`` se
   vytvoří v "fund-only" podobě (bez sloupce ``entity_id``).
 - **Existující databáze Imwhooseru v "PEVA módu"** - tabulky ``pv_fund``,
   ``property`` i ``elza_queue`` již existují. Liquibase je díky podmínkám
   (``preConditions onFail="MARK_RAN"``) detekuje, přeskočí jejich vytváření
   a převezme je i s daty.

Stejný changelog tedy funguje pro čistou instalaci i pro převzetí.

.. note::

   Pokud byl původní Imwhooser nasazen ze **staršího (snapshotového) buildu**,
   může jeho ``elza_queue`` postrádat sloupce ``create_time``, ``send_time`` nebo
   ``scope`` (byly do Imwhooseru přidány později). Protože tabulka existuje,
   přeskočí se její ``createTable`` (``MARK_RAN``) a tyto sloupce by jinak
   chyběly - projeví se to při startu chybou ``column ... create_time does not
   exist``. Idempotentní changelog je proto **doplní samostatnými** ``addColumn``
   **kroky** (stejně jako u ``pv_fund.department_name`` / ``department_number``),
   takže převzetí snapshotové databáze funguje bez ručního zásahu.

Doporučený postup migrace
=========================

1. **Vypněte stahování PEvA v Imwhooseru** (``peva.processing.enabled: false``)
   a nechte doběhnout odeslání případných čekajících fondů z ``elza_queue``,
   aby fondy do Elzy posílala jen jedna aplikace.
2. Vytvořte **kopii** databáze Imwhooseru a nasměrujte na ni PEVA Connector
   (vlastní databáze - obě aplikace nesdílejí jednu živou DB, aby se znovu
   nepropojily přes ``elza_queue``).
3. Spusťte PEVA Connector. Idempotentní changelog převezme ``pv_fund``,
   ``property`` i čekající fond záznamy.
4. Ověřte stahování z PEvA a odesílání do Elzy (viz :ref:`oper_monit`).

Úklid převzaté databáze
=======================

PEVA Connector je samostatná, odlehčená aplikace a entity-side schéma
Imwhooseru (tabulky ``imw_*`` / ``*_person`` a sloupec ``elza_queue.entity_id``)
nevlastní ani nevyužívá. Při převzetí databáze je proto **automaticky a nevratně
odstraní** - úklidový changelog se spustí vždy při startu, bez nutnosti
zvláštního nastavení. Jde o trvalé "odpojení" od Imwhooseru.

Konkrétně se odstraní:

 - sloupec ``elza_queue.entity_id`` (včetně cizího klíče a indexu),
 - tabulky ``imw_*`` / ``*_person`` (entity-side schéma Imwhooseru).

Každý krok je idempotentní (``preConditions onFail="MARK_RAN"``): na čisté nebo
již uklizené databázi se přeskočí, takže opakované starty ani nová instalace
ničemu nevadí.

.. warning::

   Úklid je **nevratný** a běží automaticky při prvním startu nad převzatou
   databází. Migrujte proto vždy nad **kopií** databáze (viz doporučený postup
   výše) a nikdy nesměřujte PEVA Connector na živou databázi, kterou ještě
   používá Imwhooser.

Úklid na straně Imwhooseru
==========================

Po odpojení je možné v původním Imwhooseru odstranit již nevyužívané PEvA
tabulky a sloupce (``pv_fund``, ``property``, ``elza_queue.fund_id``). Tato
úprava se provádí v Imwhooseru, nikoli v PEVA Connectoru.
