# Compare

CDC Backend obsługuje komunikację z CDC Compare i dostarcza requesty do budowania porównań z poziomu frontendu oraz monitorowania jego postępu. Serwis buduje również historię porównań, która jest wykorzystana, do odtwarzania stanu frontendu na podstawie wybranego porównania.



## Endpointy

<table data-full-width="true"><thead><tr><th width="112">Method</th><th width="503">Endpoint</th><th></th></tr></thead><tbody><tr><td><mark style="color:green;">GET</mark></td><td>compare/init/<mark style="color:green;">{uuid}</mark></td><td>Zwraca dane do inicjalizacji wszystkich kroków porównania na podstawie zapisanego <mark style="color:green;">compareId</mark></td></tr><tr><td><mark style="color:yellow;">POST</mark></td><td>compare/bind/tables</td><td>Służy wygenerowania danych dla widoku nadania kolejności tabelom w ramach schematów. W request można podać historyczne <mark style="color:green;">compareId</mark>, żeby auto uzupełnić wybrany wcześniej order</td></tr><tr><td><mark style="color:yellow;">POST</mark></td><td>compare/bind/columns</td><td>Służy wygenerowania danych dla widoku wyboru kolumn i kluczów głównych do porównania. W request można podać historyczne <mark style="color:green;">compareId</mark>, żeby auto uzupełnić wybrany wcześniej opcje</td></tr><tr><td><mark style="color:yellow;">POST</mark></td><td>compare</td><td>Uruchom porównywanie</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/config</td><td>Opcje konfiguracyjne dla tworzonych porównań</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/status?page=1&#x26;size=10&#x26;sort=createDate,asc</td><td>Pobierz informacje o porównywaniach. Obsługuje pełny paging</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/status/<mark style="color:green;">{uuid}</mark></td><td>Pobierz informacje o jednym porównaniu</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/status/<mark style="color:green;">{uuid}</mark>/current</td><td>Zwraca aktualny status porównania wraz z czasem gdy przeszło w ten stan</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/status/<mark style="color:green;">{uuid}</mark>/stages</td><td>Zwraca ścieżkę przejścia między stanami porównania wraz z czasem, kiedy statusy się zmieniały </td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/no_sql?page=1&#x26;size=10&#x26;sort=createDate,asc</td><td>Pobierz wyniki porównywania dla każdej z tabel. Obsługuje pełny paging</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/no_sql?ids=1,2,3</td><td>Pobierz wyniki porównywania dla wybrancyh z tabel z instrukcjami SQL</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/with_sql?page=1&#x26;size=10&#x26;sort=createDate,asc</td><td>Pobierz wyniki porównywania dla każdej z tabel z instrukcjami SQL. Obsługuje pełny paging</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/no_sql/<mark style="color:green;">{tableCompareId}</mark></td><td>Pobierz wyniki porównywania dla wybranej tabeli</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/with_sql/<mark style="color:green;">{tableCompareId}</mark></td><td>Pobierz wyniki porównywania dla wybranej tabeli z instrukcjami SQL</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/sql/<mark style="color:green;">{tableCompareId}</mark>/<mark style="color:green;">{queryType}</mark>?page=1&#x26;size=100</td><td>Pobierz instrukcje SQL konkretnego typu (UPDATE,DELETE,INSERT). Obsługuje paging bez sort</td></tr><tr><td><mark style="color:green;">GET</mark></td><td>compare/result/<mark style="color:green;">{uuid}</mark>/files?ids=1,2,3,4</td><td>Pobierz zapytania sql w postacie ZIP</td></tr><tr><td><mark style="color:yellow;">POST</mark></td><td>compare/apply/<mark style="color:green;">{uuid}</mark>?ids=1,2,3</td><td>Zastosuj na bazie docelowej wyniki porównania dla wybranych tabel (kolejność tabel zgodna z tą podaną przy uruchomieniu)</td></tr></tbody></table>

<mark style="color:green;">uuid</mark> jest zwracane po poprawnym uruchomieniu porównania.

Główna różnica między tymi endpontami, a tymi udostępnianymi przez serwis CDC Compare jest zapisywanie historycznych porównań i uwzględnianie ich w budowaniu nowych. Przy uruchamianiu porównania  (<mark style="color:yellow;">POST</mark> `compare`) przyjmowane są dane ze wszystkich etapów formularza frontendowego tzn.:

* &#x20;`leftBind` i `rightBind` - tabele i schematy wybrane w kroku 2. (Data) - określane w kodzie jako DataSources
* `orderTables` - wybrana przez użytkownika w kroku 3. (Order Tables) kolejność tabel w ramach par schematów
* `tablesBindings` - wprowadzone w kroku 4. (Select Data) modyfikacje w kolumnach, które będą porównywane oraz klucze główne które będą użyte

Na podstawie tych zapisanych danych przy następnych zapytaniach do `compare/bind/tables` oraz `compare/bind/columns` można podać parametr `savedCompareId` oraz wykonać zapytanie do  `compare/init/`<mark style="color:green;">`{uuid}`</mark> aby wypełnić dane we wszystkich krokach. W takim wypadku serwis spróbuje automatycznie dopasować poprzednie wybory użytkownika do aktualnego stanu baz danych. Trzeba przy tym brać pod uwagę, że:

* Dla `compare/init/`<mark style="color:green;">`{uuid}`</mark> dane będą zwracane dla kolejnych kroków formularza tak długo, jak na jakimś kroku nie powstała jakaś różnica między stanem zapisanym, a tym w bazie danych np. jeśli jedna z tabel zapisanych w `leftBind` nie istnieje w chwili zapytania w bazie danych to pola `orderTables` i `detailedTable` będą miały wartości null. Jeśli na etapie generowania danych do `orderTables` pojawiły się jakieś nowe tabele zostaną one pominięte, żeby dane do&#x20;
* Dla `compare/bind/tables` przy tabelach zwracane są informacje, że tabela dostała dodana lub usunięta. Jeśli schemat został usunięty, to jest całkiem pomijany. Wszystkie nowe tabele są dodawane na koniec list, tak żeby zachować wcześniej wybraną kolejność
* Dla `compare/bind/columns` zwracane są informacje, czy nastąpiły jakieś zmiany w kolumnach lub ich typach danych. Jeśli się da to do tabel przypisywane są wybrane wcześniej klucze główne oraz ustawiany jest wybór kolumn do porównania, jak i w kluczu. Jeśli są jakieś nowe kolumny to będą one domyślnie odznaczone.
