finshing architecture for project now we have all layers to build profitionl project app,components ,hooks ,lib,services,styel ,types

This commit is contained in:
m7amedez5511
2026-06-08 23:05:19 +03:00
parent 70853958f5
commit 53c03e9867
45 changed files with 1408 additions and 78 deletions

53
lib/session.ts Normal file
View File

@@ -0,0 +1,53 @@
export const SESSION_KEY = "lf_client";
export const SESSION_COOKIE = "lf_client_id";
export interface ClientSession {
id: string;
name: string;
email: string;
phone: string;
}
// ── Cookie helpers ────────────────────────────────────
export function getCookie(name: string): string | null {
if (typeof document === "undefined") return null;
const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
return match ? decodeURIComponent(match[2]) : null;
}
export function setCookie(name: string, value: string, days = 30) {
const exp = new Date(Date.now() + days * 864e5).toUTCString();
document.cookie = `${name}=${encodeURIComponent(value)}; expires=${exp}; path=/; SameSite=Lax`;
}
export function deleteCookie(name: string) {
document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;
}
// ── Session read / write ──────────────────────────────
export function loadSession(): ClientSession | null {
try {
const raw = typeof localStorage !== "undefined"
? localStorage.getItem(SESSION_KEY)
: null;
if (raw) return JSON.parse(raw) as ClientSession;
} catch { /* ignore parse errors */ }
const id = getCookie(SESSION_COOKIE);
if (id) return { id, name: "", email: "", phone: "" };
return null;
}
export function saveSession(s: ClientSession) {
if (typeof localStorage !== "undefined") {
localStorage.setItem(SESSION_KEY, JSON.stringify(s));
}
setCookie(SESSION_COOKIE, s.id);
}
export function clearSession() {
if (typeof localStorage !== "undefined") {
localStorage.removeItem(SESSION_KEY);
}
deleteCookie(SESSION_COOKIE);
}