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

Add new internal endpoint for updating public csv data into S3 #645

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

etahto
Copy link

@etahto etahto commented Dec 11, 2024

Aika pitkälti olemassaolevaa totetusta mukaillen toteutettu uusi sisäinen endpoint julkisen puolen CSV-tiedostojen lataamiselle S3:een.

Aineisto.clj -tiedostossa tulee nyt hieman duplikaatti koodia ja ajattelin yhtenäistää toteutusta kunhan saan palautetta että olenhan tajunnut toiminnallisuuden oikein.

Testasin MinIO Consolen kautta ja näytti tulevan oikean kansion alle CSV:t

@etahto etahto marked this pull request as draft December 11, 2024 11:01
@@ -0,0 +1,53 @@
(ns solita.etp.service.csv-to-s3
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nimeäminen on vaikeata

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Voisi olla myös joku s3-caching tjsp.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En pidä tuosta ehdotuksestani enää yhtään. Joku s3-csv-caching olisi ollut parempi ehdotus, mutta tämäkin on kyllä mielestäni ihan kuvaava nimi.

(when (not= 0 (.position current-part))
(upload-part-fn (aineisto-service/extract-byte-array-and-reset! current-part))))))

(defn- process-csv-to-s3! [aws-s3-client key csv-reducible-query log-start log-end]
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ehkä tuo logitusten parametrisointi tässä kontekstissa oli vähän overkill mutta tulipahan tehtyä

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Varmaan ihan hyvä, että tulee ainakin muistettua logittaa, kun käyttää tätä funktiota.

@etahto etahto self-assigned this Dec 18, 2024
Copy link
Contributor

@solita-juhohaa solita-juhohaa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Joitakin ehdotuksia. Oleellisin varmaankin nuo middlewaret.


(defn update-public-csv-in-s3! [db whoami aws-s3-client query]
(let [csv-query (energiatodistus-csv/energiatodistukset-public-csv db whoami query)
key "/api/csv/public/energiatodistukset.csv"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tälle voisi tehdä jonkin public-csv servicen ja hakea keyn sitä kautta 🤔


(defn update-aineisto-in-s3! [db whoami aws-s3-client aineisto-id]
(let [csv-query (aineisto-service/aineisto-reducible-query db whoami aineisto-id)
key (str "/api/signed/aineistot/" aineisto-id "/energiatodistukset.csv")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nämäkin keyt voisi muuten siirtää serviceen. Vrt. solita.etp.service.energiatodistus/file-key

@@ -0,0 +1,53 @@
(ns solita.etp.service.csv-to-s3
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Voisi olla myös joku s3-caching tjsp.

(defn update-aineisto-in-s3! [db whoami aws-s3-client aineisto-id]
(log/info (str "Starting updating of aineisto (id: " aineisto-id ")."))
(let [csv-reducible-query (aineisto-reducible-query db whoami aineisto-id)
key (str "/api/signed/aineistot/" aineisto-id "/energiatodistukset.csv")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tämäkin olisi ollut hyvä silloin aikoinaan varmaan tehdä omaksi funktiokseen ja käyttää myös testeissä sitä kautta. Refaktoroi toki, jos huvittaa.

Comment on lines 9 to 15
(t/deftest test-public-csv-to-s3
(t/testing "Public csv doesn't exist before generating"
(t/is (false? (file/file-exists? ts/*aws-s3-client* "/api/csv/public/energiatodistukset.csv"))))

(t/testing "Public csv exists after generating"
(csv-to-s3/update-public-csv-in-s3! ts/*db* {:id -5 :rooli 2} ts/*aws-s3-client* {:where nil})
(t/is (true? (file/file-exists? ts/*aws-s3-client* "/api/csv/public/energiatodistukset.csv")))))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Täälläkin voisi sitten hakea file-keyt servicen kautta.

Comment on lines 13 to 15
:middleware [[security/wrap-db-application-name
(kayttaja-service/system-kayttaja :aineisto)]
[security/wrap-whoami-for-internal-aineisto-api]]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nämä middlewaret voisivat varmaan olla jotain muuta.

Vaikuttavat ainakin niihin, että saako tehdä tietokantakyselyt, ja jos jotain muutettaisiin, niin audit tauluihin tulisi merkintä käyttäjästä.

Koska csv:tä pystyy hakemaan public puolelta, niin voisi varmaan hyppiä siitä routesta taaksepäin ja päätellä, mitä kannattaisi olla, tai tarvitaanko näitä edes🤔

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jos nyt tajusin oikein tämän niin routessa takaisinpäin hyppimällä näyttäisi löytyvän publicin alta seuraava middleware, tämä varmaan riittäisi julkisen csvn latauksen tapauksessa?
["/public" {:middleware [[security/wrap-db-application-name]]}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Joo luulisin niin. Lisäksi tuli vähän mietittyä, että se saattaisi vaikutta jopa siihen mitä csv:hen tulee. En nyt ole ihan varma vaikuttaisiko, mutta kai se kulkeutuu tuonne solita.etp.service.energiatodistus-search/whoami-sql asti 🤔

Mutta nyt ainakin pitäisi olla sama. Jos keksii testin, jolla testaa vähän tuota sisältö, niin voisi olla hyvä.

(when (not= 0 (.position current-part))
(upload-part-fn (aineisto-service/extract-byte-array-and-reset! current-part))))))

(defn- process-csv-to-s3! [aws-s3-client key csv-reducible-query log-start log-end]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Varmaan ihan hyvä, että tulee ainakin muistettua logittaa, kun käyttää tätä funktiota.

Copy link
Contributor

@outamaa outamaa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Osasin tässä vaiheessa lähinnä peukutella Juhon kommentteja, eli niiden jälkeen approved. 👍

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

Successfully merging this pull request may close these issues.

3 participants