64 lines
3.4 KiB
SQL
64 lines
3.4 KiB
SQL
-- Ручное создание таблицы mail_mailbox_shares (миграция Version5007Date20260204120000).
|
||
-- Используйте, если нельзя выполнять occ app:update mail.
|
||
-- БД: PostgreSQL, префикс таблиц: oc_ (из config.php: dbtableprefix).
|
||
--
|
||
-- Проверить, что таблицы нет (должно быть 0 строк):
|
||
-- sudo -u postgres psql -d f7cloud_new -c "SELECT tablename FROM pg_tables WHERE schemaname='public' AND tablename='oc_mail_mailbox_shares';"
|
||
--
|
||
-- Запуск (обязательно БД из config.php: dbname = f7cloud_new):
|
||
-- sudo -u postgres psql -d f7cloud_new -f /var/www/f7cloud/apps/mail/docs/create-mailbox-shares-table.sql
|
||
--
|
||
-- Если префикс таблиц у вас не oc_, замените oc_ в скрипте на свой (dbtableprefix из config.php).
|
||
-- Шаги 4 (FK) при повторном запуске можно закомментировать, если ограничения уже созданы.
|
||
|
||
-- 1) Создать таблицу
|
||
CREATE TABLE IF NOT EXISTS oc_mail_mailbox_shares (
|
||
id SERIAL NOT NULL,
|
||
owner_user_id VARCHAR(64) NOT NULL,
|
||
account_id INTEGER NOT NULL,
|
||
mailbox_id INTEGER NOT NULL,
|
||
share_type VARCHAR(64) NOT NULL,
|
||
share_with VARCHAR(64) NOT NULL,
|
||
permission VARCHAR(32) NOT NULL,
|
||
created_at INTEGER NOT NULL DEFAULT 0,
|
||
PRIMARY KEY (id)
|
||
);
|
||
|
||
-- 2) Уникальный индекс (один шаринг на пару папка+получатель)
|
||
CREATE UNIQUE INDEX IF NOT EXISTS mail_mailbox_shares_owner_acc_mb_sw
|
||
ON oc_mail_mailbox_shares (owner_user_id, account_id, mailbox_id, share_type, share_with);
|
||
|
||
-- 3) Индекс для запросов «расшарено мне»
|
||
CREATE INDEX IF NOT EXISTS mail_mailbox_shares_share_with_type
|
||
ON oc_mail_mailbox_shares (share_with, share_type);
|
||
|
||
-- 4) Внешние ключи (опционально; не создаём, если ограничение уже есть)
|
||
DO $$
|
||
BEGIN
|
||
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'oc_mail_mailboxes')
|
||
AND NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_mailbox_shares_mailbox') THEN
|
||
ALTER TABLE oc_mail_mailbox_shares
|
||
ADD CONSTRAINT fk_mailbox_shares_mailbox
|
||
FOREIGN KEY (mailbox_id) REFERENCES oc_mail_mailboxes(id) ON DELETE CASCADE;
|
||
END IF;
|
||
END $$;
|
||
DO $$
|
||
BEGIN
|
||
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'oc_mail_accounts')
|
||
AND NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_mailbox_shares_account') THEN
|
||
ALTER TABLE oc_mail_mailbox_shares
|
||
ADD CONSTRAINT fk_mailbox_shares_account
|
||
FOREIGN KEY (account_id) REFERENCES oc_mail_accounts(id) ON DELETE CASCADE;
|
||
END IF;
|
||
END $$;
|
||
|
||
-- 5) Права для пользователя БД приложения (dbuser из config.php, у вас f7user)
|
||
GRANT SELECT, INSERT, UPDATE, DELETE ON oc_mail_mailbox_shares TO f7user;
|
||
GRANT USAGE, SELECT ON SEQUENCE oc_mail_mailbox_shares_id_seq TO f7user;
|
||
|
||
-- 6) Записать миграцию как выполненную (чтобы при будущем app:update её не запускали повторно)
|
||
-- PK таблицы oc_migrations: (app, version)
|
||
INSERT INTO oc_migrations (app, version)
|
||
VALUES ('mail', '5007Date20260204120000')
|
||
ON CONFLICT (app, version) DO NOTHING;
|