npm.io
0.1.0 • Published 4d ago

sqlite-ejs-panel

Licence
MIT
Version
0.1.0
Deps
3
Size
32 kB
Vulns
0
Weekly
0

sqlite-ejs-panel

Small Express and EJS admin panel for SQLite-backed apps.

import { sqlite, panel, num, fail } from "sqlite-ejs-panel";

const db = sqlite("app.db");

class Service {
  constructor(private db: any) {}

  book(userId: number, itemId: number) {
    if (!this.db.prepare("SELECT id FROM users WHERE id = ?").get(userId)) {
      fail("User not found");
    }

    this.db.prepare("INSERT INTO bookings (user_id, item_id) VALUES (?, ?)").run(userId, itemId);
  }
}

const service = new Service(db);

panel({
  title: "Demo panel",
  port: 3000,
  db,
  labels: {
    home: "Main",
    reports: "Reports",
    reportsTitle: "SQL reports",
    empty: "No data",
    defaultSubmit: "Save"
  },
  logger: true,
  form: {
    title: "Create booking",
    action: "/book",
    submit: "Save",
    fields: {
      userId: "SELECT id, name FROM users",
      itemId: "SELECT id, name FROM items"
    },
    onSubmit: (body) => service.book(num(body.userId), num(body.itemId))
  },
  views: {
    "Bookings": "SELECT * FROM bookings"
  },
  reports: {
    "Rows by user": "SELECT user_id, COUNT(*) AS total FROM bookings GROUP BY user_id"
  }
});

Keywords