From 8b51eb64cdadce4e5d92d8232566c506c4675508 Mon Sep 17 00:00:00 2001 From: poyrazavsever Date: Tue, 9 Jun 2026 18:30:14 +0300 Subject: [PATCH] refactor: update Dockerfile to use Node.js 22-alpine and optimize project queries in portal pages --- Dockerfile | 2 +- .../analytics/analytics-client.tsx | 2 +- app/(dashboard)/time/page.tsx | 1 - app/portal/page.tsx | 21 +++++-------------- app/portal/projects/[id]/page.tsx | 2 +- app/portal/projects/page.tsx | 2 +- 6 files changed, 9 insertions(+), 21 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1a35695..51b243e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # ── Production Dockerfile (Dokploy / Coolify ready) ────────────── -FROM node:20-alpine AS base +FROM node:22-alpine AS base # ── 1. Install dependencies ───────────────────────────────────── FROM base AS deps diff --git a/app/(dashboard)/analytics/analytics-client.tsx b/app/(dashboard)/analytics/analytics-client.tsx index 77f376f..a3f61fe 100644 --- a/app/(dashboard)/analytics/analytics-client.tsx +++ b/app/(dashboard)/analytics/analytics-client.tsx @@ -120,7 +120,7 @@ export function AnalyticsClient({ data }: AnalyticsClientProps) { ))} `₺${value}`} + formatter={(value) => `₺${Number(value ?? 0)}`} contentStyle={{ backgroundColor: 'hsl(var(--background))', borderColor: 'hsl(var(--border))', diff --git a/app/(dashboard)/time/page.tsx b/app/(dashboard)/time/page.tsx index 4bf7d58..8bd88e7 100644 --- a/app/(dashboard)/time/page.tsx +++ b/app/(dashboard)/time/page.tsx @@ -159,7 +159,6 @@ export default function TimeTrackingPage() { - {/* Right: Analytics & AI */}
diff --git a/app/portal/page.tsx b/app/portal/page.tsx index 385b457..bf7b5fa 100644 --- a/app/portal/page.tsx +++ b/app/portal/page.tsx @@ -1,6 +1,6 @@ import { createClient } from "@/lib/supabase/server"; import { Card, CardContent, Badge } from "poyraz-ui/atoms"; -import { FolderKanban, CheckCircle2, Clock, Activity, Wallet, BarChart } from "lucide-react"; +import { FolderKanban, CheckCircle2, Clock, Activity, BarChart } from "lucide-react"; import Link from "next/link"; import { format } from "date-fns"; import { tr } from "date-fns/locale"; @@ -32,7 +32,7 @@ export default async function PortalDashboardPage() { // 2. Get Projects const { data: projectsData } = await supabase .from("projects") - .select("id, name, status, progress, due_date, budget_amount, currency, created_at") + .select("id, name, status, progress, due_date, created_at") .eq("client_id", clientData.id) .order("created_at", { ascending: false }); @@ -41,17 +41,8 @@ export default async function PortalDashboardPage() { const activeProjects = projects.filter(p => p.status !== 'completed' && p.status !== 'cancelled'); const completedProjects = projects.filter(p => p.status === 'completed'); - const totalBudget = activeProjects.reduce((sum, p) => sum + (Number(p.budget_amount) || 0), 0); const avgProgress = projects.length > 0 ? (projects.reduce((sum, p) => sum + (p.progress || 0), 0) / projects.length).toFixed(0) : "0"; - const formatCurrency = (val: number) => { - return new Intl.NumberFormat("tr-TR", { - style: "currency", - currency: projects[0]?.currency || "USD", - maximumFractionDigits: 0, - }).format(val); - }; - return (
{/* Header */} @@ -66,18 +57,17 @@ export default async function PortalDashboardPage() { Müşteri Paneli

- Hoş geldiniz, {clientData.name}. Aktif projelerinizi, ilerlemeleri ve bütçe durumunuzu buradan takip edin. + Hoş geldiniz, {clientData.name}. Aktif projelerinizi ve ilerlemeleri buradan takip edin.

{/* KPI Cards */} -
+
-
{/* Projects */} @@ -146,13 +136,12 @@ function StatCard({ label: string; value: string; icon: any; - tone: "green" | "blue" | "amber" | "red"; + tone: "green" | "blue" | "amber"; }) { const toneClass = { green: "bg-emerald-50 text-emerald-700", blue: "bg-blue-50 text-blue-700", amber: "bg-amber-50 text-amber-700", - red: "bg-primary/10 text-primary", }[tone]; return ( diff --git a/app/portal/projects/[id]/page.tsx b/app/portal/projects/[id]/page.tsx index d501e67..60cccc5 100644 --- a/app/portal/projects/[id]/page.tsx +++ b/app/portal/projects/[id]/page.tsx @@ -23,7 +23,7 @@ export default async function PortalProjectPage({ params }: { params: Promise<{ // 2. Get Project const { data: project, error } = await supabase .from("projects") - .select("*") + .select("id, name, description, status, progress, due_date, revision_quota") .eq("id", id) .eq("client_id", clientData.id) .single(); diff --git a/app/portal/projects/page.tsx b/app/portal/projects/page.tsx index fd37954..a38296e 100644 --- a/app/portal/projects/page.tsx +++ b/app/portal/projects/page.tsx @@ -27,7 +27,7 @@ export default async function PortalProjectsPage() { const { data: projectsData } = await supabase .from("projects") - .select("id, name, status, progress, due_date, budget_amount, currency") + .select("id, name, status, progress, due_date") .eq("client_id", clientData.id) .order("created_at", { ascending: false });