4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
# File 'lib/generators/cms/install/templates/create_cms_tables.rb', line 4
def change
enable_extension "unaccent" unless extension_enabled?("unaccent")
create_table :cms_sites do |t|
t.string :name, null: false
t.string :slug, null: false
t.boolean :published, null: false, default: false
t.string :default_locale, null: false, default: "en"
t.timestamps
end
add_index :cms_sites, :slug, unique: true
create_table :cms_pages do |t|
t.references :site, null: false, foreign_key: { to_table: :cms_sites }
t.bigint :parent_id
t.string :slug, null: false
t.integer :position, null: false, default: 0
t.boolean :home, null: false, default: false
t.string :template_key, null: false, default: "standard"
t.string :status, null: false, default: "draft"
t.boolean :show_in_header, null: false, default: true
t.boolean :show_in_footer, null: false, default: false
t.string :nav_group, null: false, default: "main"
t.integer :nav_order, null: false, default: 0
t.integer :footer_order, null: false, default: 0
t.integer :depth, null: false, default: 0
t.string :preview_token
t.datetime :discarded_at
t.timestamps
end
add_index :cms_pages, %i[site_id slug], unique: true
add_index :cms_pages, %i[site_id status position]
add_index :cms_pages, %i[site_id nav_group nav_order]
add_index :cms_pages, :parent_id
add_index :cms_pages, :preview_token, unique: true
add_index :cms_pages, :discarded_at
add_foreign_key :cms_pages, :cms_pages, column: :parent_id
create_table :cms_page_translations do |t|
t.references :page, null: false, foreign_key: { to_table: :cms_pages }
t.string :locale, null: false
t.string :title, null: false
t.string :seo_title
t.string :seo_description
t.timestamps
end
add_index :cms_page_translations, %i[page_id locale], unique: true
create_table :cms_images do |t|
t.references :site, null: false, foreign_key: { to_table: :cms_sites }
t.string :title, null: false
t.timestamps
end
create_table :cms_image_translations do |t|
t.references :image, null: false, foreign_key: { to_table: :cms_images }
t.string :locale, null: false
t.string :alt_text, null: false
t.string :caption
t.timestamps
end
add_index :cms_image_translations, %i[image_id locale], unique: true
create_table :cms_sections do |t|
t.references :site, null: false, foreign_key: { to_table: :cms_sites }
t.string :kind, null: false, default: "rich_text"
t.boolean :global, null: false, default: false
t.boolean :enabled, null: false, default: true
t.jsonb :settings, null: false, default: {}
t.datetime :discarded_at
t.timestamps
end
add_index :cms_sections, %i[site_id kind]
add_index :cms_sections, %i[site_id global kind]
add_index :cms_sections, :discarded_at
create_table :cms_section_translations do |t|
t.references :section, null: false, foreign_key: { to_table: :cms_sections }
t.string :locale, null: false
t.string :title, null: false
t.string :subtitle
t.timestamps
end
add_index :cms_section_translations, %i[section_id locale], unique: true
create_table :cms_section_images do |t|
t.references :section, null: false, foreign_key: { to_table: :cms_sections }
t.references :image, null: false, foreign_key: { to_table: :cms_images }
t.integer :position, null: false, default: 0
t.timestamps
end
add_index :cms_section_images, %i[section_id position]
add_index :cms_section_images, %i[section_id image_id], unique: true
create_table :cms_documents do |t|
t.references :site, null: false, foreign_key: { to_table: :cms_sites }
t.string :title, null: false
t.text :description
t.timestamps
end
create_table :cms_page_sections do |t|
t.references :page, null: false, foreign_key: { to_table: :cms_pages }
t.references :section, null: false, foreign_key: { to_table: :cms_sections }
t.integer :position, null: false, default: 0
t.timestamps
end
add_index :cms_page_sections, %i[page_id position]
add_index :cms_page_sections, %i[page_id section_id], unique: true
create_table :cms_form_fields do |t|
t.references :page, null: false, foreign_key: { to_table: :cms_pages }
t.string :kind, null: false, default: "text"
t.string :label, null: false
t.string :field_name, null: false
t.string :placeholder
t.string :hint
t.boolean :required, null: false, default: false
t.jsonb :options, null: false, default: []
t.integer :position, null: false, default: 0
t.timestamps
end
add_index :cms_form_fields, %i[page_id position]
add_index :cms_form_fields, %i[page_id field_name], unique: true
create_table :cms_form_submissions do |t|
t.references :page, null: false, foreign_key: { to_table: :cms_pages }
t.jsonb :data, null: false, default: {}
t.string :ip_address
t.datetime :created_at, null: false, default: -> { "CURRENT_TIMESTAMP" }
end
add_index :cms_form_submissions, :created_at
create_table :cms_api_keys do |t|
t.references :site, null: false, foreign_key: { to_table: :cms_sites }
t.string :name, null: false
t.string :token, null: false
t.boolean :active, null: false, default: true
t.datetime :last_used_at
t.timestamps
end
add_index :cms_api_keys, :token, unique: true
create_table :cms_webhooks do |t|
t.references :site, null: false, foreign_key: { to_table: :cms_sites }
t.string :url, null: false
t.jsonb :events, null: false, default: []
t.string :secret
t.boolean :active, null: false, default: true
t.timestamps
end
create_table :cms_webhook_deliveries do |t|
t.references :webhook, null: false, foreign_key: { to_table: :cms_webhooks }
t.string :event, null: false
t.integer :response_code
t.text :response_body
t.boolean :success, null: false, default: false
t.string :error_message
t.datetime :delivered_at, null: false, default: -> { "CURRENT_TIMESTAMP" }
end
add_index :cms_webhook_deliveries, %i[webhook_id delivered_at]
return if table_exists?(:action_text_rich_texts)
create_table :action_text_rich_texts do |t|
t.string :name, null: false
t.text :body
t.references :record, null: false, polymorphic: true, index: false
t.timestamps
end
add_index :action_text_rich_texts,
%i[record_type record_id name],
unique: true,
name: "index_action_text_rich_texts_uniqueness"
end
|