schema.sql 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. drop table if exists user_choice;
  2. drop table if exists choices;
  3. drop table if exists attachments;
  4. drop table if exists votes;
  5. drop table if exists user_group;
  6. drop table if exists groups;
  7. drop table if exists users;
  8. PRAGMA foreign_keys = ON;
  9. create table users (
  10. id INTEGER PRIMARY KEY AUTOINCREMENT,
  11. email TEXT UNIQUE NOT NULL,
  12. password TEXT NOT NULL,
  13. name TEXT UNIQUE NOT NULL,
  14. organization TEXT,
  15. is_admin BOOLEAN DEFAULT 0 NOT NULL,
  16. key TEXT,
  17. CHECK (is_admin IN (0, 1))
  18. );
  19. create table groups (
  20. id INTEGER PRIMARY KEY AUTOINCREMENT,
  21. name TEXT UNIQUE NOT NULL,
  22. system BOOLEAN DEFAULT 0 NOT NULL,
  23. CHECK (system IN (0, 1))
  24. );
  25. create table user_group (
  26. id_user INTEGER,
  27. id_group INTEGER,
  28. FOREIGN KEY(id_user) REFERENCES users (id) ON DELETE CASCADE,
  29. FOREIGN KEY(id_group) REFERENCES groups (id) ON DELETE CASCADE,
  30. PRIMARY KEY(id_user, id_group)
  31. );
  32. create table votes (
  33. id INTEGER PRIMARY KEY AUTOINCREMENT,
  34. title TEXT NOT NULL,
  35. description TEXT,
  36. category TEXT,
  37. date_begin INTEGER DEFAULT CURRENT_TIMESTAMP NOT NULL,
  38. date_end INTEGER NOT NULL,
  39. is_transparent BOOLEAN DEFAULT 1 NOT NULL,
  40. is_public BOOLEAN DEFAULT 1 NOT NULL,
  41. is_multiplechoice BOOLEAN DEFAULT 1 NOT NULL,
  42. is_weighted BOOLEAN DEFAULT 0 NOT NULL,
  43. is_open BOOLEAN DEFAULT 0 NOT NULL,
  44. is_terminated BOOLEAN DEFAULT 0 NOT NULL,
  45. id_author INTEGER DEFAULT 1 NOT NULL,
  46. id_group INTEGER DEFAULT 1 NOT NULL,
  47. FOREIGN KEY(id_author) REFERENCES users (id) ON DELETE SET DEFAULT,
  48. FOREIGN KEY(id_group) REFERENCES groups (id),
  49. CHECK (is_transparent IN (0, 1)),
  50. CHECK (is_public IN (0, 1)),
  51. CHECK (is_weighted IN (0, 1)),
  52. CHECK (is_open IN (0, 1)),
  53. CHECK (is_terminated IN (0, 1))
  54. );
  55. create table attachments (
  56. id INTEGER PRIMARY KEY AUTOINCREMENT,
  57. url TEXT NOT NULL,
  58. id_vote INTEGER NOT NULL,
  59. FOREIGN KEY(id_vote) REFERENCES votes (id) ON DELETE CASCADE
  60. );
  61. create table choices (
  62. id INTEGER PRIMARY KEY AUTOINCREMENT,
  63. name TEXT NOT NULL,
  64. id_vote INTEGER NOT NULL,
  65. FOREIGN KEY(id_vote) REFERENCES votes (id) ON DELETE CASCADE
  66. );
  67. create table user_choice (
  68. id_user INTEGER,
  69. id_choice INTEGER,
  70. weight INTEGER,
  71. FOREIGN KEY(id_user) REFERENCES users (id) ON DELETE CASCADE,
  72. FOREIGN KEY(id_choice) REFERENCES choices (id) ON DELETE CASCADE,
  73. PRIMARY KEY(id_user, id_choice)
  74. );
  75. -- Test data
  76. INSERT INTO users (id, email, password, name, organization, is_admin, key)
  77. VALUES (1, "admin@admin.fr", "", "Toto (admin) Tata", "World corp", 1, "victory");
  78. -- to login, go to /login/1/victory
  79. INSERT INTO groups (id, name, system) VALUES (1, "Tous", 1);
  80. INSERT INTO groups (name) VALUES ("CA");
  81. INSERT INTO groups (name) VALUES ("Membres");
  82. INSERT INTO user_group (id_user, id_group) VALUES(1, 1);