mirror of
https://git.meshkee.com/Meshkee/backend.git
synced 2026-08-11 22:30:59 +04:30
NestJS backend with Prisma, Docker Compose for Postgres/Redis, and deploy docs for the production VM.
43 lines
1.5 KiB
SQL
43 lines
1.5 KiB
SQL
-- Customer product favorites (per business)
|
|
|
|
CREATE TABLE favorites (
|
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
business_id BIGINT NOT NULL,
|
|
user_id BIGINT NOT NULL,
|
|
product_id BIGINT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
CONSTRAINT favorites_business_id_fkey
|
|
FOREIGN KEY (business_id) REFERENCES businesses (id) ON DELETE CASCADE,
|
|
CONSTRAINT favorites_user_id_fkey
|
|
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
|
|
CONSTRAINT favorites_product_id_fkey
|
|
FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE,
|
|
CONSTRAINT favorites_business_user_product_unique
|
|
UNIQUE (business_id, user_id, product_id)
|
|
);
|
|
|
|
CREATE INDEX idx_favorites_business_user_created
|
|
ON favorites (business_id, user_id, created_at DESC);
|
|
|
|
CREATE INDEX idx_favorites_product_id
|
|
ON favorites (product_id);
|
|
|
|
CREATE TRIGGER favorites_set_updated_at
|
|
BEFORE UPDATE ON favorites
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION set_updated_at();
|
|
|
|
INSERT INTO permissions (name, slug, group_name, description) VALUES
|
|
('Add own favorites', 'favorites.create', 'favorites', 'Add products to own favorites'),
|
|
('Remove own favorites', 'favorites.delete', 'favorites', 'Remove products from own favorites')
|
|
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 IN ('favorites.create', 'favorites.delete')
|
|
WHERE r.slug = 'customer'
|
|
ON CONFLICT DO NOTHING;
|