-
Notifications
You must be signed in to change notification settings - Fork 1
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
base: main
Are you sure you want to change the base?
Conversation
@@ -0,0 +1,53 @@ | |||
(ns solita.etp.service.csv-to-s3 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nimeäminen on vaikeata
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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] |
There was a problem hiding this comment.
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ä
There was a problem hiding this comment.
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.
There was a problem hiding this 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"] |
There was a problem hiding this comment.
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") |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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") |
There was a problem hiding this comment.
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.
(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"))))) |
There was a problem hiding this comment.
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.
:middleware [[security/wrap-db-application-name | ||
(kayttaja-service/system-kayttaja :aineisto)] | ||
[security/wrap-whoami-for-internal-aineisto-api]] |
There was a problem hiding this comment.
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🤔
There was a problem hiding this comment.
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]]}
There was a problem hiding this comment.
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] |
There was a problem hiding this comment.
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.
There was a problem hiding this 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. 👍
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