Skip to content

Commit d5139a2

Browse files
ZabilsyaZabilsya
andauthored
[DOP-20065] transfer list and transfer detail (#40)
Co-authored-by: Zabilsya <[email protected]>
1 parent 074b066 commit d5139a2

File tree

48 files changed

+620
-28
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+620
-28
lines changed

.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
API_URL="https://localhost:8000/v1/"
1+
API_URL="http://localhost:8000/v1/"

src/app/config/router/instance.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { CreateGroupPage, GroupDetailPage, GroupListPage, UpdateGroupPage } from
77
import { AuthProvider } from '@entities/auth';
88
import { CreateQueuePage, QueueDetailPage, QueueListPage, UpdateQueuePage } from '@pages/queue';
99
import { ConnectionDetailPage, ConnectionListPage } from '@pages/connection';
10+
import { TransferDetailPage, TransferListPage } from '@pages/transfer';
1011

1112
import { ErrorBoundary, NotFoundError } from '../errorBoundary';
1213

@@ -86,6 +87,14 @@ export const router = createBrowserRouter([
8687
path: '/connections/:id',
8788
element: <ConnectionDetailPage />,
8889
},
90+
{
91+
path: '/transfers',
92+
element: <TransferListPage />,
93+
},
94+
{
95+
path: '/transfers/:id',
96+
element: <TransferDetailPage />,
97+
},
8998
],
9099
},
91100
{

src/app/styles/antd.less

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
border-radius: 0;
44
}
55

6+
.ant-descriptions {
7+
width: 100%;
8+
}
9+
610
.ant-descriptions-item-label {
7-
width: 300px;
11+
width: 250px;
812
font-weight: 700;
913
}
1014

src/entities/connection/api/types.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PaginationRequest } from '@shared/types';
1+
import { ConnectionType, PaginationRequest } from '@shared/types';
22

33
export type Connection = {
44
id: number;
@@ -11,33 +11,33 @@ type ConnectionData = ConnectionHive | ConnectionHdfs | ConnectionOracle | Conne
1111

1212
interface ConnectionHive {
1313
auth_data: {
14-
type: 'hive';
14+
type: ConnectionType.HIVE;
1515
user: string;
1616
};
1717
connection_data: {
18-
type: 'hive';
18+
type: ConnectionType.HIVE;
1919
cluster: string;
2020
};
2121
}
2222

2323
interface ConnectionHdfs {
2424
auth_data: {
25-
type: 'hdfs';
25+
type: ConnectionType.HDFS;
2626
user: string;
2727
};
2828
connection_data: {
29-
type: 'hdfs';
29+
type: ConnectionType.HDFS;
3030
cluster: string;
3131
};
3232
}
3333

3434
interface ConnectionOracle {
3535
auth_data: {
36-
type: 'oracle';
36+
type: ConnectionType.ORACLE;
3737
user: string;
3838
};
3939
connection_data: {
40-
type: 'oracle';
40+
type: ConnectionType.ORACLE;
4141
host: string;
4242
port: number;
4343
service_name: string | null;
@@ -48,11 +48,11 @@ interface ConnectionOracle {
4848

4949
interface ConnectionPostgres {
5050
auth_data: {
51-
type: 'postgres';
51+
type: ConnectionType.POSTGRES;
5252
user: string;
5353
};
5454
connection_data: {
55-
type: 'postgres';
55+
type: ConnectionType.POSTGRES;
5656
host: string;
5757
port: number;
5858
database_name: string;
@@ -62,11 +62,11 @@ interface ConnectionPostgres {
6262

6363
interface ConnectionS3 {
6464
auth_data: {
65-
type: 's3';
65+
type: ConnectionType.S3;
6666
access_key: string;
6767
};
6868
connection_data: {
69-
type: 's3';
69+
type: ConnectionType.S3;
7070
host: string;
7171
bucket: string;
7272
bucket_style: 'domain' | 'path';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './useGetTransfer';
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { useSuspenseQuery, UseSuspenseQueryResult } from '@tanstack/react-query';
2+
3+
import { transferService } from '../../transferService';
4+
import { GetTransferRequest, Transfer } from '../../types';
5+
import { TransferQueryKey } from '../../keys';
6+
7+
/** Hook for getting transfer info from backend */
8+
export const useGetTransfer = ({ id }: GetTransferRequest): UseSuspenseQueryResult<Transfer> => {
9+
return useSuspenseQuery({
10+
queryKey: [TransferQueryKey.GET_TRANSFER, id],
11+
queryFn: () => transferService.getTransfer({ id }),
12+
});
13+
};

src/entities/transfer/api/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export * from './transferService';
2+
export * from './types';
3+
export * from './keys';
4+
export * from './hooks';
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export const TransferQueryKey = {
2+
GET_TRANSFERS: 'GET_TRANSFERS',
3+
GET_TRANSFER: 'GET_TRANSFER',
4+
} as const;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { axiosInstance } from '@shared/config';
2+
import { PaginationResponse } from '@shared/types';
3+
4+
import { GetTransferRequest, GetTransfersRequest, Transfer } from './types';
5+
6+
export const transferService = {
7+
getTransfers: (params: GetTransfersRequest): Promise<PaginationResponse<Transfer>> => {
8+
return axiosInstance.get('transfers', { params });
9+
},
10+
11+
getTransfer: ({ id }: GetTransferRequest): Promise<Transfer> => {
12+
return axiosInstance.get(`transfers/${id}`);
13+
},
14+
};

src/entities/transfer/api/types.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { ConnectionType, FileFormat, FileFormatCsv, FileFormatJsonLine, PaginationRequest } from '@shared/types';
2+
3+
export interface Transfer {
4+
id: number;
5+
group_id: number;
6+
name: string;
7+
source_connection_id: number;
8+
target_connection_id: number;
9+
description: string;
10+
is_scheduled: boolean;
11+
schedule: string;
12+
queue_id: number;
13+
source_params:
14+
| TransferParamsHive
15+
| TransferParamsOracle
16+
| TransferParamsPostgres
17+
| TransferSourceParamsHdfs
18+
| TransferSourceParamsS3;
19+
target_params:
20+
| TransferParamsHive
21+
| TransferParamsOracle
22+
| TransferParamsPostgres
23+
| TransferTargetParamsHdfs
24+
| TransferTargetParamsS3;
25+
strategy_params: TransferStrategyParams;
26+
}
27+
28+
interface TransferStrategyParams {
29+
type: 'full' | 'incremental';
30+
}
31+
32+
interface TransferParamsHive {
33+
type: ConnectionType.HIVE;
34+
table_name: string;
35+
}
36+
37+
interface TransferParamsOracle {
38+
type: ConnectionType.ORACLE;
39+
table_name: string;
40+
}
41+
42+
interface TransferParamsPostgres {
43+
type: ConnectionType.POSTGRES;
44+
table_name: string;
45+
}
46+
47+
interface TransferParamsHdfs {
48+
type: ConnectionType.HDFS;
49+
directory_path: string;
50+
options: object;
51+
}
52+
53+
interface TransferSourceParamsHdfs extends TransferParamsHdfs {
54+
file_format: FileFormat;
55+
}
56+
57+
interface TransferTargetParamsHdfs extends TransferParamsHdfs {
58+
file_format: FileFormatCsv | FileFormatJsonLine;
59+
}
60+
61+
interface TransferParamsS3 {
62+
type: ConnectionType.S3;
63+
directory_path: string;
64+
options: object;
65+
}
66+
67+
interface TransferSourceParamsS3 extends TransferParamsS3 {
68+
file_format: FileFormat;
69+
}
70+
71+
interface TransferTargetParamsS3 extends TransferParamsS3 {
72+
file_format: FileFormatCsv | FileFormatJsonLine;
73+
}
74+
75+
export interface GetTransfersRequest extends PaginationRequest {
76+
group_id: number;
77+
}
78+
79+
export interface GetTransferRequest {
80+
id: number;
81+
}

0 commit comments

Comments
 (0)