penpot/backend/src/uxbox/fixtures.clj
Andrey Antukh e9b00339a5 🚧 Major refactor of backend code.
Relevant changes:

- ring -> vertx
- suricatta -> vertx-pgsql
- emails improvements
- logging
- hybrid sync/async -> full async execution model
- database layout refactor
2019-11-18 12:35:41 +01:00

114 lines
3.4 KiB
Clojure

;; 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) 2019 Andrey Antukh <niwi@niwi.nz>
(ns uxbox.fixtures
"A initial fixtures."
(:require
[buddy.hashers :as hashers]
[mount.core :as mount]
[promesa.core :as p]
[uxbox.config :as cfg]
[uxbox.core]
[uxbox.db :as db]
[uxbox.media :as media]
[uxbox.migrations]
[uxbox.util.blob :as blob]
[uxbox.util.uuid :as uuid]))
(defn- mk-uuid
[prefix & args]
(uuid/namespaced uuid/oid (apply str prefix args)))
;; --- Users creation
(def create-user-sql
"insert into users (id, fullname, username, email, password, metadata, photo)
values ($1, $2, $3, $4, $5, $6, $7)
returning *;")
(defn create-user
[conn i]
(println "create user" i)
(db/query-one conn [create-user-sql
(mk-uuid "user" i)
(str "User " i)
(str "user" i)
(str "user" i ".test@uxbox.io")
(hashers/encrypt "123123")
(blob/encode {})
""]))
;; --- Projects creation
(def create-project-sql
"insert into projects (id, user_id, name)
values ($1, $2, $3)
returning *;")
(defn create-project
[conn [pjid uid]]
(println "create project" pjid "(for user=" uid ")")
(db/query-one conn [create-project-sql
(mk-uuid "project" pjid uid)
(mk-uuid "user" uid)
(str "sample project " pjid)]))
;; --- Pages creation
(def create-page-sql
"insert into pages (id, user_id, project_id, name, data, metadata)
values ($1, $2, $3, $4, $5, $6)
returning *;")
(defn create-page
[conn [pjid paid uid]]
(println "create page" paid "(for project=" pjid ", user=" uid ")")
(let [data {:shapes [{:id (mk-uuid "canvas" 1)
:name "Canvas-1"
:type :canvas
:page (mk-uuid "page" pjid paid uid)
:x1 200
:y1 200
:x2 1224
:y2 968}]}]
(db/query-one conn [create-page-sql
(mk-uuid "page" pjid paid uid)
(mk-uuid "user" uid)
(mk-uuid "project" pjid uid)
(str "page " paid)
(blob/encode data)
(blob/encode {})])))
(def num-users 5)
(def num-projects 5)
(def num-pages 5)
(defn -main
[& args]
(try
(-> (mount/only #{#'uxbox.config/config
#'uxbox.config/secret
#'uxbox.core/system
#'uxbox.db/pool
#'uxbox.migrations/migrations})
(mount/start))
@(db/with-atomic [conn db/pool]
(p/do!
(p/run! #(create-user conn %) (range num-users))
(p/run! #(create-project conn %)
(for [uid (range num-users)
pjid (range num-projects)]
[pjid uid]))
(p/run! #(create-page conn %)
(for [pjid(range num-projects)
paid (range num-pages)
uid (range num-users)]
[pjid paid uid]))
(p/promise 1)))
(finally
(mount/stop))))