Skip to content
This repository has been archived by the owner on Jan 29, 2020. It is now read-only.

add new entity

LeonZhou edited this page Dec 9, 2015 · 2 revisions

So far adding new entities cause a bit of pain, be patient, better tool is coming soon!

Follow the steps, you can get a new table with awesome features provided by the CWA both in font-end & back-end, then you can bulit you own business logic based on them.

Create a new table in db.

Take ‘computer’ table in demo as an example.

Design the schema and add extra schema in comments.

 CREATE TABLE `computer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL COMMENT 'importable=1\nexportable=1\nchart-label=1',
  `price` decimal(12,2) NOT NULL COMMENT 'importable=1\nexportable=1\nchart-value=1',
  `image` int(11) DEFAULT NULL COMMENT 'type-name=image\nhidden-in-grid=1',
  `status` varchar(12) DEFAULT NULL COMMENT 'type-name=enum\nenum-group=computer',
  `remark` varchar(1024) DEFAULT NULL COMMENT 'type-name=textarea\nhidden-in-grid=1\nimportable=1\nexportable=1',
  `creator_id` int(11) DEFAULT NULL COMMENT 'reserved=1\ntype-name=select\nlookup-table=user\nlookup-label=username',
  `created_at` datetime DEFAULT NULL COMMENT 'reserved=1',
  `updated_at` datetime DEFAULT NULL COMMENT 'reserved=1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8

Declare the entity in entity.clj

(defent computer
   (k/belongs-to user {:fk :creator_id}))

Generate permission resources in DB

insert-res-for-entity

Assign resources to Admin role

insert-res-to-role

Create back-end

create a router for the new table

(ns clojure-web.routes.computer
  (:require [clojure-web.common.routes-helper :refer [defcrud-routes]]
            [clojure-web.db.entity :refer [computer]]
            [clojure-web.render :as render]))

(defcrud-routes computer-routes computer)

add the new router to handler

(defapi app-routes
   computer-routes
;; omit other routers
)))

Create front-end

register handlers for new entity in handlers.cljs

(def entities ["computer"
;;;omit other tables
])
creater a new datagrid.
(ns clojure-web.computer
  (:require [clojure-web.components.bs-table :refer [create-bs-table]]))

(def computer-panel (create-bs-table "computer"))

add the new table to menu

(def panels {"computers" computer-panel
;;; omit other panels
})