controller.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import Database from 'better-sqlite3'
  2. import { v4 } from 'uuid'
  3. const db = new Database('./cosette.db')
  4. function load () {
  5. db.pragma('journal_mode = WAL')
  6. db.exec('CREATE TABLE IF NOT EXISTS cosette (uuid TEXT PRIMARY KEY, name TEXT NOT NULL, description TEXT, tags TEXT, images TEXT, updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP)')
  7. db.exec('CREATE TABLE IF NOT EXISTS chan (uuid TEXT PRIMARY KEY, cosetta_uuid REFERENCES cosette(uuid), message TEXT, updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP)')
  8. }
  9. // TODO: da gestire in qualche modo all'avvio
  10. // load()
  11. export function add (cosetta) {
  12. const q = db.prepare('INSERT INTO cosette (uuid, name, description, tags, images) VALUES(:uuid, :name, :description, :tags, :imgs)')
  13. cosetta.uuid = v4()
  14. cosetta.tags = JSON.stringify(cosetta.tags.split(',').map(t => t.toLowerCase().trim()))
  15. cosetta.imgs = JSON.stringify(cosetta.imgs)
  16. q.run(cosetta)
  17. return cosetta
  18. }
  19. export function get (uuid) {
  20. let q = db.prepare('SELECT * from cosette WHERE uuid = ?')
  21. const cosetta = q.get(uuid)
  22. cosetta.tags = cosetta.tags ? JSON.parse(cosetta.tags) : []
  23. cosetta.images = cosetta.images ? JSON.parse(cosetta.images) : []
  24. q = db.prepare('SELECT message, updatedAt FROM chan WHERE cosetta_uuid = ? ORDER BY updatedAt desc')
  25. const comments = q.all(uuid)
  26. return { cosetta, comments }
  27. }
  28. export function getAll (limit=0, offset=0, tags=[], search='') {
  29. const q = db.prepare('SELECT * FROM cosette')
  30. const ret = q.all()
  31. return ret.map(r => {
  32. r.tags = r.tags ? JSON.parse(r.tags) : []
  33. r.images = r.images ? JSON.parse(r.images) : []
  34. return r
  35. })
  36. }
  37. export function addComment (comment) {
  38. const q = db.prepare('INSERT INTO chan (uuid, cosetta_uuid, message) VALUES(:uuid, :cosetta_uuid, :message)')
  39. comment.uuid = v4()
  40. q.run(comment)
  41. return comment
  42. }
  43. export function getComments (cosetta_uuid) {
  44. const q = db.prepare('SELECT * from chan WHERE cosetta_uuid = ?')
  45. return q.all(cosetta_uuid)
  46. }