@@ -47,14 +47,41 @@ export async function createProject(name: string) {
4747}
4848
4949export async function listProjects ( ) {
50- return db . select ( ) . from ( projects ) . orderBy ( projects . createdAt ) ;
50+ const projectList = await db . select ( ) . from ( projects ) . orderBy ( projects . createdAt ) ;
51+
52+ const projectsWithCounts = await Promise . all (
53+ projectList . map ( async ( project ) => {
54+ const serviceCount = await db
55+ . select ( { count : services . id } )
56+ . from ( services )
57+ . where ( eq ( services . projectId , project . id ) ) ;
58+ return {
59+ ...project ,
60+ serviceCount : serviceCount . length ,
61+ } ;
62+ } )
63+ ) ;
64+
65+ return projectsWithCounts ;
5166}
5267
5368export async function getProject ( id : string ) {
5469 const results = await db . select ( ) . from ( projects ) . where ( eq ( projects . id , id ) ) ;
5570 return results [ 0 ] || null ;
5671}
5772
73+ export async function getProjectBySlug ( slug : string ) {
74+ const results = await db . select ( ) . from ( projects ) . where ( eq ( projects . slug , slug ) ) ;
75+ return results [ 0 ] || null ;
76+ }
77+
78+ async function revalidateProject ( projectId : string ) {
79+ const project = await getProject ( projectId ) ;
80+ if ( project ) {
81+ revalidatePath ( `/dashboard/projects/${ project . slug } ` ) ;
82+ }
83+ }
84+
5885export async function deleteProject ( id : string ) {
5986 await db . delete ( projects ) . where ( eq ( projects . id , id ) ) ;
6087 revalidatePath ( "/dashboard" ) ;
@@ -84,7 +111,7 @@ export async function createService(
84111 } ) ;
85112 }
86113
87- revalidatePath ( `/dashboard/projects/ ${ projectId } ` ) ;
114+ await revalidateProject ( projectId ) ;
88115 return { id, name, image, ports } ;
89116}
90117
@@ -143,7 +170,7 @@ export async function deleteService(serviceId: string) {
143170 await db . delete ( secrets ) . where ( eq ( secrets . serviceId , serviceId ) ) ;
144171 await db . delete ( services ) . where ( eq ( services . id , serviceId ) ) ;
145172
146- revalidatePath ( `/dashboard/projects/ ${ service . projectId } ` ) ;
173+ await revalidateProject ( service . projectId ) ;
147174 return { success : true } ;
148175}
149176
@@ -238,7 +265,7 @@ export async function updateServicePorts(serviceId: string, changes: PortChange[
238265 await deployService ( serviceId , placements ) ;
239266 }
240267
241- revalidatePath ( `/dashboard/projects/ ${ service . projectId } ` ) ;
268+ await revalidateProject ( service . projectId ) ;
242269 return { success : true , redeployed : runningDeployments . length > 0 } ;
243270}
244271
@@ -420,7 +447,7 @@ export async function deployService(serviceId: string, placements: ServerPlaceme
420447 }
421448 }
422449
423- revalidatePath ( `/dashboard/projects/ ${ service . projectId } ` ) ;
450+ await revalidateProject ( service . projectId ) ;
424451 return { deploymentIds, replicaCount : totalReplicas } ;
425452}
426453
@@ -452,7 +479,7 @@ export async function deleteDeployment(deploymentId: string) {
452479
453480 const service = await getService ( dep . serviceId ) ;
454481 if ( service ) {
455- revalidatePath ( `/dashboard/projects/ ${ service . projectId } ` ) ;
482+ await revalidateProject ( service . projectId ) ;
456483 }
457484
458485 return { success : true } ;
@@ -491,7 +518,7 @@ export async function stopDeployment(deploymentId: string) {
491518
492519 const service = await getService ( dep . serviceId ) ;
493520 if ( service ) {
494- revalidatePath ( `/dashboard/projects/ ${ service . projectId } ` ) ;
521+ await revalidateProject ( service . projectId ) ;
495522 }
496523
497524 return { success : true } ;
0 commit comments