Skip to content

Commit 9a40ed1

Browse files
committed
refactor(pagination): Add paginationAdapter and update API services to use it
1 parent 40fa55b commit 9a40ed1

4 files changed

Lines changed: 31 additions & 42 deletions

File tree

src/lib/pagination.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export interface PaginationParams {
2+
page?: number;
3+
limit?: number;
4+
search?: string;
5+
}
6+
7+
export function paginationAdapter(params: PaginationParams & object | undefined) {
8+
if (!params) {
9+
return params;
10+
}
11+
return {
12+
...params,
13+
skip: params.page ? (params.page - 1) * (params.limit || 10) : undefined,
14+
limit: params.limit,
15+
search: params.search,
16+
};
17+
}

src/services/apis/precipitation.api.ts

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,14 @@
1+
import { paginationAdapter, PaginationParams } from "@/lib/pagination";
12
import { apiService } from "@/services/api.service";
2-
import {
3-
StationCreate,
4-
StationRead,
5-
StationUpdate,
6-
StationPagination,
7-
RainfallRecordCreate,
8-
RainfallRecordRead,
9-
RainfallRecordUpdate,
10-
RainfallRecordPagination,
11-
S2SFileRead,
12-
S2SFileUpdate,
13-
S2SFilePagination,
14-
S2SFileUpload,
15-
} from "@/types/precipitation";
3+
import { RainfallRecordCreate, RainfallRecordPagination, RainfallRecordRead, RainfallRecordUpdate, S2SFilePagination, S2SFileRead, S2SFileUpdate, S2SFileUpload, StationCreate, StationPagination, StationRead, StationUpdate } from "@/types/precipitation";
164
import { storageApi } from "./storage.api";
175

18-
export interface PaginationParams {
19-
page?: number;
20-
limit?: number;
21-
search?: string;
22-
}
23-
246
// Station API Functions
257
export const precipitationApi = {
268
// Stations
279
stations: {
2810
list: (params?: PaginationParams) =>
29-
apiService.get<StationPagination>("/precipitation/stations/", { params }),
11+
apiService.get<StationPagination>("/precipitation/stations/", { params: paginationAdapter(params) }),
3012

3113
create: (data: StationCreate) =>
3214
apiService.post<StationRead>("/precipitation/stations/", data),
@@ -44,7 +26,7 @@ export const precipitationApi = {
4426
// Rainfall Records
4527
rainfallRecords: {
4628
list: (params?: PaginationParams & { station_id?: number; start_date?: string; end_date?: string }) =>
47-
apiService.get<RainfallRecordPagination>("/precipitation/rainfall-records/", { params }),
29+
apiService.get<RainfallRecordPagination>("/precipitation/rainfall-records/", { params: paginationAdapter(params) }),
4830

4931
create: (data: RainfallRecordCreate) =>
5032
apiService.post<RainfallRecordRead>("/precipitation/rainfall-records/", data),
@@ -59,7 +41,7 @@ export const precipitationApi = {
5941
// S2S Files
6042
s2sFiles: {
6143
list: (params?: PaginationParams & { data_type?: string; start_date?: string; end_date?: string }) =>
62-
apiService.get<S2SFilePagination>("/precipitation/s2s-files/", { params }),
44+
apiService.get<S2SFilePagination>("/precipitation/s2s-files/", { params: paginationAdapter(params) }),
6345

6446
create: async (data: S2SFileUpload, onProgress?: (progress: number) => void) => {
6547
if (data.file) {

src/services/apis/reservoirs.api.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,14 @@ import {
1414
ReservoirOperationFileUpload,
1515
} from "@/types/reservoirs";
1616
import { storageApi } from "./storage.api";
17-
18-
export interface PaginationParams {
19-
page?: number;
20-
limit?: number;
21-
search?: string;
22-
}
17+
import { paginationAdapter, PaginationParams } from "@/lib/pagination";
2318

2419
// Reservoirs API Functions
2520
export const reservoirsApi = {
2621
// Reservoirs
2722
reservoirs: {
2823
list: (params?: PaginationParams & { status?: string; location?: string }) =>
29-
apiService.get<ReservoirPagination>("/reservoirs/reservoirs/", { params }),
24+
apiService.get<ReservoirPagination>("/reservoirs/reservoirs/", { params: paginationAdapter(params) }),
3025

3126
create: (data: ReservoirCreate) =>
3227
apiService.post<ReservoirRead>("/reservoirs/reservoirs/", data),
@@ -44,7 +39,7 @@ export const reservoirsApi = {
4439
// Reservoir Operations
4540
operations: {
4641
list: (params?: PaginationParams & { reservoir_id?: number; start_date?: string; end_date?: string }) =>
47-
apiService.get<ReservoirOperationPagination>("/reservoirs/reservoir-operations/", { params }),
42+
apiService.get<ReservoirOperationPagination>("/reservoirs/reservoir-operations/", { params: paginationAdapter(params) }),
4843

4944
create: (data: ReservoirOperationCreate) =>
5045
apiService.post<ReservoirOperationRead>("/reservoirs/reservoir-operations/", data),
@@ -59,7 +54,7 @@ export const reservoirsApi = {
5954
// Reservoir Operation Files
6055
operationFiles: {
6156
list: (params?: PaginationParams & { reservoir_id?: number; data_type?: string; start_date?: string; end_date?: string }) =>
62-
apiService.get<ReservoirOperationFilePagination>("/reservoirs/reservoir-operation-files/", { params }),
57+
apiService.get<ReservoirOperationFilePagination>("/reservoirs/reservoir-operation-files/", { params: paginationAdapter(params) }),
6358

6459
create: async (data: ReservoirOperationFileUpload, onProgress?: (progress: number) => void) => {
6560
if (data.file) {

src/services/apis/storms.api.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,14 @@ import {
1818
StormUpdate,
1919
} from "@/types/storms";
2020
import { storageApi } from "./storage.api";
21-
22-
export interface PaginationParams {
23-
page?: number;
24-
limit?: number;
25-
search?: string;
26-
}
21+
import { paginationAdapter, PaginationParams } from "@/lib/pagination";
2722

2823
// Storms API Functions
2924
export const stormsApi = {
3025
// Storms
3126
storms: {
3227
list: (params?: PaginationParams) =>
33-
apiService.get<PaginatedResult<StormRead>>("/storms/storms/", { params }),
28+
apiService.get<PaginatedResult<StormRead>>("/storms/storms/", { params: paginationAdapter(params) }),
3429

3530
create: (data: StormCreate) =>
3631
apiService.post<StormRead>("/storms/storms/", data),
@@ -101,7 +96,7 @@ export const stormsApi = {
10196
// NWP Data
10297
nwpData: {
10398
list: (params?: PaginationParams & { storm_id?: number }) =>
104-
apiService.get<PaginatedResult<NWPDataRead>>("/storms/nwp-data/", { params }),
99+
apiService.get<PaginatedResult<NWPDataRead>>("/storms/nwp-data/", { params: paginationAdapter(params) }),
105100

106101
create: async (data: NWPDataCreate & { file?: File }, onProgress?: (progress: number) => void) => {
107102
if (data.file) {
@@ -153,7 +148,7 @@ export const stormsApi = {
153148
// HRES Data
154149
hresData: {
155150
list: (params?: PaginationParams & { storm_id?: number }) =>
156-
apiService.get<PaginatedResult<HRESDataRead>>("/storms/hres-data/", { params }),
151+
apiService.get<PaginatedResult<HRESDataRead>>("/storms/hres-data/", { params: paginationAdapter(params) }),
157152

158153
create: async (data: HRESDataCreate & { file?: File }, onProgress?: (progress: number) => void) => {
159154
if (data.file) {
@@ -204,7 +199,7 @@ export const stormsApi = {
204199

205200
stormLifecycle: {
206201
list: (params?: PaginationParams & { storm_ids?: number[]; start_date?: string; end_date?: string }) =>
207-
apiService.get<PaginatedResult<StormLifecycleRead>>("/storms/storm-lifecycle/", { params }),
202+
apiService.get<PaginatedResult<StormLifecycleRead>>("/storms/storm-lifecycle/", { params: paginationAdapter(params) }),
208203

209204
create: (data: StormLifecycleCreate) =>
210205
apiService.post<StormLifecycleRead>("/storms/storm-lifecycle/", data),

0 commit comments

Comments
 (0)