${p.name}
Kalan: -
-
@@ -86,30 +86,23 @@ export function renderKaza(pb) {
).join("")}
+
+
-
-
-
`
}
@@ -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");
}