/scaffold

Primary LanguageClojureMIT LicenseMIT

scaffold

scaffold

A Clojure CRUD scaffolding library.

THIS IS A WORK IN PROGRESS

The vision for the library is to be general enough to be used with e.g. Luminus or kit, but the focus is currently on the following stack:

  • Ring
    • metosin/ring-http-response
  • Reitit
  • HugSQL
  • (reagent/re-frame)

TODO

  • Generate migrations to create table(s)
    • Column constraints
    • Table constraints
    • Data types
  • Generate basic CRUD queries
  • Generate CRUD request handlers
    • Write tests
  • Generate reitit routes
    • Write tests
  • Generate re-frame events and subscriptions

Example usage

Here's an example scaffolding migrations, queries, routes and request handlers for a user table:

(ns user
  (:require [scaffold.core :as scaffold]))
  
(def scaffold-conf
  (merge scaffold.core/sample-configuration
         {:migrations/dir          "resources/migrations/"
          :hugsql/queries-filename "resources/sql/queries.sql"
          :reitit/routes-file      "src/clj/routes.clj"
          :hugsql/queries-append?  true
          :hugsql/query-fn         '(:query-fn (utils/route-data request))}))


(def user-table
  {:name "users"
   :columns
   [["id" [:uuid] [[:primary-key] [:default "uuid_generate_v4()"]]]
    ["email" [:citext] [[:unique]]]
    ["password" [:text] []]]})
    
(scaffold/scaffold! scaffold-conf user-table)

License

Copyright © 2020 Børge André Jensen

Distributed under the MIT License