From 2e7f90f3cc8d0fc0f322e9a3a94ec50a1910bb16 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Tue, 2 Feb 2021 12:42:45 +0100 Subject: [PATCH] :sparkles: Adds commands to load data into user --- backend/src/app/db/profile_initial_data.clj | 62 +++++++++++---------- backend/src/app/srepl/main.clj | 14 +++++ 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/backend/src/app/db/profile_initial_data.clj b/backend/src/app/db/profile_initial_data.clj index eac6e8987..0d810ee25 100644 --- a/backend/src/app/db/profile_initial_data.clj +++ b/backend/src/app/db/profile_initial_data.clj @@ -76,38 +76,42 @@ (tr/decode-stream input)))) (defn create-profile-initial-data - [conn profile] - (when-let [initial-data-path (:initial-data-file cfg/config)] - (when-let [{:keys [file file-library-rel file-media-object]} (read-initial-data initial-data-path)] - (let [sample-project-name (:initial-data-project-name cfg/config "Penpot Onboarding") - proj (projects/create-project conn {:profile-id (:id profile) - :team-id (:default-team-id profile) - :name sample-project-name}) + ([conn profile] + (when-let [initial-data-path (:initial-data-file cfg/config)] + (create-profile-initial-data conn initial-data-path profile))) - map-ids {} + ([conn file profile] + (when-let [{:keys [file file-library-rel file-media-object]} (read-initial-data file)] + (let [sample-project-name (:initial-data-project-name cfg/config "Penpot Onboarding") - ;; Create new ID's and change the references - [map-ids file] (change-ids map-ids file #{:id}) - [map-ids file-library-rel] (change-ids map-ids file-library-rel #{:file-id :library-file-id}) - [_ file-media-object] (change-ids map-ids file-media-object #{:id :file-id :media-id :thumbnail-id}) + proj (projects/create-project conn {:profile-id (:id profile) + :team-id (:default-team-id profile) + :name sample-project-name}) - file (map #(assoc % :project-id (:id proj)) file) - file-profile-rel (map #(array-map :file-id (:id %) - :profile-id (:id profile) - :is-owner true - :is-admin true - :can-edit true) - file)] + map-ids {} - (projects/create-project-profile conn {:project-id (:id proj) - :profile-id (:id profile)}) + ;; Create new ID's and change the references + [map-ids file] (change-ids map-ids file #{:id}) + [map-ids file-library-rel] (change-ids map-ids file-library-rel #{:file-id :library-file-id}) + [_ file-media-object] (change-ids map-ids file-media-object #{:id :file-id :media-id :thumbnail-id}) - (projects/create-team-project-profile conn {:team-id (:default-team-id profile) - :project-id (:id proj) - :profile-id (:id profile)}) + file (map #(assoc % :project-id (:id proj)) file) + file-profile-rel (map #(array-map :file-id (:id %) + :profile-id (:id profile) + :is-owner true + :is-admin true + :can-edit true) + file)] - ;; Re-insert into the database - (db/insert-multi! conn :file file) - (db/insert-multi! conn :file-profile-rel file-profile-rel) - (db/insert-multi! conn :file-library-rel file-library-rel) - (db/insert-multi! conn :file-media-object file-media-object))))) + (projects/create-project-profile conn {:project-id (:id proj) + :profile-id (:id profile)}) + + (projects/create-team-project-profile conn {:team-id (:default-team-id profile) + :project-id (:id proj) + :profile-id (:id profile)}) + + ;; Re-insert into the database + (db/insert-multi! conn :file file) + (db/insert-multi! conn :file-profile-rel file-profile-rel) + (db/insert-multi! conn :file-library-rel file-library-rel) + (db/insert-multi! conn :file-media-object file-media-object))))) diff --git a/backend/src/app/srepl/main.clj b/backend/src/app/srepl/main.clj index 99a69b586..e28968d94 100644 --- a/backend/src/app/srepl/main.clj +++ b/backend/src/app/srepl/main.clj @@ -4,9 +4,11 @@ (:require [app.common.pages :as cp] [app.common.pages.migrations :as pmg] + [app.config :as cfg] [app.db :as db] [app.db.profile-initial-data :as pid] [app.main :refer [system]] + [app.rpc.queries.profile :as prof] [app.srepl.dev :as dev] [app.util.blob :as blob] [clojure.pprint :refer [pprint]])) @@ -58,3 +60,15 @@ ([system project-id path] (db/with-atomic [conn (:app.db/pool system)] (pid/create-initial-data-dump conn project-id path)))) + +(defn load-data-into-user + ([system user-email] + (if-let [file (:initial-data-file cfg/config)] + (load-data-into-user system file user-email) + (prn "Data file not found in configuration"))) + + ([system file user-email] + (db/with-atomic [conn (:app.db/pool system)] + (let [profile (prof/retrieve-profile-data-by-email conn user-email) + profile (merge profile (prof/retrieve-additional-data conn (:id profile)))] + (pid/create-profile-initial-data conn file profile)))))