O-Feed service
Ahoj Fando,
super posun v úpravách směrem k releasu QE3. Před ofiko releasem QE3 bych rád dotáhl OFeed službu, aby fungovalo spolehlivě a oboustranně. Pořádali jsme na tom s Martinem teď oblastňáky a po doladění a zautomatizování to bude fakt luxusní. Mám v hlavě tyto body k dořešení, kde bych potřeboval poradit:
- Nevím si rady jak optimálně zpracovávat změny z OFeedu do QE (číslo čipu, statusu, poznámka). Chtělo by to nějak logovat pro zpětné dohledání a nevím kam změny ukládat, jestli má QE nějakou možnost. Koukal jsem do stávajícího datového modelu a viděl tabulku qxchanges. Něco takového by se hodilo a jestli budeš službu QE Exchange odebírat, tak bychom mohli v nějaké podobě zanechat a přejmenovat. V návrhu okna služby jsem měl představu, že by byla tabulka co by zpracované změny ukazovala. Ale to je jen nějaký můj design a rád si nechám poradit. Opět jsem si všiml, že v QE3 je nová věc pozdní registrace, která úplně nevím jak má fungovat, ale možná by to šlo využít a přijde mi to lepší než okno služby.
- Jak na rozlišení mezi přidáním nového a editací stávajícího závodníka? Řešení je přidání nového db eventu pro přidání závodníka (chtělo by přidat event i pro smazání závodníka). Aktuálně vyvolávají obě akce (create i edit) stejný db event a řeším to na službě dost divoce porovnáváním sekvencí a je to nefunkční. Plus mi přijde, že se event vyvolává i ve chvíli, kdy na editačním formuláři nedojde ke změně. Z výkonnostních důvodů nechceme vždy posílat celé xml a proto bych potřeboval odpovídající změny (create, edit, delete) odchytit a data poslat na příslušný endpoint.
- Rozšíření RunStatus o status Inactive, který OFeed a IOF standard považuje za počáteční stav = ještě nevystartoval. Tos mi psal v PR.
- Přiřazení QE id nově přidanému závodníkovi co je v OFeedu ale nepochází z QE - to je nice to have a hudba budoucnosti :) Aktuálně jde přidat do OFeedu přes endpoint a přemýšlím nad logikou jak zpracovat v QE - bude potřeba změnu přijmout, přidělit závodníkovi QE id a poslat hodnotu zpět do OFeedu.
Díky moc za rady a poznatky
Lukáš
1. qxchanges
Ano tato tabulka je pripravena pro vkladani pozadovanych uprav externimi programy s tim, ze je operator v QE jednoduse potvrdi nebo zamitne. O-Feed plugin by do ni mohl zmeny SI zapisovat a asi by je mohl v tomto pripade i automaticky commitnout, tim bychom meli historii a bylo by to i automaticky bez prace. To je ta dobra zprava.
qxchanges je porad ve stavu draftu, a nevim, kdy to vydam, planuju nekdy do Vanoc, kdyby na to byl nejaky vetsi tlak, asi bych to mohl urychlit, ale ocekavam, ze by pres zimu mohl byt cas.
2. Db Events
Tady planuji udelat novou sadu DB eventu v souvislosti s qxchanges, ty puvodni vznikly pomerne zivelne. Novy design by vypadal nasledovne:
Update
{
"table": "runs",
"id": 1234,
"record": {"siid": 789456, "checktime": "2025-12-13T10:00:00"},
"op": "Update"
}
Insert
{
"table": "competitors",
"id": 1235,
"record": {"firstname": Fanda, "lastname": "Vacek"},
"op": "Insert"
}
Delete
{
"table": "runs",
"id": 1235,
"record": null,
"op": "Delete"
}
3. Rozšíření RunStatus o status Inactive
PR nemohu najit :(
Přiřazení QE id nově přidanému závodníkovi co je v OFeedu ale nepochází z QE
Asi jedine presne tak, jak popisujes.
3. Rozšíření RunStatus o status Inactive
PR nemohu najit :(
Tady #997
Asi jedine presne tak, jak popisujes.
Jak se v QE přidává nový závodník? Potřeboval bych ho založit se známými údaji - detail závodníka získat z OFeedu a vytvořit i záznam či záznamy v tabulce runs. Našel jsem CompetitorDocument::saveData(); (fce), ale nevím jak tomu podstrčit data co mám o závodníkovi.
Tady planuji udelat novou sadu DB eventu v souvislosti s
qxchanges, ty puvodni vznikly pomerne zivelne. Novy design by vypadal nasledovne:
Tohle nechápu jak myslíš. Já jsem měl na mysli tohle (výběr těch co využívám):
static constexpr auto DBEVENT_CARD_PROCESSED_AND_ASSIGNED = "cardProcessedAndAssigned";
static constexpr auto DBEVENT_COMPETITOR_EDITED = "competitorEdited";
static constexpr auto DBEVENT_COMPETITOR_ADDED = "competitorAdded"; // už jsem si přidal
a jejich vyvolání na odpovídajícím místě pomocí:
getPlugin<EventPlugin>()->emitDbEvent(Event::EventPlugin::DBEVENT_COMPETITOR_EDITED, competitor_id);
Zároveň by bylo luxusní, kdyby byly vyvolaný jen ve chvíli, kdy se opravu změní data (a ne jen otevře a zavře dialog) např. u toho EDITED. Což mi přijde, že se neděje.
1. qxchanges
Ano tato tabulka je pripravena pro vkladani pozadovanych uprav externimi programy s tim, ze je operator v QE jednoduse potvrdi nebo zamitne. O-Feed plugin by do ni mohl zmeny SI zapisovat a asi by je mohl v tomto pripade i automaticky commitnout, tim bychom meli historii a bylo by to i automaticky bez prace. To je ta dobra zprava.
Paráda, tabulku už plním provedenými změnami. Jak máš namyšlené to potvrzování/zamítnutí? Čekám, že tam máš logiku postavenou nad sloupci status, status_message a lock_number. Jak můžu automaticky commitnout?
Tady planuji udelat novou sadu DB eventu v souvislosti s
qxchanges, ty puvodni vznikly pomerne zivelne. Novy design by vypadal nasledovne:Tohle nechápu jak myslíš. Já jsem měl na mysli tohle (výběr těch co využívám):
static constexpr auto DBEVENT_CARD_PROCESSED_AND_ASSIGNED = "cardProcessedAndAssigned"; static constexpr auto DBEVENT_COMPETITOR_EDITED = "competitorEdited"; static constexpr auto DBEVENT_COMPETITOR_ADDED = "competitorAdded"; // už jsem si přidal
a jejich vyvolání na odpovídajícím místě pomocí:
getPlugin<EventPlugin>()->emitDbEvent(Event::EventPlugin::DBEVENT_COMPETITOR_EDITED, competitor_id);
Zároveň by bylo luxusní, kdyby byly vyvolaný jen ve chvíli, kdy se opravu změní data (a ne jen otevře a zavře dialog) např. u toho
EDITED. Což mi přijde, že se neděje.
Presne tak to myslim, hodlam nahradit tyto stare, novymi, ktere se budou emitovat per table a teprve po uzpesnem zapisu do SQL.
Asi jedine presne tak, jak popisujes.
Jak se v QE přidává nový závodník? Potřeboval bych ho založit se známými údaji - detail závodníka získat z OFeedu a vytvořit i záznam či záznamy v tabulce
runs. Našel jsemCompetitorDocument::saveData();(fce), ale nevím jak tomu podstrčit data co mám o závodníkovi.
CompetitorDocument doc;
doc.loadForInsert();
doc.setValue("firstName", "Fanda");
doc.setValue("lastName", "Vacek");
...
doc.save();
auto competitor_id = doc.value("competitors.id");
3. Rozšíření RunStatus o status Inactive
PR nemohu najit :(
Tady #997
Ta PR neni spravne, napsal jsem tam vlastne ze Inactive == RunStatus.ok(), ale to neni pravda. Melo by to byt, ze Inactive == RunStatus.ok() && checkTimeMs == NULL && coridorTime == NULL && finishTimeMs == NULL. My v QE tento flag proste nemame, dokud ma zavodnik empty run status, nevystartoval, nedobehl a nebyl v koridoru, je neaktivni.
CompetitorDocument doc; doc.loadForInsert(); doc.setValue("firstName", "Fanda"); doc.setValue("lastName", "Vacek"); ... doc.save(); auto competitor_id = doc.value("competitors.id");
Chápu, díky moc za radu.
Ještě jedna otázka. Jak vytvořit související záznam v runs tabulce pro etapu či etapy a získat toto id dle aktivní etapy (OFeed ho stejně jako xml export používá jako PK)? Nebo se vytvoří automaticky a je možné se jen sql selectem doptat?
CompetitorDocument doc; doc.loadForInsert(); doc.setValue("firstName", "Fanda"); doc.setValue("lastName", "Vacek"); ... doc.save(); auto competitor_id = doc.value("competitors.id");
Chápu, díky moc za radu.
Ještě jedna otázka. Jak vytvořit související záznam v runs tabulce pro etapu či etapy a získat toto id dle aktivní etapy (OFeed ho stejně jako xml export používá jako PK)? Nebo se vytvoří automaticky a je možné se jen sql selectem doptat?
CompetitorDocument::runIds()
díky moc za rady 👍 ještě by mě prosím zajímalo jak přidat nové řetězce pro lokalizaci služby do Webplate?
díky moc za rady 👍 ještě by mě prosím zajímalo jak přidat nové řetězce pro lokalizaci služby do Webplate?
Retezce se generuji automaticky z kodu QE, takze je staci pouzit nekde v programu a dat do tr, napr: label->setText(tr"Ahoj")
Retezce se generuji automaticky z kodu QE, takze je staci pouzit nekde v programu a dat do
tr, napr:label->setText(tr"Ahoj")
užití tr("") v kódu (.cpp, .h) je mi jasné, ale jak prosím na překlad textů v qui (.ui)?
@fvacek poradíš mi prosím jak přeložit stringy v qui (např ofeedclientwidget.ui)?