diff --git a/src/pages/kaza.js b/src/pages/kaza.js index db2a14e..b1711ef 100755 --- a/src/pages/kaza.js +++ b/src/pages/kaza.js @@ -1,4 +1,4 @@ -import { calculateMissedPrayers, getHijribirthdate } from "../utils/hijri.js"; +import { calculateMissedPrayers } from "../utils/hijri.js"; const PRAYERS = [ { id: "fajr", name: "SABAH", arabic: "Fecr" }, @@ -10,9 +10,8 @@ const PRAYERS = [ ]; export function renderKaza(pb) { - // Sıfır localStorage! Her şey PocketBase authStore modelinden okunuyor. const user = pb.authStore.model; - const birthdate = user?.birthdate || user?.birthdate; + const birthDate = user?.birthDate || user?.birthdate; const gender = user?.gender || "male"; const html = ` @@ -24,21 +23,21 @@ export function renderKaza(pb) {
📿
-

Kaza Namazı Takibi

-

Tamamlanan namazlar anlık olarak PocketBase hesabınla eşzamanlanır.

+

Kaza Namazı Sayaç & Takip

+

Tamamladığın vakitler anlık olarak PocketBase hesabında güncellenir.

${ - !birthdate + !birthDate ? `

Doğum Tarihi Gerekli

-

Kaza namazı borcunu tam hesaplayabilmemiz için bilgilerinizi kaydedin.

+

Kaza namazı borcunu hesaplayabilmemiz için profil bilgilerinizi girin.

- +
@@ -48,37 +47,38 @@ export function renderKaza(pb) {
` : ` - +
- 🎯 TOPLAM İLERLEME (XP) + 🎯 GENEL KAZA BİTİRME ORANI %0
-
+
-
- Kılınan: 0 vakit - Kalan Borç: 0 vakit +
+ Kılınan Toplam: 0 vakit + Kalan Toplam Borç: 0 vakit
- +
${PRAYERS.map( (p) => ` -
+

${p.name}

Kalan: -

-
+

Kılınan: 0

+
@@ -86,30 +86,23 @@ export function renderKaza(pb) { ).join("")}
- -
+ +
+

Kaza Sayacı İşlem

- ${PRAYERS.map((p) => ``).join("")} - + - -
- -
- - -
-

Son Kaza Geçmişi

-
-

Yükleniyor...

-
+
` } @@ -125,17 +118,18 @@ export function renderKaza(pb) { ); }); - if (!birthdate) { + if (!birthDate) { container .querySelector("#profileForm") ?.addEventListener("submit", async (e) => { e.preventDefault(); - const bInput = container.querySelector("#birthdateInput").value; + const bInput = container.querySelector("#birthDateInput").value; const gInput = container.querySelector("#genderInput").value; try { await pb.collection("users").update(pb.authStore.model.id, { birthdate: bInput, + birthDate: bInput, gender: gInput, }); pb.authStore.model.birthdate = bInput; @@ -145,107 +139,129 @@ export function renderKaza(pb) { ); } catch (err) { alert( - "Profil kaydedilemedi. PocketBase bağlantısını kontrol edin.", + "Profil kaydedilemedi. PocketBase alan adlarını kontrol edin.", ); } }); } else { - refreshKazaStats(container, pb, birthdate, gender); + refreshKazaStats(container, pb, birthDate, gender); container .querySelector("#addKazaBtn") ?.addEventListener("click", async () => { - await handleKazaLog(container, pb, birthdate, gender, 1); + await updateKazaCount(container, pb, birthDate, gender, 1); }); container .querySelector("#removeKazaBtn") ?.addEventListener("click", async () => { - await handleKazaLog(container, pb, birthdate, gender, -1); + await updateKazaCount(container, pb, birthDate, gender, -1); }); } }, }; } -async function handleKazaLog(container, pb, birthdate, gender, multiplier) { +// PocketBase Tek Satır Güncelleme Mantığı +async function updateKazaCount(container, pb, birthDate, gender, direction) { const prayerId = container.querySelector("#kazaPrayerType").value; const countInput = container.querySelector("#kazaCount"); - const count = - Math.max(1, parseInt(countInput?.value || "1", 10)) * multiplier; + const amount = + Math.max(1, parseInt(countInput?.value || "1", 10)) * direction; const msg = container.querySelector("#kazaMsg"); try { - await pb.collection("kaza_logs").create({ - user: pb.authStore.model.id, - prayerId, - count, - date: new Date().toISOString().split("T")[0], + const userId = pb.authStore.model.id; + + // Kullanıcının kaza sayacı kaydı var mı kontrol et + let userRecord = null; + try { + userRecord = await pb + .collection("kaza_logs") + .getFirstListItem(`user = "${userId}"`); + } catch { + // Yoksa ilk kaydı oluştur + userRecord = await pb.collection("kaza_logs").create({ + user: userId, + fajr: 0, + dhuhr: 0, + asr: 0, + maghrib: 0, + isha: 0, + vitr: 0, + }); + } + + const currentCompleted = userRecord[prayerId] || 0; + const newCompleted = Math.max(0, currentCompleted + amount); + + // Tek satır kaydı güncelle + await pb.collection("kaza_logs").update(userRecord.id, { + [prayerId]: newCompleted, }); showKazaMsg( msg, - count > 0 - ? `🎉 ${count} vakit kaza kılındı olarak işlendi!` - : `${Math.abs(count)} vakit düşüldü.`, + amount > 0 + ? `🎉 ${amount} vakit kılınanlara eklendi!` + : `${Math.abs(amount)} vakit düşüldü.`, true, ); if (countInput) countInput.value = "1"; - await refreshKazaStats(container, pb, birthdate, gender); + await refreshKazaStats(container, pb, birthDate, gender); } catch (err) { + console.error("Sayaç güncelleme hatası:", err); showKazaMsg( msg, - "İşlem kaydedilemedi! PocketBase izinlerini veya bağlantısını kontrol edin.", + "Güncelleme başarısız! PocketBase alanlarını ve izinlerini kontrol edin.", false, ); } } -async function refreshKazaStats(container, pb, birthdate, gender) { - const calc = calculateMissedPrayers(birthdate, gender); - let logsByPrayer = {}; - let logs = []; +async function refreshKazaStats(container, pb, birthDate, gender) { + const calc = calculateMissedPrayers(birthDate, gender); + const userId = pb.authStore.model.id; + + let userRecord = { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0 }; try { - const records = await pb.collection("kaza_logs").getFullList({ - filter: `user = "${pb.authStore.model.id}"`, - sort: "-createdAt", - }); - - logs = records; - records.forEach((l) => { - logsByPrayer[l.prayerId] = - (logsByPrayer[l.prayerId] || 0) + (l.count || 0); - }); + const record = await pb + .collection("kaza_logs") + .getFirstListItem(`user = "${userId}"`); + if (record) userRecord = record; } catch (err) { - console.error("Loglar çekilemedi:", err); + // Kayıt yoksa sorun değil, varsayılan 0 değerleriyle devam eder } let grandTotalMissed = 0; let grandTotalCompleted = 0; PRAYERS.forEach((p) => { - const missed = calc[p.id] || 0; - const completed = Math.max(0, logsByPrayer[p.id] || 0); - const remaining = Math.max(0, missed - completed); + const totalMissed = calc[p.id] || 0; // Doğumdan beri olan toplam borç + const completed = userRecord[p.id] || 0; // Kılınan miktar + const remaining = Math.max(0, totalMissed - completed); // Kalan borç - grandTotalMissed += missed; + grandTotalMissed += totalMissed; grandTotalCompleted += completed; const remainEl = container.querySelector(`#remaining-${p.id}`); + const completedEl = container.querySelector(`#completed-${p.id}`); const progressEl = container.querySelector(`#progress-${p.id}`); if (remainEl) remainEl.textContent = remaining; + if (completedEl) completedEl.textContent = completed; + if (progressEl) { const pct = - missed > 0 - ? Math.min(100, Math.round((completed / missed) * 100)) + totalMissed > 0 + ? Math.min(100, Math.round((completed / totalMissed) * 100)) : 100; progressEl.style.width = `${pct}%`; } }); - // Genel İlerleme Çubuğu ve Yüzde Hesaplama + // Genel İlerleme Hesabı const overallPct = grandTotalMissed > 0 ? Math.min( @@ -264,31 +280,11 @@ async function refreshKazaStats(container, pb, birthdate, gender) { if (compText) compText.textContent = grandTotalCompleted; if (remText) remText.textContent = Math.max(0, grandTotalMissed - grandTotalCompleted); - - // İşlem Geçmişi - const logsContainer = container.querySelector("#logsContainer"); - if (logsContainer) { - logsContainer.innerHTML = - logs - .slice(0, 10) - .map((log) => { - const prayer = PRAYERS.find((p) => p.id === log.prayerId); - const isPlus = log.count > 0; - return ` -
- ${prayer?.name || log.prayerId} - ${log.date || ""} - ${isPlus ? "+" : ""}${log.count} -
- `; - }) - .join("") || - '

Henüz kayıt bulunmuyor.

'; - } } function showKazaMsg(el, text, success) { if (!el) return; el.textContent = text; - el.className = `text-xs mt-2.5 ${success ? "text-emerald-400 font-medium" : "text-rose-400"}`; + el.className = `text-xs mt-3 ${success ? "text-emerald-400 font-medium" : "text-rose-400"}`; el.classList.remove("hidden"); }