66 lines
2.0 KiB
SQL
66 lines
2.0 KiB
SQL
-- GeoSeek database draft for PostgreSQL.
|
|
-- This file is intentionally schema-only; do not run on production before adapting migrations.
|
|
|
|
CREATE TABLE IF NOT EXISTS geo_categories (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
kategori TEXT NOT NULL UNIQUE,
|
|
subkategori_default TEXT,
|
|
target_total INTEGER DEFAULT 0,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS geo_regions (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
provinsi TEXT NOT NULL,
|
|
kota TEXT NOT NULL,
|
|
kecamatan TEXT,
|
|
kelurahan TEXT,
|
|
latitude NUMERIC(10, 7),
|
|
longitude NUMERIC(10, 7),
|
|
sumber_data TEXT DEFAULT 'GeoSeek',
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS geo_places (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
nama_tempat TEXT NOT NULL,
|
|
kategori TEXT NOT NULL,
|
|
subkategori TEXT,
|
|
alamat TEXT,
|
|
kecamatan TEXT,
|
|
kota TEXT,
|
|
provinsi TEXT,
|
|
latitude NUMERIC(10, 7),
|
|
longitude NUMERIC(10, 7),
|
|
no_telp TEXT,
|
|
jam_operasional TEXT,
|
|
rating NUMERIC(2, 1),
|
|
jumlah_review INTEGER DEFAULT 0,
|
|
sumber_data TEXT NOT NULL DEFAULT 'GeoSeek',
|
|
status_verifikasi TEXT NOT NULL DEFAULT 'unverified',
|
|
status TEXT NOT NULL DEFAULT 'aktif',
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_geo_places_keyword
|
|
ON geo_places USING GIN (to_tsvector('simple', coalesce(nama_tempat, '') || ' ' || coalesce(kategori, '') || ' ' || coalesce(subkategori, '') || ' ' || coalesce(alamat, '')));
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_geo_places_location
|
|
ON geo_places (latitude, longitude);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_geo_places_region
|
|
ON geo_places (provinsi, kota, kecamatan);
|
|
|
|
CREATE TABLE IF NOT EXISTS geo_reviews (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
place_id BIGINT NOT NULL REFERENCES geo_places(id) ON DELETE CASCADE,
|
|
user_id UUID,
|
|
rating NUMERIC(2, 1),
|
|
comment TEXT,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|