#!/usr/bin/env python3 """ Türkiye idari birim tiplerini ve büyükşehir/il belediyelerini seed eder. """ import os import psycopg from pathlib import Path from dotenv import load_dotenv _here = Path(__file__).parent load_dotenv(_here.parent / ".env") load_dotenv(_here / ".env", override=False) DSN = os.environ["DATABASE_URL"] UNIT_TYPES = [ ("Büyükşehir Belediyesi", "buyuksehir-belediyesi", "5216 sayılı Kanun kapsamındaki büyükşehir belediyeleri"), ("İl Belediyesi", "il-belediyesi", "Büyükşehir olmayan illerin merkez belediyesi"), ("İlçe Belediyesi", "ilce-belediyesi", "İlçe sınırları içindeki belediye"), ("Belde Belediyesi", "belde-belediyesi", "Nüfusu 5000 ve üzeri belde belediyeleri"), ("Valilik", "valilik", "İl mülki idare amirliği"), ("Kaymakamlık", "kaymakamlık", "İlçe mülki idare amirliği"), ("Büyükşehir İlçe Belediyesi", "buyuksehir-ilce-belediyesi", "Büyükşehir sınırları içindeki ilçe belediyeleri"), ("Köy Muhtarlığı", "koy-muhtarligi", "Köy yönetim birimi"), ("Mahalle Muhtarlığı", "mahalle-muhtarligi", "Mahalle yönetim birimi"), ("İl Özel İdaresi", "il-ozel-idaresi", "İl genelinde hizmet veren idare"), ("Karayolları Bölge Müdürlüğü", "karayollari-bolge-mudurlugu", "Devlet ve il yolları sorumluluğu"), ("DSİ Bölge Müdürlüğü", "dsi-bolge-mudurlugu", "Su işleri bölge yönetimi"), ("Orman İşletme Müdürlüğü", "orman-isletme-mudurlugu", "Orman alanları yönetimi"), ("Milli Eğitim Müdürlüğü", "milli-egitim-mudurlugu", "İl/ilçe eğitim yönetimi"), ("Sağlık Müdürlüğü", "saglik-mudurlugu", "İl sağlık hizmetleri yönetimi"), ] # 2014'ten itibaren büyükşehir olan 30 il BUYUKSEHIR_ILLER = [ "Adana", "Ankara", "Antalya", "Aydın", "Balıkesir", "Bursa", "Denizli", "Diyarbakır", "Erzurum", "Eskişehir", "Gaziantep", "Hatay", "İstanbul", "İzmir", "Kahramanmaraş", "Kayseri", "Kocaeli", "Konya", "Malatya", "Manisa", "Mardin", "Mersin", "Muğla", "Ordu", "Sakarya", "Samsun", "Şanlıurfa", "Tekirdağ", "Trabzon", "Van", ] def run(): with psycopg.connect(DSN) as conn: # Tipler existing_types = { row[0] for row in conn.execute("SELECT slug FROM administrative_unit_types") } inserted_types = 0 for name, slug, desc in UNIT_TYPES: if slug not in existing_types: conn.execute( "INSERT INTO administrative_unit_types (name, slug, description) VALUES (%s, %s, %s)", (name, slug, desc) ) inserted_types += 1 conn.commit() print(f"Birim tipleri: {inserted_types} yeni eklendi.") # Tip ID'lerini al types = { row[1]: row[0] for row in conn.execute("SELECT id, slug FROM administrative_unit_types") } # Büyükşehir ve il belediyeleri existing_units = { row[0] for row in conn.execute("SELECT name FROM administrative_units") } # Tüm illeri çek iller = { row[0]: row[1] for row in conn.execute( "SELECT name, id FROM locations WHERE type = 'il' ORDER BY name" ) } inserted_units = 0 for il_name, loc_id in iller.items(): is_bs = il_name in BUYUKSEHIR_ILLER if is_bs: unit_name = f"{il_name} Büyükşehir Belediyesi" type_id = types["buyuksehir-belediyesi"] tarih = "2014-03-30" else: unit_name = f"{il_name} İl Belediyesi" type_id = types["il-belediyesi"] tarih = "1984-01-01" if unit_name not in existing_units: unit_id = conn.execute( "INSERT INTO administrative_units (type_id, name, established_at) " "VALUES (%s, %s, %s) RETURNING id", (type_id, unit_name, tarih) ).fetchone()[0] # İle bağla conn.execute( "INSERT INTO location_administrative_units (location_id, unit_id, valid_from) " "VALUES (%s, %s, %s)", (loc_id, unit_id, tarih) ) # Büyükşehirde tüm ilçeleri de bağla if is_bs: ilceler = conn.execute( "SELECT id FROM locations WHERE parent_id = %s AND type = 'ilce'", (loc_id,) ).fetchall() for (ilce_id,) in ilceler: conn.execute( "INSERT INTO location_administrative_units (location_id, unit_id, valid_from) " "VALUES (%s, %s, %s)", (ilce_id, unit_id, tarih) ) inserted_units += 1 # Valilik — her il için valilik_name = f"{il_name} Valiliği" if valilik_name not in existing_units: v_id = conn.execute( "INSERT INTO administrative_units (type_id, name, established_at) " "VALUES (%s, %s, %s) RETURNING id", (types["valilik"], valilik_name, "1923-10-29") ).fetchone()[0] conn.execute( "INSERT INTO location_administrative_units (location_id, unit_id, valid_from) " "VALUES (%s, %s, %s)", (loc_id, v_id, "1923-10-29") ) inserted_units += 1 conn.commit() print(f"İdari birimler: {inserted_units} yeni eklendi.") total = conn.execute("SELECT COUNT(*) FROM administrative_units").fetchone()[0] print(f"Toplam idari birim: {total}") if __name__ == "__main__": run()