Skip to content

Commit 3ee496b

Browse files
author
Marvin Zhang
committed
feat: refactor project API interactions to use ProjectApiClient for improved consistency and error handling
1 parent 1acdd04 commit 3ee496b

File tree

3 files changed

+9
-19
lines changed

3 files changed

+9
-19
lines changed

packages/web/app/lib/api/project-api-client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* and response format processing.
77
*/
88

9-
import { ApiClient, ApiError } from './api-client.js';
9+
import { ApiClient, ApiError } from './api-client';
1010
import type { Project } from '@codervisor/devlog-core';
1111

1212
/**

packages/web/app/projects/ProjectListPage.tsx

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
} from 'lucide-react';
2929
import { toast } from 'sonner';
3030
import { RealtimeEventType } from '@/lib';
31+
import { projectApiClient } from '@/lib/api';
3132

3233
interface ProjectFormData {
3334
name: string;
@@ -67,19 +68,7 @@ export function ProjectListPage() {
6768
try {
6869
setCreating(true);
6970

70-
const response = await fetch('/api/projects', {
71-
method: 'POST',
72-
headers: {
73-
'Content-Type': 'application/json',
74-
},
75-
body: JSON.stringify(formData),
76-
});
77-
78-
if (!response.ok) {
79-
throw new Error('Failed to create project');
80-
}
81-
82-
const newProject = await response.json();
71+
const newProject = await projectApiClient.create(formData);
8372
toast.success(`Project "${newProject.name}" created successfully`);
8473

8574
setIsModalVisible(false);

packages/web/app/stores/project-store.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import { create } from 'zustand';
44
import { subscribeWithSelector } from 'zustand/middleware';
5-
import { apiClient, debounce, handleApiError } from '@/lib';
5+
import { debounce, handleApiError } from '@/lib';
6+
import { projectApiClient } from '@/lib/api';
67
import { Project } from '@codervisor/devlog-core';
78
import { DataContext, getDefaultDataContext } from '@/stores/base';
89

@@ -46,7 +47,7 @@ export const useProjectStore = create<ProjectState>()(
4647
error: null,
4748
},
4849
}));
49-
const currentProject = await apiClient.get<Project>(`/api/projects/${currentProjectName}`);
50+
const currentProject = await projectApiClient.get(currentProjectName);
5051
set((state) => ({
5152
currentProjectContext: {
5253
...state.currentProjectContext,
@@ -99,7 +100,7 @@ export const useProjectStore = create<ProjectState>()(
99100
error: null,
100101
},
101102
}));
102-
const projectsList = await apiClient.get<Project[]>('/api/projects');
103+
const projectsList = await projectApiClient.list();
103104
set((state) => ({
104105
projectsContext: {
105106
...state.projectsContext,
@@ -141,7 +142,7 @@ export const useProjectStore = create<ProjectState>()(
141142

142143
updateProject: async (name: string, updates: Partial<Project>) => {
143144
try {
144-
const updatedProject = await apiClient.put<Project>(`/api/projects/${name}`, updates);
145+
const updatedProject = await projectApiClient.update(name, updates);
145146

146147
// Update current project if it's the one being updated
147148
const currentProjectName = get().currentProjectName;
@@ -184,7 +185,7 @@ export const useProjectStore = create<ProjectState>()(
184185

185186
deleteProject: async (name: string) => {
186187
try {
187-
await apiClient.delete(`/api/projects/${name}`);
188+
await projectApiClient.delete(name);
188189

189190
// Clear current project if it's the one being deleted
190191
const currentProjectName = get().currentProjectName;

0 commit comments

Comments
 (0)