Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Synchronizace dat pro web s AirTable #50

Closed
HormCodes opened this issue May 15, 2020 · 2 comments
Closed

Synchronizace dat pro web s AirTable #50

HormCodes opened this issue May 15, 2020 · 2 comments

Comments

@HormCodes
Copy link
Member

Mnoho dat pro >Česko.Digital držíme v AirTable a dává smysl data o projektech, partnerech atd. držet na stejném místě.

Chceme pro web využívat kopii dat a mít tuto kopii v repozitáři, aby nedocházelo k nechtěným úpravám webu.

Jakým způsobem by měla být provázená synchronizace?
Jednou za čas? Na požádání?

@zoul
Copy link
Member

zoul commented Jun 10, 2020

Vyleju si tady z hlavy pár poznámek pro variantu automatických exportů:

  • AFAIK AirTable bohužel neumí žádný webhook při změnách. I kdyby uměla, je tady otázka, jestli data exportovat po každé změně – AirTable totiž ukládá průběžně a kdybychom po každém průběžném uložení měli exportovat data, velmi snadno se může stát, že exportujem něco nekompletního (rozepíšu řetězec do popisku projektu, zamyslím se, AirTable uloží ⇒ přegenerujem web s nekompletním popiskem). Takže reálně chcem exportovat po nějaké „bezpečné pauze“ od poslední aktualizace dat. Ať už to bude udělané přes webhook (kdyby AirTable přidala), nebo přes polling.
  • Abychom poznali, že od poslední aktualizace uběhlo požadovaných x minut, potřebujem buď stav uvnitř toho exportního procesu, anebo v tabulce musí být pole „čas poslední aktualizace“.
  • Nasazení si představuju jako GitHub Action po pěti minutách, ale bylo by záhodno zkusit z AirTable nějak vyčíst rovnou časovou známku poslední aktualizace, ať odtud co pět minut nečtem kompletní obsah tabulky 🤦

V (pseudo)kódu nějak takhle:

const records = await readRecordsFromAirtable({
    // API klíč AirTable
    apiKey: "…",
    // ID databáze v AirTable
    databaseId: "…",
    // Název tabulky v AirTable
    tableName: "…"
})

if (recordsAreDirty(records, "Poslední aktualizace")) {
    const json = transformData(records)
    await saveToRepo({
        // Exportovaná data
        data: json,
        // Repo, do kterého data exportovat
        targetRepo: "https://github.com/cesko-digital/web",
        // Cesta v repu, na kterou data exportovat
        targetPath: "data/projects.json",
        // GitHub API token
        gitHubApiToken: "…",
        // Commit message
        commitMsg: "Aktualizace dat o projektech"
    })
}

Teď mně došel čas, ještě se k tomu vrátím. Celkově furt zvažuju, jestli to není overkill a nenapadá nás něco jednoduššího. Ale zase bysme tohle klidně mohli mít jako „exportního démona“ pro všechny potřebné tabulky v AirTable najednou.

@HormCodes
Copy link
Member Author

Rozděleno na #68, #70, #71 a #72

Prozatím uzavírám, v případě potřeby můžeme kdykoliv znovu otevřít.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants