feat(backend): migrate freelancer and portal runtimes

This commit is contained in:
poyrazavsever
2026-07-17 00:16:38 +03:00
parent 561af11b70
commit 678c0236db
41 changed files with 5293 additions and 2324 deletions
+32 -25
View File
@@ -1,34 +1,41 @@
import { createClient } from "@/lib/supabase/server";
import { ClientDetailClient, type ClientDetailData, type ClientActivity } from "./client-detail-client";
import { notFound } from "next/navigation";
import { ClientDetailClient, type ClientDetailData, type ClientActivity } from "./client-detail-client";
import { DomainError } from "@/server/domain/errors";
import { requireFreelancerBackend } from "@/server/web/freelancer";
export default async function ClientDetailPage({ params }: { params: Promise<{ id: string }> }) {
const { id } = await params;
const supabase = await createClient();
const { data: { user } } = await supabase.auth.getUser();
const { actor, service } = await requireFreelancerBackend();
if (!user) return null;
let data: { client: ClientDetailData; activities: ClientActivity[] };
try {
const row = service.getClient(actor, id);
const client: ClientDetailData = {
id: row.id,
name: row.name,
company_name: row.companyName,
email: row.email,
phone: row.phone,
website: row.website,
pipeline_stage: row.pipelineStage,
status: row.status,
notes: row.notes,
client_auth_id: row.authUserId,
};
const activities: ClientActivity[] = service.listClientActivities(actor, id).map((activity) => ({
id: activity.id,
type: activity.type,
title: activity.title,
content: activity.content,
activity_date: activity.activityDate.toISOString(),
created_at: activity.createdAt.toISOString(),
}));
const { data: clientData, error } = await supabase
.from("clients")
.select("id, name, company_name, email, phone, website, pipeline_stage, status, notes, client_auth_id")
.eq("id", id)
.eq("user_id", user.id)
.single();
if (error || !clientData) {
notFound();
data = { client, activities };
} catch (error) {
if (error instanceof DomainError && error.code === "NOT_FOUND") notFound();
throw error;
}
const { data: activitiesData } = await supabase
.from("client_activities")
.select("id, type, title, content, activity_date, created_at")
.eq("client_id", id)
.eq("user_id", user.id)
.order("activity_date", { ascending: false });
const client: ClientDetailData = clientData as ClientDetailData;
const activities: ClientActivity[] = (activitiesData || []) as ClientActivity[];
return <ClientDetailClient client={client} activities={activities} />;
return <ClientDetailClient client={data.client} activities={data.activities} />;
}