00-latest-revision.sql 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. -- v0 -> v13: Latest revision
  2. CREATE TABLE guild (
  3. dcid TEXT PRIMARY KEY,
  4. mxid TEXT UNIQUE,
  5. plain_name TEXT NOT NULL,
  6. name TEXT NOT NULL,
  7. name_set BOOLEAN NOT NULL,
  8. avatar TEXT NOT NULL,
  9. avatar_url TEXT NOT NULL,
  10. avatar_set BOOLEAN NOT NULL,
  11. auto_bridge_channels BOOLEAN NOT NULL
  12. );
  13. CREATE TABLE portal (
  14. dcid TEXT,
  15. receiver TEXT,
  16. other_user_id TEXT,
  17. type INTEGER NOT NULL,
  18. dc_guild_id TEXT,
  19. dc_parent_id TEXT,
  20. -- This is not accessed by the bridge, it's only used for the portal parent foreign key.
  21. -- Only guild channels have parents, but only DMs have a receiver field.
  22. dc_parent_receiver TEXT NOT NULL DEFAULT '',
  23. mxid TEXT UNIQUE,
  24. plain_name TEXT NOT NULL,
  25. name TEXT NOT NULL,
  26. name_set BOOLEAN NOT NULL,
  27. topic TEXT NOT NULL,
  28. topic_set BOOLEAN NOT NULL,
  29. avatar TEXT NOT NULL,
  30. avatar_url TEXT NOT NULL,
  31. avatar_set BOOLEAN NOT NULL,
  32. encrypted BOOLEAN NOT NULL,
  33. in_space TEXT NOT NULL,
  34. first_event_id TEXT NOT NULL,
  35. PRIMARY KEY (dcid, receiver),
  36. CONSTRAINT portal_parent_fkey FOREIGN KEY (dc_parent_id, dc_parent_receiver) REFERENCES portal (dcid, receiver) ON DELETE CASCADE,
  37. CONSTRAINT portal_guild_fkey FOREIGN KEY (dc_guild_id) REFERENCES guild(dcid) ON DELETE CASCADE
  38. );
  39. CREATE TABLE thread (
  40. dcid TEXT PRIMARY KEY,
  41. parent_chan_id TEXT NOT NULL,
  42. root_msg_dcid TEXT NOT NULL,
  43. root_msg_mxid TEXT NOT NULL,
  44. creation_notice_mxid TEXT NOT NULL,
  45. -- This is also not accessed by the bridge.
  46. receiver TEXT NOT NULL DEFAULT '',
  47. CONSTRAINT thread_parent_fkey FOREIGN KEY (parent_chan_id, receiver) REFERENCES portal(dcid, receiver) ON DELETE CASCADE ON UPDATE CASCADE
  48. );
  49. CREATE TABLE puppet (
  50. id TEXT PRIMARY KEY,
  51. name TEXT NOT NULL,
  52. name_set BOOLEAN NOT NULL,
  53. avatar TEXT NOT NULL,
  54. avatar_url TEXT NOT NULL,
  55. avatar_set BOOLEAN NOT NULL,
  56. custom_mxid TEXT,
  57. access_token TEXT,
  58. next_batch TEXT
  59. );
  60. CREATE TABLE "user" (
  61. mxid TEXT PRIMARY KEY,
  62. dcid TEXT UNIQUE,
  63. discord_token TEXT,
  64. management_room TEXT,
  65. space_room TEXT,
  66. dm_space_room TEXT,
  67. read_state_version INTEGER NOT NULL DEFAULT 0
  68. );
  69. CREATE TABLE user_portal (
  70. discord_id TEXT,
  71. user_mxid TEXT,
  72. type TEXT NOT NULL,
  73. in_space BOOLEAN NOT NULL,
  74. timestamp BIGINT NOT NULL,
  75. PRIMARY KEY (discord_id, user_mxid),
  76. CONSTRAINT up_user_fkey FOREIGN KEY (user_mxid) REFERENCES "user" (mxid) ON DELETE CASCADE
  77. );
  78. CREATE TABLE message (
  79. dcid TEXT,
  80. dc_attachment_id TEXT,
  81. dc_edit_index INTEGER,
  82. dc_chan_id TEXT,
  83. dc_chan_receiver TEXT,
  84. dc_sender TEXT NOT NULL,
  85. timestamp BIGINT NOT NULL,
  86. dc_thread_id TEXT NOT NULL,
  87. mxid TEXT NOT NULL UNIQUE,
  88. PRIMARY KEY (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver),
  89. CONSTRAINT message_portal_fkey FOREIGN KEY (dc_chan_id, dc_chan_receiver) REFERENCES portal (dcid, receiver) ON DELETE CASCADE
  90. );
  91. CREATE TABLE reaction (
  92. dc_chan_id TEXT,
  93. dc_chan_receiver TEXT,
  94. dc_msg_id TEXT,
  95. dc_sender TEXT,
  96. dc_emoji_name TEXT,
  97. dc_thread_id TEXT NOT NULL,
  98. dc_first_attachment_id TEXT NOT NULL,
  99. _dc_first_edit_index INTEGER NOT NULL DEFAULT 0,
  100. mxid TEXT NOT NULL UNIQUE,
  101. PRIMARY KEY (dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name),
  102. CONSTRAINT reaction_message_fkey FOREIGN KEY (dc_msg_id, dc_first_attachment_id, _dc_first_edit_index, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE
  103. );
  104. CREATE TABLE role (
  105. dc_guild_id TEXT,
  106. dcid TEXT,
  107. name TEXT NOT NULL,
  108. icon TEXT,
  109. mentionable BOOLEAN NOT NULL,
  110. managed BOOLEAN NOT NULL,
  111. hoist BOOLEAN NOT NULL,
  112. color INTEGER NOT NULL,
  113. position INTEGER NOT NULL,
  114. permissions BIGINT NOT NULL,
  115. PRIMARY KEY (dc_guild_id, dcid),
  116. CONSTRAINT role_guild_fkey FOREIGN KEY (dc_guild_id) REFERENCES guild (dcid) ON DELETE CASCADE
  117. );
  118. CREATE TABLE discord_file (
  119. url TEXT,
  120. encrypted BOOLEAN,
  121. mxc TEXT NOT NULL UNIQUE,
  122. id TEXT,
  123. emoji_name TEXT,
  124. size BIGINT NOT NULL,
  125. width INTEGER,
  126. height INTEGER,
  127. mime_type TEXT NOT NULL,
  128. decryption_info jsonb,
  129. timestamp BIGINT NOT NULL,
  130. PRIMARY KEY (url, encrypted)
  131. );