| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- CREATE TABLE moderation_log (
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
- moderator_id UUID NOT NULL REFERENCES users(id),
- target_type VARCHAR(20) NOT NULL CHECK (target_type IN ('place', 'service')),
- target_id UUID NOT NULL,
- action VARCHAR(20) NOT NULL CHECK (action IN ('approve', 'reject', 'request_changes', 'publish', 'archive')),
- comment TEXT,
- created_at TIMESTAMPTZ NOT NULL DEFAULT now()
- );
- CREATE INDEX idx_moderation_log_target ON moderation_log(target_type, target_id);
- CREATE INDEX idx_moderation_log_moderator_id ON moderation_log(moderator_id);
- CREATE TABLE payments (
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id UUID NOT NULL REFERENCES users(id),
- type VARCHAR(20) NOT NULL CHECK (type IN ('subscription', 'donation', 'listing_fee', 'booking_commission')),
- provider VARCHAR(20) NOT NULL CHECK (provider IN ('cloudpayments', 'stripe')),
- provider_payment_id VARCHAR(255),
- amount INT NOT NULL,
- currency VARCHAR(3) DEFAULT 'RUB',
- status VARCHAR(20) NOT NULL CHECK (status IN ('pending', 'succeeded', 'failed', 'refunded')),
- metadata JSONB,
- created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
- updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
- );
- CREATE INDEX idx_payments_user_id ON payments(user_id);
- CREATE INDEX idx_payments_status ON payments(status);
- CREATE INDEX idx_payments_provider_id ON payments(provider, provider_payment_id);
- CREATE TABLE subscriptions (
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id UUID NOT NULL REFERENCES users(id),
- plan VARCHAR(50) NOT NULL CHECK (plan IN ('studio_listing', 'executor_promo', 'premium_user')),
- status VARCHAR(20) NOT NULL CHECK (status IN ('active', 'cancelled', 'expired')),
- current_period_start TIMESTAMPTZ,
- current_period_end TIMESTAMPTZ,
- provider_subscription_id VARCHAR(255),
- created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
- updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
- );
- CREATE TABLE visitor_sessions (
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id UUID REFERENCES users(id),
- coordinates GEOGRAPHY(Point, 4326) NOT NULL,
- last_active_at TIMESTAMPTZ NOT NULL,
- created_at TIMESTAMPTZ NOT NULL DEFAULT now()
- );
- CREATE INDEX idx_visitor_sessions_coordinates ON visitor_sessions USING GIST (coordinates);
- CREATE INDEX idx_visitor_sessions_last_active ON visitor_sessions(last_active_at);
|