refactor: liste feature'ı — manuel-liste toptan taşındı (Faz 7)

- src/components/manuel-liste/ → src/features/liste/: kayitli-liste-actions →
  liste-actions, store → liste-store, dogrula → liste-dogrula, giris-url →
  liste-giris-url, oturum-sinyali → liste-oturum-sinyali,
  profil-kapisi-store → hooks/use-tercih-profili; 12 tsx → components/
- program-tablosu.tsx ve tercih-haritasi.tsx da features/liste/components'a
  geldi (rapor ve katalog cross-import ediyor)
- app/layout.tsx'in 3 global mount'u (ListeCekmecesiLazy, KaydetBannerLazy,
  TercihProfiliKapisiLazy) yeni feature yollarından import ediliyor
- liste-queries.ts /sonuc dönüşümüyle Faz 9'da gelecek
- Davranış değişikliği yok; store/localStorage anahtarları aynı

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-08-08 01:34:50 +03:00
parent 792e8c7346
commit 7d2b2ddd71
37 changed files with 43 additions and 43 deletions

View File

@@ -5,9 +5,9 @@ import localFont from "next/font/local";
import { Toaster } from "@/components/ui/sonner";
import { SiteHeader } from "@/components/site-header";
import { SiteTopBanner } from "@/components/site-top-banner";
import { ListeCekmecesiLazy } from "@/components/manuel-liste/liste-cekmecesi-lazy";
import { KaydetBannerLazy } from "@/components/manuel-liste/kaydet-banner-lazy";
import { TercihProfiliKapisiLazy } from "@/components/manuel-liste/tercih-profili-kapisi-lazy";
import { ListeCekmecesiLazy } from "@/features/liste/components/liste-cekmecesi-lazy";
import { KaydetBannerLazy } from "@/features/liste/components/kaydet-banner-lazy";
import { TercihProfiliKapisiLazy } from "@/features/liste/components/tercih-profili-kapisi-lazy";
import { HeaderGate } from "@/components/header-gate";
import { ProgressiveBlur } from "@/components/ui/skiper-ui/skiper41";
import { DevPanel } from "@/components/dev/dev-panel";

View File

@@ -4,7 +4,7 @@ import Link from "next/link";
import { ArrowRight } from "lucide-react";
import { Button } from "@/components/ui/button";
import { PagePixelDivider } from "@/components/pixel-decor";
import { useTercihProfili } from "@/components/manuel-liste/profil-kapisi-store";
import { useTercihProfili } from "@/features/liste/hooks/use-tercih-profili";
import { sonucHref } from "@/features/sihirbaz/sihirbaz-sabitler";
/**

View File

@@ -18,7 +18,7 @@ import {
import { Button } from "@/components/ui/button";
import { RaporListesi } from "@/components/rapor-listesi";
import { useGorunumOlayi } from "@/components/use-gorunum-olayi";
import { TercihHaritasi } from "@/components/tercih-haritasi";
import { TercihHaritasi } from "@/features/liste/components/tercih-haritasi";
import { pinleriTuret } from "@/lib/harita-pinler";
import type { RaporSonuc } from "@/features/rapor/types/rapor";
import { SohbetClient, type DanismanOzeti, type Mesaj } from "./sohbet-client";

View File

@@ -3,7 +3,7 @@
import Link from "next/link";
import { ArrowRight } from "lucide-react";
import { Button } from "@/components/ui/button";
import { useTercihProfili } from "@/components/manuel-liste/profil-kapisi-store";
import { useTercihProfili } from "@/features/liste/hooks/use-tercih-profili";
import { sonucHref } from "@/features/sihirbaz/sihirbaz-sabitler";
/**

View File

@@ -6,8 +6,8 @@ import { kullanicininRaporu } from "@/lib/rapor-kaydi";
import { tadimlikSec } from "@/lib/tadimlik-havuzu";
import { SihirbazBolumu } from "@/features/sihirbaz/components/sihirbaz-cagri-karti";
import { TadimlikSatiri } from "./tadimlik-satiri";
import { ProgramTablosu } from "@/components/program-tablosu";
import { ManuelHarita } from "@/components/manuel-liste/manuel-harita";
import { ProgramTablosu } from "@/features/liste/components/program-tablosu";
import { ManuelHarita } from "@/features/liste/components/manuel-harita";
import { SiteFooter } from "@/components/site-footer";
import { SiraGerekli } from "@/features/sihirbaz/components/sira-gerekli";

View File

@@ -14,7 +14,7 @@ import { SIHIRBAZ_AC_EVENT, sonucHref } from "@/features/sihirbaz/sihirbaz-sabit
import {
profilToplamaAc,
useTercihProfili,
} from "@/components/manuel-liste/profil-kapisi-store";
} from "@/features/liste/hooks/use-tercih-profili";
const FUNNEL_METINLERI = [
"Sıralamana en uygun listeyi birlikte kuralım.",

View File

@@ -10,7 +10,7 @@ import {
ProgramSiraGecmisi,
ProgramTabanTrendi,
} from "@/components/program-liste-verileri";
import { ProgramEkleButonu } from "@/components/manuel-liste/program-ekle-butonu";
import { ProgramEkleButonu } from "@/features/liste/components/program-ekle-butonu";
import { ProgramNetleriButonu } from "./program-netleri";
import { UniLogo } from "@/components/uni-logo";
import {

View File

@@ -12,7 +12,7 @@ import {
profilDuzenlemeyiAc,
sonucaGitIste,
useTercihProfili,
} from "@/components/manuel-liste/profil-kapisi-store";
} from "@/features/liste/hooks/use-tercih-profili";
import { PUAN_TURU_ETIKET } from "@/features/sihirbaz/sihirbaz-sabitler";
import { olay } from "@/lib/analitik";
import {

View File

@@ -7,7 +7,7 @@ import {
ProgramTabanTrendi,
programEtkinSira,
} from "@/components/program-liste-verileri";
import { ProgramEkleButonu } from "@/components/manuel-liste/program-ekle-butonu";
import { ProgramEkleButonu } from "@/features/liste/components/program-ekle-butonu";
import { ProgramNetleriButonu } from "./program-netleri";
import {
Table,

View File

@@ -2,8 +2,8 @@ import Link from "next/link";
import { Coins } from "lucide-react";
import { getCurrentUser } from "@/lib/session";
import { Button } from "@/components/ui/button";
import { ListemButonu } from "@/components/manuel-liste/listem-butonu";
import { ListeSenkron } from "@/components/manuel-liste/liste-senkron";
import { ListemButonu } from "@/features/liste/components/listem-butonu";
import { ListeSenkron } from "@/features/liste/components/liste-senkron";
import { RybbitIdentify } from "@/components/rybbit-identify";
import { SignOutButton } from "./sign-out-button";

View File

@@ -16,9 +16,9 @@ import { useGorunumOlayi } from "@/components/use-gorunum-olayi";
import { olay } from "@/lib/analitik";
import { kromGizliMi } from "@/components/header-gate";
import { CihazCifti, IsletimSistemiLogosu } from "./cihaz-ikonlari";
import { useManuelListe } from "./store";
import { useOturumDurumu } from "./oturum-sinyali";
import { useGirisUrl } from "./giris-url";
import { useManuelListe } from "../liste-store";
import { useOturumDurumu } from "../liste-oturum-sinyali";
import { useGirisUrl } from "../liste-giris-url";
const KAPATMA_KEY = "kolaytercih.kaydet-banner-kapali";
const ESIK = 3;

View File

@@ -47,9 +47,9 @@ import { RISK_ETIKET, type RiskSeviyesi } from "@/lib/risk";
import { bolumBazAdi, turkishSlugify } from "@/lib/slug";
import { olay } from "@/lib/analitik";
import { CihazCifti, IsletimSistemiLogosu } from "./cihaz-ikonlari";
import { sonucaGitIste } from "./profil-kapisi-store";
import { useOturumDurumu } from "./oturum-sinyali";
import { useGirisUrl } from "./giris-url";
import { sonucaGitIste } from "../hooks/use-tercih-profili";
import { useOturumDurumu } from "../liste-oturum-sinyali";
import { useGirisUrl } from "../liste-giris-url";
import {
MANUEL_LISTE_MAX,
cekmeceAc,
@@ -60,7 +60,7 @@ import {
useManuelListe,
yenidenSirala,
type ManuelTercih,
} from "./store";
} from "../liste-store";
// Slug kuralları katalog.ts'tekiyle aynı (bolumBazAdi/uniAdiNormalize +
// turkishSlugify); katalog haritaları DB'deki tüm isim/universite

View File

@@ -13,9 +13,9 @@
import { useEffect, useRef } from "react";
import { PROFIL_DEGISTI_EVENT } from "@/features/sihirbaz/sihirbaz-sabitler";
import { tercihProfiliOku, tercihProfiliYaz } from "@/features/sihirbaz/sihirbaz-profil";
import { listeOku, sunucuylaBirlestir, useManuelListe } from "./store";
import { oturumDurumuBildir } from "./oturum-sinyali";
import { listeSenkronla, listeyiKaydet } from "./kayitli-liste-actions";
import { listeOku, sunucuylaBirlestir, useManuelListe } from "../liste-store";
import { oturumDurumuBildir } from "../liste-oturum-sinyali";
import { listeSenkronla, listeyiKaydet } from "../liste-actions";
const DEBOUNCE_MS = 2000;

View File

@@ -11,7 +11,7 @@ import {
cekmeceDegistir,
useCekmeceAcik,
useManuelListe,
} from "./store";
} from "../liste-store";
export function ListemButonu() {
const liste = useManuelListe();

View File

@@ -5,10 +5,10 @@
// abonedir; ekleme/çıkarma/sürükleme anında haritaya yansır.
import { useMemo, useState } from "react";
import { TercihHaritasi, type HaritaPin } from "@/components/tercih-haritasi";
import { TercihHaritasi, type HaritaPin } from "@/features/liste/components/tercih-haritasi";
import { ilKonum, uniAdiNormalize, uniKonum } from "@/lib/harita";
import type { RiskSeviyesi } from "@/lib/risk";
import { useManuelListe } from "./store";
import { useManuelListe } from "../liste-store";
// Aynı üniversitede birden çok tercih varsa pinde kötü risk baskın olsun
const RISK_AGIRLIK: Record<RiskSeviyesi, number> = {

View File

@@ -9,8 +9,8 @@ import {
MANUEL_LISTE_MAX,
useManuelListe,
type ManuelKaynak,
} from "./store";
import { programEkleIste } from "./profil-kapisi-store";
} from "../liste-store";
import { programEkleIste } from "../hooks/use-tercih-profili";
type ProgramOzet = Pick<
Program,

View File

@@ -30,7 +30,7 @@ import {
TableRow,
} from "@/components/ui/table";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { ProgramEkleButonu } from "@/components/manuel-liste/program-ekle-butonu";
import { ProgramEkleButonu } from "@/features/liste/components/program-ekle-butonu";
import { ProgramNetleriButonu } from "@/features/katalog/components/program-netleri";
import { UniLogo } from "@/components/uni-logo";

View File

@@ -23,12 +23,12 @@ import {
MANUEL_LISTE_MAX,
useManuelListe,
type ManuelTercih,
} from "./store";
} from "../liste-store";
import {
profilDuzenlemeyiAc,
sonucaGitIste,
useTercihProfili,
} from "./profil-kapisi-store";
} from "../hooks/use-tercih-profili";
const RISK_STIL: Record<RiskSeviyesi, { nokta: string; kenar: string }> = {
guvenli: { nokta: "bg-emerald-500", kenar: "border-l-emerald-500" },

View File

@@ -37,7 +37,7 @@ import {
useProfilKapisi,
type BekleyenHedef,
type BekleyenProgram,
} from "./profil-kapisi-store";
} from "../hooks/use-tercih-profili";
const PUAN_TURLERI_SECENEK = [
{ deger: "say", etiket: "Sayısal" },

View File

@@ -15,7 +15,7 @@ import {
riskleriYenile,
useManuelListe,
type ManuelKaynak,
} from "./store";
} from "../liste-store";
export type BekleyenProgram = {
program: Pick<

View File

@@ -18,7 +18,7 @@ import {
MANUEL_LISTE_MAX,
dogrula,
type ManuelTercih,
} from "@/components/manuel-liste/dogrula";
} from "@/features/liste/liste-dogrula";
export type ListeSenkronSonucu =
| { ok: true; items: ManuelTercih[]; profil: TercihProfili | null }

View File

@@ -15,7 +15,7 @@ import {
dogrula,
type ManuelKaynak,
type ManuelTercih,
} from "./dogrula";
} from "./liste-dogrula";
// Doğrulama katmanı sunucu action'larıyla paylaşılır (bkz. dogrula.ts);
// mevcut import yolları kırılmasın diye buradan re-export edilir.

View File

@@ -1,6 +1,6 @@
"use client";
import { useTercihProfili } from "@/components/manuel-liste/profil-kapisi-store";
import { useTercihProfili } from "@/features/liste/hooks/use-tercih-profili";
// Hero başlığı: sıralama girilmemişse tanıtım metni, kayıtlı profil varsa
// aynı şablonla (vurgulu italik orta parça) aksiyon metnine dönüşür.

View File

@@ -3,7 +3,7 @@
import Link from "next/link";
import { ArrowRight } from "lucide-react";
import { Button } from "@/components/ui/button";
import { useTercihProfili } from "@/components/manuel-liste/profil-kapisi-store";
import { useTercihProfili } from "@/features/liste/hooks/use-tercih-profili";
import { sonucHref } from "@/features/sihirbaz/sihirbaz-sabitler";
export function HeroFocusButton() {

View File

@@ -16,7 +16,7 @@ import {
} from "react";
import Link from "next/link";
import { ArrowRight } from "lucide-react";
import { useTercihProfili } from "@/components/manuel-liste/profil-kapisi-store";
import { useTercihProfili } from "@/features/liste/hooks/use-tercih-profili";
import { PUAN_TURU_ETIKET, sonucHref } from "@/features/sihirbaz/sihirbaz-sabitler";
import type { DilimKey, SihirbazFacetleri } from "@/types/yokatlas";

View File

@@ -27,7 +27,7 @@ import {
} from "./sihirbaz-adimlar-lazy";
import { authClient } from "@/lib/auth-client";
import { olay, siraKovasi } from "@/lib/analitik";
import { useTercihProfili } from "@/components/manuel-liste/profil-kapisi-store";
import { useTercihProfili } from "@/features/liste/hooks/use-tercih-profili";
import type { SihirbazFacetleri } from "@/types/yokatlas";
import { sonucHref, type SihirbazSecimleri } from "@/features/sihirbaz/sihirbaz-sabitler";
import { tercihProfiliYaz } from "@/features/sihirbaz/sihirbaz-profil";

View File

@@ -21,7 +21,7 @@ import { olay, siraKovasi } from "@/lib/analitik";
import {
profilDuzenlemeyiAc,
useTercihProfili,
} from "@/components/manuel-liste/profil-kapisi-store";
} from "@/features/liste/hooks/use-tercih-profili";
import type { SihirbazFacetleri } from "@/types/yokatlas";
import { PUAN_TURU_ETIKET, sonucHref, type SihirbazSecimleri } from "@/features/sihirbaz/sihirbaz-sabitler";
import { tercihProfiliYaz } from "@/features/sihirbaz/sihirbaz-profil";

View File

@@ -13,7 +13,7 @@ import { sonucHref } from "@/features/sihirbaz/sihirbaz-sabitler";
import {
sonucaGitIste,
useProfilKapisi,
} from "@/components/manuel-liste/profil-kapisi-store";
} from "@/features/liste/hooks/use-tercih-profili";
export function SiraGerekli() {
const router = useRouter();

View File

@@ -1,7 +1,7 @@
// Rapordan Türkiye haritası pinleri türetir — /sonuc ve /listem ortak kullanır.
import type { RaporSonuc } from "@/features/rapor/types/rapor";
import type { HaritaPin } from "@/components/tercih-haritasi";
import type { HaritaPin } from "@/features/liste/components/tercih-haritasi";
import { ilKonum, uniAdiNormalize, uniKonum } from "@/lib/harita";
import { dilimdenRisk, riskHesapla, type RiskSeviyesi } from "@/lib/risk";