From a932eb0dd30b4e146166f93e0f3ead7a13ee7af9 Mon Sep 17 00:00:00 2001 From: Juho Haapakoski Date: Tue, 8 Oct 2024 14:57:37 +0300 Subject: [PATCH] AE-2279: Add functions to destroy liitteet when destroying an energiatodistus --- .../service/energiatodistus_destruction.clj | 25 ++++++- .../energiatodistus_destruction_test.clj | 75 ++++++++++++++++++- 2 files changed, 97 insertions(+), 3 deletions(-) diff --git a/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj b/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj index 2c990c2d8..0f588c0f0 100644 --- a/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj +++ b/etp-core/etp-backend/src/main/clj/solita/etp/service/energiatodistus_destruction.clj @@ -6,6 +6,7 @@ [solita.etp.db :as db] [solita.etp.service.complete-energiatodistus :as complete-energiatodistus-service] [solita.etp.service.energiatodistus :as energiatodistus-service] + [solita.etp.service.liite :as liite-service] [solita.etp.service.file :as file])) (db/require-queries 'energiatodistus-destruction) @@ -32,10 +33,13 @@ (defn- destroy-energiatodistus-oikeellisuuden-valvonta-note-audit! [db energiatodistus-id] (energiatodistus-destruction-db/destroy-energiatodistus-oikeellisuuden-valvonta-note-audit! db {:energiatodistus_id energiatodistus-id})) +(defn- delete-from-s3 [aws-s3-client file-key] + (file/delete-file aws-s3-client file-key) + (log/info (str "Deleted " file-key " from S3"))) + (defn- delete-energiatodistus-pdf! [aws-s3-client energiatodistus-id language] (let [file-key (energiatodistus-service/file-key energiatodistus-id language)] - (file/delete-file aws-s3-client file-key) - (log/info (str "Deleted " file-key " from S3")))) + (delete-from-s3 aws-s3-client file-key))) (defn- delete-energiatodistus-pdfs! [db aws-s3-client energiatodistus-id] (let [language-codes (-> (complete-energiatodistus-service/find-complete-energiatodistus db energiatodistus-id) @@ -45,11 +49,28 @@ (doseq [language-code language-codes] (delete-energiatodistus-pdf! aws-s3-client energiatodistus-id language-code)))) +(defn- delete-energiatodistus-liite-s3 [aws-s3-client liite-id] + (let [file-key (liite-service/file-key liite-id)] + ;; Some liitteet are only links and do not have files. + (when (file/file-exists? aws-s3-client file-key) + (delete-from-s3 aws-s3-client file-key)))) + +(defn- delete-energiatodistus-liite [db aws-s3-client liite] + (let [liite-id (:id liite)] + (energiatodistus-destruction-db/destroy-liite! db {:liite_id liite-id}) + (delete-energiatodistus-liite-s3 aws-s3-client liite-id) + (energiatodistus-destruction-db/destroy-liite-audit! db {:liite_id liite-id}))) + +(defn- destroy-energiatodistus-liitteet [db aws-s3-client energiatodistus-id] + (let [liitteet (energiatodistus-destruction-db/select-to-be-destroyed-liitteet-by-energiatodistus-id db {:energiatodistus_id energiatodistus-id})] + (mapv #(delete-energiatodistus-liite db aws-s3-client %) liitteet))) + (defn- destroy-expired-energiatodistus! [db aws-s3-client energiatodistus-id] (jdbc/with-db-transaction [db db] (destroy-energiatodistus-oikeellisuuden-valvonta! db energiatodistus-id) (destroy-energiatodistus-oikeellisuuden-valvonta-toimenpide-audit! db energiatodistus-id) (destroy-energiatodistus-oikeellisuuden-valvonta-note-audit! db energiatodistus-id) + (destroy-energiatodistus-liitteet db aws-s3-client energiatodistus-id) (anonymize-energiatodistus! db energiatodistus-id) (destroy-energiatodistus-audit-data! db energiatodistus-id)) (delete-energiatodistus-pdfs! db aws-s3-client energiatodistus-id) diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj index f2fe4e341..89269e1b8 100644 --- a/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj +++ b/etp-core/etp-backend/src/test/clj/solita/etp/service/energiatodistus_destruction_test.clj @@ -6,7 +6,9 @@ [solita.etp.service.valvonta-oikeellisuus :as valvonta-oikeellisuus-service] [solita.etp.service.energiatodistus-destruction :as service] [solita.etp.service.file :as file-service] + [solita.etp.service.liite :as liite-service] [solita.etp.test-data.energiatodistus :as energiatodistus-test-data] + [solita.etp.test-data.liite :as liite-test-data] [solita.etp.test-data.laatija :as laatija-test-data] [solita.etp.test-data.kayttaja :as kayttaja-test-data] [solita.etp.whoami :as test-whoami] @@ -385,4 +387,75 @@ (t/testing "The audit data for et-2 notes still exists." (t/is (not (empty? (select-notes-audit energiatodistus-id-2))))))) - +(t/deftest destroy-liite-test + (let [laatijat (laatija-test-data/generate-and-insert! 1) + laatija-id (-> laatijat keys sort first) + select-liitteet #(jdbc/query ts/*db* ["select * from liite where energiatodistus_id = ?" %]) + select-liitteet-audit #(jdbc/query ts/*db* ["select * from audit.liite where energiatodistus_id = ?" %]) + energiatodistukset (energiatodistus-test-data/generate-and-insert! + 2 + 2013 + true + laatija-id) + [energiatodistus-id-1 energiatodistus-id-2] (-> energiatodistukset keys sort) + file-liitteet-1 (liite-test-data/generate-and-insert-files! 2 + laatija-id + energiatodistus-id-1) + link-liitteet-1 (liite-test-data/generate-and-insert-links! 2 + laatija-id + energiatodistus-id-1) + file-liitteet-2 (liite-test-data/generate-and-insert-files! 2 + laatija-id + energiatodistus-id-2) + link-liitteet-2 (liite-test-data/generate-and-insert-links! 2 + laatija-id + energiatodistus-id-2) + file-liitteet-keys-1 (->> file-liitteet-1 + keys + (map #(liite-service/file-key %))) + link-liitteet-keys-1 (->> link-liitteet-1 + keys + (map #(liite-service/file-key %))) + file-liitteet-keys-2 (->> file-liitteet-2 + keys + (map #(liite-service/file-key %))) + link-liitteet-keys-2 (->> link-liitteet-2 + keys + (map #(liite-service/file-key %))) + file-exists? #(file-service/file-exists? ts/*aws-s3-client* %)] + + (t/testing "The liitteet exist before deletion" + (let [liitteet-1-in-db (select-liitteet energiatodistus-id-1) + liitteet-2-in-db (select-liitteet energiatodistus-id-2)] + (t/is (every? file-exists? file-liitteet-keys-1)) + (t/is (every? file-exists? file-liitteet-keys-2)) + + (t/is (not-any? file-exists? link-liitteet-keys-1)) + (t/is (not-any? file-exists? link-liitteet-keys-2)) + + (t/is (= 4 (count liitteet-1-in-db))) + (t/is (= 4 (count liitteet-2-in-db))))) + + (t/testing "Audit for liitteet exist before deletion" + (t/is (not-empty (select-liitteet-audit energiatodistus-id-1))) + (t/is (not-empty (select-liitteet-audit energiatodistus-id-2)))) + + ;; Destroy et-1 liiteet + (#'service/destroy-energiatodistus-liitteet ts/*db* ts/*aws-s3-client* energiatodistus-id-1) + + (t/testing "The liitteet for energiatodistus-1 are deleted but exist for energiatodistus-2" + (let [liitteet-1-in-db (select-liitteet energiatodistus-id-1) + liitteet-2-in-db (select-liitteet energiatodistus-id-2)] + + (t/is (not-any? file-exists? file-liitteet-keys-1)) + (t/is (every? file-exists? file-liitteet-keys-2)) + + (t/is (not-any? file-exists? link-liitteet-keys-1)) + (t/is (not-any? file-exists? link-liitteet-keys-2)) + + (t/is (= 0 (count liitteet-1-in-db))) + (t/is (= 4 (count liitteet-2-in-db))))) + + (t/testing "Audit for energiatodistus-1's liitteet do not exist after deletion" + (t/is (empty? (select-liitteet-audit energiatodistus-id-1))) + (t/is (not-empty (select-liitteet-audit energiatodistus-id-2)))))) \ No newline at end of file