controller.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import Database from 'better-sqlite3'
  2. import { v4 } from 'uuid'
  3. const db = new Database('./cosette.db')
  4. export 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 INDEX IF NOT EXISTS cosette_updated_at_index ON cosette (updatedAt)')
  8. db.exec('CREATE TABLE IF NOT EXISTS chan (uuid TEXT PRIMARY KEY, cosetta_uuid REFERENCES cosette(uuid), message TEXT, updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP)')
  9. }
  10. export function add(cosetta) {
  11. const q = db.prepare('INSERT INTO cosette (uuid, name, description, tags, images) VALUES(:uuid, :name, :description, :tags, :images)')
  12. cosetta.uuid = v4()
  13. cosetta.tags = JSON.stringify(
  14. cosetta.tags.split(',')
  15. .map(t => t.toLowerCase().trim())
  16. .filter(t => t)) // tolgo i vuoti
  17. cosetta.images = JSON.stringify(cosetta.images)
  18. q.run(cosetta)
  19. return cosetta
  20. }
  21. export function get(uuid) {
  22. let q = db.prepare('SELECT * from cosette WHERE uuid = ?')
  23. const cosetta = q.get(uuid)
  24. cosetta.tags = cosetta.tags ? JSON.parse(cosetta.tags) : []
  25. cosetta.images = cosetta.images ? JSON.parse(cosetta.images) : []
  26. q = db.prepare('SELECT message, updatedAt FROM chan WHERE cosetta_uuid = ? ORDER BY updatedAt desc')
  27. const comments = q.all(uuid)
  28. return { cosetta, comments }
  29. }
  30. export function getAll({ page }) {
  31. page = Number(page || 0)
  32. const perPage = 3
  33. let query = 'SELECT * FROM cosette ORDER BY updatedAt DESC LIMIT ? OFFSET ?'
  34. const q = db.prepare(query)
  35. const ret = q.all(perPage, perPage * page)
  36. const cosette = ret.map(r => {
  37. r.tags = r.tags ? JSON.parse(r.tags) : []
  38. r.images = r.images ? JSON.parse(r.images) : []
  39. return r
  40. })
  41. const count = db.prepare('SELECT COUNT(*) count from cosette').get().count
  42. return { cosette, details: { page, count, prev: page !== 0, next: count > perPage * (page + 1), n_page: Math.ceil(count / perPage) } }
  43. }
  44. export function addComment(comment) {
  45. const q = db.prepare('INSERT INTO chan (uuid, cosetta_uuid, message) VALUES(:uuid, :cosetta_uuid, :message)')
  46. comment.uuid = v4()
  47. q.run(comment)
  48. return comment
  49. }
  50. export function getComments(cosetta_uuid) {
  51. const q = db.prepare('SELECT * from chan WHERE cosetta_uuid = ?')
  52. return q.all(cosetta_uuid)
  53. }
  54. export function getComment(uuid) {
  55. const q = db.prepare('SELECT * from chan WHERE uuid = ?')
  56. const comment = q.get(uuid)
  57. return comment
  58. }