feat(FE-177): refactor sales order management with new schema and API integration

This commit is contained in:
randy-ar
2025-11-14 15:52:58 +07:00
parent 10976452f5
commit 3fdb10ec7f
15 changed files with 280 additions and 222 deletions
+9 -66
View File
@@ -5,82 +5,25 @@ import { httpClient } from '@/services/http/client';
import { BaseApiResponse } from '@/types/api/api-general';
import {
Marketing,
CreateMarketingPayload,
UpdateMarketingPayload,
CreateSalesOrderPayload,
UpdateSalesOrderPayload,
} from '@/types/api/marketing/marketing';
export class MarketingService extends BaseApiService<
Marketing,
CreateMarketingPayload,
UpdateMarketingPayload
CreateSalesOrderPayload,
UpdateSalesOrderPayload
> {
constructor(basePath: string = '/marketing') {
super(basePath);
}
/**
* Override: Get all marketing data (dummy mode)
*/
override async getAllFetcher(
endpoint: string
): Promise<BaseApiResponse<Marketing[]>> {
// simulasi loading
await sleep(750);
// data dummy sementara
const DUMMY_MARKETING_DATA: BaseApiResponse<Marketing[]> = {
code: 200,
status: 'success',
message: 'Berhasil mengambil data marketing (dummy)',
data: dummyMarketings,
};
return DUMMY_MARKETING_DATA;
}
/**
* Override: Get single marketing data (dummy mode)
*/
override async getSingle(
id: number
): Promise<BaseApiResponse<Marketing> | undefined> {
// simulasi delay
await new Promise((res) => setTimeout(res, 500));
const marketing = dummyMarketings.find((marketing) => {
console.log('marketing', marketing);
console.log('id-m', marketing.id);
console.log('id-p', id);
console.log('id', marketing.id == id);
return marketing.id == id;
});
console.log('marketings', dummyMarketings);
console.log('marketing', marketing);
if (marketing) {
// misalnya fetch dari dummy
return {
code: 200,
status: 'success',
message: 'Data marketing berhasil diambil.',
data: marketing,
};
} else {
// jika tidak ditemukan
throw {
code: 404,
status: 'error',
message: 'Data marketing tidak ditemukan.',
};
}
}
/**
* Approve single marketing data
*/
async singleApproval(
id: number,
action: 'approve' | 'reject'
action: 'APPROVED' | 'REJECTED'
): Promise<BaseApiResponse<{ message: string }> | undefined> {
try {
const path = `${this.basePath}/approvals`;
@@ -88,7 +31,7 @@ export class MarketingService extends BaseApiService<
method: 'POST',
body: {
action: action,
approval_ids: [id],
approvable_ids: [id],
notes: `${action} marketing ${id}`,
},
});
@@ -103,7 +46,7 @@ export class MarketingService extends BaseApiService<
*/
async bulkApprovals(
ids: number[],
action: 'approve' | 'reject'
action: 'APPROVED' | 'REJECTED'
): Promise<BaseApiResponse<{ message: string }> | undefined> {
try {
const path = `${this.basePath}/approvals`;
@@ -111,7 +54,7 @@ export class MarketingService extends BaseApiService<
method: 'POST',
body: {
action: action,
approval_ids: ids,
approvable_ids: ids,
notes: `${action} marketing ${ids.join(', ')}`,
},
});
@@ -122,4 +65,4 @@ export class MarketingService extends BaseApiService<
}
}
export const MarketingApi = new MarketingService('/marketing');
export const MarketingApi = new MarketingService('/marketing/sales-orders');