chore: prettier format

This commit is contained in:
rstubryan
2025-11-13 15:35:15 +07:00
59 changed files with 4581 additions and 892 deletions
+125
View File
@@ -0,0 +1,125 @@
import { dummyMarketings } from '@/dummy/marketing.dummy';
import { sleep } from '@/lib/helper';
import { BaseApiService } from '@/services/api/base';
import { httpClient } from '@/services/http/client';
import { BaseApiResponse } from '@/types/api/api-general';
import {
Marketing,
CreateMarketingPayload,
UpdateMarketingPayload,
} from '@/types/api/marketing/marketing';
export class MarketingService extends BaseApiService<
Marketing,
CreateMarketingPayload,
UpdateMarketingPayload
> {
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'
): Promise<BaseApiResponse<{ message: string }> | undefined> {
try {
const path = `${this.basePath}/approvals`;
return await httpClient<BaseApiResponse<{ message: string }>>(path, {
method: 'POST',
body: {
action: action,
approval_ids: [id],
notes: `${action} marketing ${id}`,
},
});
} catch (error) {
console.error('Error approve marketing:', error);
return undefined;
}
}
/**
* Bulk approve
*/
async bulkApprovals(
ids: number[],
action: 'approve' | 'reject'
): Promise<BaseApiResponse<{ message: string }> | undefined> {
try {
const path = `${this.basePath}/approvals`;
return await httpClient<BaseApiResponse<{ message: string }>>(path, {
method: 'POST',
body: {
action: action,
approval_ids: ids,
notes: `${action} marketing ${ids.join(', ')}`,
},
});
} catch (error) {
console.error('Error bulk approve marketing:', error);
return undefined;
}
}
}
export const MarketingApi = new MarketingService('/marketing');
+6 -20
View File
@@ -1,32 +1,18 @@
import { BaseApiService } from './base';
import {
CreateProjectFlockPayload,
ProjectFlock,
UpdateProjectFlockPayload,
} from '@/types/api/production/project-flock';
import {
CreateRecordingPayload,
Recording,
UpdateRecordingPayload,
} from '@/types/api/production/recording';
import {
Chickin,
CreateChickinPayload,
UpdateChickinPayload,
} from '@/types/api/production/chickin';
import { ProjectFlockKandang } from '@/types/api/production/project-flock-kandang';
export const ProjectFlockApi = new BaseApiService<
ProjectFlock,
CreateProjectFlockPayload,
UpdateProjectFlockPayload
>('/production/project-flocks');
export const ProjectFlockKandangApi = new BaseApiService<
ProjectFlockKandang,
unknown,
unknown
>('/production/project-flock-kandangs');
export const RecordingApi = new BaseApiService<
Recording,
CreateRecordingPayload,
UpdateRecordingPayload
>('/production/recordings');
export const ChickinApi = new BaseApiService<
Chickin,
CreateChickinPayload,
UpdateChickinPayload
>('/production/chickins');
+43
View File
@@ -0,0 +1,43 @@
import {
Chickin,
CreateChickinPayload,
UpdateChickinPayload,
} from '@/types/api/production/chickin';
import { BaseApiService } from '../base';
import { BaseApiResponse } from '@/types/api/api-general';
import { httpClient } from '@/services/http/client';
export class ChickinService extends BaseApiService<
Chickin,
CreateChickinPayload,
UpdateChickinPayload
> {
constructor(basePath: string = '/production/chickins') {
super(basePath);
}
/**
* Approve single marketing data
*/
async singleApproval(
id: number,
action: 'APPROVED' | 'REJECTED'
): Promise<BaseApiResponse<{ message: string }> | undefined> {
try {
const path = `${this.basePath}/approvals`;
return await httpClient<BaseApiResponse<{ message: string }>>(path, {
method: 'POST',
body: {
action: action,
approvable_ids: [id],
notes: `${action} chickin ${id}`,
},
});
} catch (error) {
console.error('Error approve chickin:', error);
return undefined;
}
}
}
export const ChickinApi = new ChickinService('/production/chickins');
@@ -0,0 +1,203 @@
import {
CreateProjectFlockPayload,
ProjectFlock,
UpdateProjectFlockPayload,
} from '@/types/api/production/project-flock';
import { BaseApiService } from '../base';
import {
BaseApiResponse,
BaseGroupedApproval,
ErrorApiResponse,
GroupedApprovals,
SuccessApiResponse,
} from '@/types/api/api-general';
import { sleep } from '@/lib/helper';
import { httpClient } from '@/services/http/client';
import axios from 'axios';
import { Flock } from '@/types/api/master-data/flock';
import { Kandang } from '@/types/api/master-data/kandang';
import { RequestOptions } from '@/services/http/base';
export class ProjectFlockService extends BaseApiService<
ProjectFlock,
CreateProjectFlockPayload,
UpdateProjectFlockPayload
> {
constructor(basePath: string = '') {
super(basePath);
}
/**
* Get Approval Lines
*/
async getApprovalLines(
id: number
): Promise<
| BaseApiResponse<BaseGroupedApproval[]>
| ErrorApiResponse
| SuccessApiResponse<BaseGroupedApproval[]>
| undefined
> {
const path = `/approvals`;
try {
return await httpClient<SuccessApiResponse<BaseGroupedApproval[]>>(path, {
method: 'GET',
query: {
module_id: id,
module_name: 'PROJECT_FLOCKS',
group_step_number: true,
},
} as RequestOptions);
} catch (error) {
if (axios.isAxiosError<BaseApiResponse>(error)) {
return error.response?.data as ErrorApiResponse;
} else {
return undefined;
}
}
}
/**
* Lookup for Project Flock Kandang
*/
async lookupProjectFlockKandang(
projectFlockId: number,
kandangId: number
): Promise<
| BaseApiResponse<
| ErrorApiResponse
| SuccessApiResponse<{
id: number;
kandang_id: Kandang;
project_flock: ProjectFlock;
available_quantity: number;
}>
>
| undefined
> {
try {
const path = `${this.basePath}/kandangs/lookup`;
return await httpClient<
BaseApiResponse<
SuccessApiResponse<{
id: number;
kandang_id: Kandang;
project_flock: ProjectFlock;
available_quantity: number;
}>
>
>(path, {
method: 'GET',
body: {
project_flock_id: projectFlockId,
kandang_id: kandangId,
},
});
} catch (error) {
if (axios.isAxiosError<BaseApiResponse<ErrorApiResponse>>(error)) {
return error.response?.data;
} else {
return undefined;
}
}
}
/**
* Get Next Period of Project Flock
*/
async getNextPeriod(id: string): Promise<
| BaseApiResponse<{
flock: Flock;
next_period: number;
}>
| ErrorApiResponse
| SuccessApiResponse<{
flock: Flock;
next_period: number;
}>
| undefined
> {
try {
const path = `${this.basePath}/kandangs/${id}`;
return await httpClient<
SuccessApiResponse<{
flock: Flock;
next_period: number;
}>
>(path, {
method: 'GET',
});
} catch (error) {
if (axios.isAxiosError<BaseApiResponse<ErrorApiResponse>>(error)) {
return error.response?.data as ErrorApiResponse;
} else {
return undefined;
}
}
}
/**
* Approve single Project Flock
*/
async approve(
id: number
): Promise<BaseApiResponse<{ message: string }> | undefined> {
return await this.bulkApprovalAction([id], 'APPROVED');
}
/**
* Reject single Project Flock
*/
async reject(
id: number
): Promise<BaseApiResponse<{ message: string }> | undefined> {
return await this.bulkApprovalAction([id], 'REJECTED');
}
/**
* Approve Bulk Project Flock
*/
async bulkApprove(
ids: number[]
): Promise<BaseApiResponse<{ message: string }> | undefined> {
return await this.bulkApprovalAction(ids, 'APPROVED');
}
/**
* Reject Bulk Project Flock
*/
async bulkReject(
ids: number[]
): Promise<BaseApiResponse<{ message: string }> | undefined> {
return await this.bulkApprovalAction(ids, 'REJECTED');
}
/**
* Approve Bulk Project Flock
*/
async bulkApprovalAction(
ids: number[],
action: 'APPROVED' | 'REJECTED'
): Promise<BaseApiResponse<{ message: string }> | undefined> {
try {
const path = `${this.basePath}/approvals`;
return await httpClient<BaseApiResponse<{ message: string }>>(path, {
method: 'POST',
body: {
action: action,
approvable_ids: ids,
notes: `Bulk ${action} Project Flock ${ids.join(', ')}`,
},
});
} catch (error) {
if (axios.isAxiosError<BaseApiResponse<{ message: string }>>(error)) {
return error.response?.data;
} else {
return undefined;
}
}
}
}
export const ProjectFlockApi = new ProjectFlockService(
'/production/project-flocks'
);