000006_create_moderation_payments_visitors.up.sql 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. CREATE TABLE moderation_log (
  2. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  3. moderator_id UUID NOT NULL REFERENCES users(id),
  4. target_type VARCHAR(20) NOT NULL CHECK (target_type IN ('place', 'service')),
  5. target_id UUID NOT NULL,
  6. action VARCHAR(20) NOT NULL CHECK (action IN ('approve', 'reject', 'request_changes', 'publish', 'archive')),
  7. comment TEXT,
  8. created_at TIMESTAMPTZ NOT NULL DEFAULT now()
  9. );
  10. CREATE INDEX idx_moderation_log_target ON moderation_log(target_type, target_id);
  11. CREATE INDEX idx_moderation_log_moderator_id ON moderation_log(moderator_id);
  12. CREATE TABLE payments (
  13. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  14. user_id UUID NOT NULL REFERENCES users(id),
  15. type VARCHAR(20) NOT NULL CHECK (type IN ('subscription', 'donation', 'listing_fee', 'booking_commission')),
  16. provider VARCHAR(20) NOT NULL CHECK (provider IN ('cloudpayments', 'stripe')),
  17. provider_payment_id VARCHAR(255),
  18. amount INT NOT NULL,
  19. currency VARCHAR(3) DEFAULT 'RUB',
  20. status VARCHAR(20) NOT NULL CHECK (status IN ('pending', 'succeeded', 'failed', 'refunded')),
  21. metadata JSONB,
  22. created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  23. updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
  24. );
  25. CREATE INDEX idx_payments_user_id ON payments(user_id);
  26. CREATE INDEX idx_payments_status ON payments(status);
  27. CREATE INDEX idx_payments_provider_id ON payments(provider, provider_payment_id);
  28. CREATE TABLE subscriptions (
  29. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  30. user_id UUID NOT NULL REFERENCES users(id),
  31. plan VARCHAR(50) NOT NULL CHECK (plan IN ('studio_listing', 'executor_promo', 'premium_user')),
  32. status VARCHAR(20) NOT NULL CHECK (status IN ('active', 'cancelled', 'expired')),
  33. current_period_start TIMESTAMPTZ,
  34. current_period_end TIMESTAMPTZ,
  35. provider_subscription_id VARCHAR(255),
  36. created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  37. updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
  38. );
  39. CREATE TABLE visitor_sessions (
  40. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  41. user_id UUID REFERENCES users(id),
  42. coordinates GEOGRAPHY(Point, 4326) NOT NULL,
  43. last_active_at TIMESTAMPTZ NOT NULL,
  44. created_at TIMESTAMPTZ NOT NULL DEFAULT now()
  45. );
  46. CREATE INDEX idx_visitor_sessions_coordinates ON visitor_sessions USING GIST (coordinates);
  47. CREATE INDEX idx_visitor_sessions_last_active ON visitor_sessions(last_active_at);