diff --git a/frontend_management/pages/instructor/courses/create.vue b/frontend_management/pages/instructor/courses/create.vue new file mode 100644 index 00000000..9a915c95 --- /dev/null +++ b/frontend_management/pages/instructor/courses/create.vue @@ -0,0 +1,241 @@ + + + diff --git a/frontend_management/pages/instructor/courses/index.vue b/frontend_management/pages/instructor/courses/index.vue index 5b73b9eb..384a9dea 100644 --- a/frontend_management/pages/instructor/courses/index.vue +++ b/frontend_management/pages/instructor/courses/index.vue @@ -84,8 +84,15 @@ class="bg-white rounded-xl shadow-sm overflow-hidden hover:shadow-md transition-shadow" > -
- +
+ +
diff --git a/frontend_management/services/admin.service.ts b/frontend_management/services/admin.service.ts index 1f76636f..11e96517 100644 --- a/frontend_management/services/admin.service.ts +++ b/frontend_management/services/admin.service.ts @@ -185,7 +185,7 @@ export const adminService = { } const token = getAuthToken(); - const response = await $fetch('/api/admin/categories', { + const response = await $fetch('/api/categories', { baseURL: config.public.apiBaseUrl as string, headers: { Authorization: `Bearer ${token}` diff --git a/frontend_management/services/instructor.service.ts b/frontend_management/services/instructor.service.ts index 64e54188..8138c081 100644 --- a/frontend_management/services/instructor.service.ts +++ b/frontend_management/services/instructor.service.ts @@ -126,6 +126,54 @@ export const instructorService = { } }); + return response.data; + }, + + async createCourse(data: CreateCourseRequest): Promise { + const config = useRuntimeConfig(); + const useMockData = config.public.useMockData as boolean; + + if (useMockData) { + await new Promise(resolve => setTimeout(resolve, 500)); + return { + ...MOCK_COURSES[0], + id: Date.now(), + ...data, + price: String(data.price), // Convert number to string to match CourseResponse type + status: 'DRAFT', + created_at: new Date().toISOString(), + updated_at: new Date().toISOString() + } as CourseResponse; + } + + const token = getAuthToken(); + const response = await $fetch<{ code: number; data: CourseResponse }>('/api/instructors/courses', { + method: 'POST', + baseURL: config.public.apiBaseUrl as string, + headers: { + Authorization: `Bearer ${token}` + }, + body: { data } + }); + return response.data; } }; + +// Create course request +export interface CreateCourseRequest { + category_id: number; + title: { + en: string; + th: string; + }; + slug: string; + description: { + en: string; + th: string; + }; + thumbnail_url?: string | null; + price: number; + is_free: boolean; + have_certificate: boolean; +}