mirror of
https://github.com/penpot/penpot.git
synced 2025-08-07 14:38:33 +02:00
♻️ Refactor file data migrations subsystem (#5692)
* ♻️ Refactor file data migrations subsystem * 📎 Add backend scripts/run helper script
This commit is contained in:
parent
96e99f6a78
commit
f871f88f30
20 changed files with 465 additions and 476 deletions
|
@ -1630,9 +1630,19 @@
|
|||
fdata (migrate-graphics fdata)]
|
||||
(update fdata :options assoc :components-v2 true)))))
|
||||
|
||||
;; FIXME: revisit this fn
|
||||
(defn- fix-version*
|
||||
[{:keys [version] :as file}]
|
||||
(if (int? version)
|
||||
file
|
||||
(let [version (or (-> file :data :version) 0)]
|
||||
(-> file
|
||||
(assoc :version version)
|
||||
(update :data dissoc :version)))))
|
||||
|
||||
(defn- fix-version
|
||||
[file]
|
||||
(let [file (fmg/fix-version file)]
|
||||
(let [file (fix-version* file)]
|
||||
(if (> (:version file) 22)
|
||||
(assoc file :version 22)
|
||||
file)))
|
||||
|
|
39
backend/src/app/features/file_migrations.clj
Normal file
39
backend/src/app/features/file_migrations.clj
Normal file
|
@ -0,0 +1,39 @@
|
|||
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS INC
|
||||
|
||||
(ns app.features.file-migrations
|
||||
"Backend specific code for file migrations. Implemented as permanent feature of files."
|
||||
(:require
|
||||
[app.common.data :as d]
|
||||
[app.common.files.migrations :as fmg :refer [xf:map-name]]
|
||||
[app.db :as db]
|
||||
[app.db.sql :as-alias sql]))
|
||||
|
||||
(def ^:private sql:get-file-migrations
|
||||
"SELECT name FROM file_migration WHERE file_id = ? ORDER BY created_at ASC")
|
||||
|
||||
(defn resolve-applied-migrations
|
||||
[cfg {:keys [id] :as file}]
|
||||
(let [conn (db/get-connection cfg)]
|
||||
(assoc file :migrations
|
||||
(->> (db/plan conn [sql:get-file-migrations id])
|
||||
(transduce xf:map-name conj (d/ordered-set))
|
||||
(not-empty)))))
|
||||
|
||||
(defn upsert-migrations!
|
||||
"Persist or update file migrations. Return the updated/inserted number
|
||||
of rows"
|
||||
[conn {:keys [id] :as file}]
|
||||
(let [migrations (or (-> file meta ::fmg/migrated)
|
||||
(-> file :migrations not-empty)
|
||||
fmg/available-migrations)
|
||||
columns [:file-id :name]
|
||||
rows (mapv (fn [name] [id name]) migrations)]
|
||||
|
||||
(-> (db/insert-many! conn :file-migration columns rows
|
||||
{::db/return-keys false
|
||||
::sql/on-conflict-do-nothing true})
|
||||
(db/get-update-count))))
|
Loading…
Add table
Add a link
Reference in a new issue