Files
Ali Reza bb59d5e9ba Initial commit: Meshkee CMS API
NestJS backend with Prisma, Docker Compose for Postgres/Redis, and deploy docs for the production VM.
2026-07-21 17:52:36 +03:30

67 lines
2.4 KiB
SQL

-- Meshkee CMS — product brands (per business)
CREATE TABLE brands (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
business_id BIGINT NOT NULL,
name_en VARCHAR(255) NOT NULL,
name_fa VARCHAR(255),
image_media_id BIGINT,
about TEXT,
slug VARCHAR(255) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT brands_business_id_fkey
FOREIGN KEY (business_id) REFERENCES businesses (id) ON DELETE CASCADE,
CONSTRAINT brands_image_media_id_fkey
FOREIGN KEY (image_media_id) REFERENCES media (id) ON DELETE SET NULL,
CONSTRAINT brands_business_slug_unique UNIQUE (business_id, slug),
CONSTRAINT brands_name_en_nonempty CHECK (char_length(trim(name_en)) > 0)
);
CREATE INDEX idx_brands_business_id ON brands (business_id);
CREATE INDEX idx_brands_image_media_id ON brands (image_media_id);
CREATE TRIGGER brands_set_updated_at
BEFORE UPDATE ON brands
FOR EACH ROW
EXECUTE FUNCTION set_updated_at();
ALTER TABLE products
ADD COLUMN brand_id BIGINT,
ADD CONSTRAINT products_brand_id_fkey
FOREIGN KEY (brand_id) REFERENCES brands (id) ON DELETE SET NULL;
CREATE INDEX idx_products_brand_id ON products (brand_id);
-- ---------------------------------------------------------------------------
-- permissions
-- ---------------------------------------------------------------------------
INSERT INTO permissions (name, slug, group_name, description) VALUES
('View brands', 'brands.read', 'brands', 'View product brands'),
('Create brands', 'brands.create', 'brands', 'Create product brands'),
('Update brands', 'brands.update', 'brands', 'Edit product brands'),
('Delete brands', 'brands.delete', 'brands', 'Delete product brands')
ON CONFLICT (slug) DO NOTHING;
INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id
FROM roles r
JOIN permissions p ON p.slug LIKE 'brands.%'
WHERE r.slug IN ('business_owner', 'owner', 'admin')
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id
FROM roles r
JOIN permissions p ON p.slug IN ('brands.read', 'brands.create', 'brands.update')
WHERE r.slug = 'editor'
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id
FROM roles r
JOIN permissions p ON p.slug = 'brands.read'
WHERE r.slug = 'viewer'
ON CONFLICT DO NOTHING;