junh_eee(이준희)
7 months ago
216 changed files with 239 additions and 8987 deletions
Binary file not shown.
@ -1,161 +0,0 @@ |
|||||||
## REDUX NAMING |
|
||||||
|
|
||||||
```bash |
|
||||||
📦 module |
|
||||||
┣ 📂 _sample |
|
||||||
┃ ┣ 📂 actions Action 타입, 함수 |
|
||||||
┃ ┣ 📂 apis Api |
|
||||||
┃ ┣ 📂 models interface, Type |
|
||||||
┃ ┣ 📂 reducers Reducer 함수 |
|
||||||
┃ ┣ 📂 sagas Saga 함수 |
|
||||||
┃ ┣ 📜 index.ts |
|
||||||
|
|
||||||
// 폴더에는 index.ts 파일 하나만 작성한다. |
|
||||||
``` |
|
||||||
|
|
||||||
<br> |
|
||||||
|
|
||||||
## 📂 actions |
|
||||||
|
|
||||||
> Action 타입 |
|
||||||
|
|
||||||
- 대문자와 \_를 사용하여 상수 형태로 작성한다. |
|
||||||
- 구분자는 소문자로 작성한다. |
|
||||||
- 동사를 먼저 작성한다. |
|
||||||
- 비동기 요청 액션이 아닐 땐 `CLIENT_` 로 시작한다. |
|
||||||
|
|
||||||
> > 기본 규칙 |
|
||||||
> |
|
||||||
> - 목록 조회 `GET_[주체]_LIST` |
|
||||||
> - 상세 조회 `GET_[주체]_DETAIL` |
|
||||||
> - 생성/추가 `CREATE_[주체]` |
|
||||||
> - 수정/변경 `UPDATE_[주체]` |
|
||||||
> - 삭제 `DELETE_[주체]` |
|
||||||
> |
|
||||||
> > 동사 |
|
||||||
> |
|
||||||
> - SET, FIND, SEND, CHECK, REGISTER, CONFIRM ... |
|
||||||
> |
|
||||||
> > 명사 |
|
||||||
> |
|
||||||
> - LIST, DETAIL, LOG, APPROVAL ... |
|
||||||
|
|
||||||
```bash |
|
||||||
// 드론 목록 |
|
||||||
const GET_DRONE_LIST_REQUEST = 'sample/GET_DRONE_LIST_REQUEST'; |
|
||||||
|
|
||||||
// 지도 타입 |
|
||||||
const CLIENT_MAPTYPE = 'sample/CLIENT_MAPTYPE'; |
|
||||||
``` |
|
||||||
|
|
||||||
<br> |
|
||||||
|
|
||||||
> Action 함수 |
|
||||||
- 카멜케이스를 사용하여 작성한다. |
|
||||||
- 작성한 Action 타입을 참고하여 작성한다. |
|
||||||
|
|
||||||
```bash |
|
||||||
export const getDroneList = createAsyncAction( |
|
||||||
GET_DRONE_LIST_REQUEST, |
|
||||||
GET_DRONE_LIST_SUCCESS, |
|
||||||
GET_DRONE_LIST_FAILURE |
|
||||||
)(); |
|
||||||
|
|
||||||
export const clientMapType = createAction(CLIENT_MAPTYPE)(); |
|
||||||
``` |
|
||||||
|
|
||||||
<br> |
|
||||||
|
|
||||||
## 📂 apis |
|
||||||
|
|
||||||
- 변수명은 [주체] + API로 작성한다. |
|
||||||
- api는 Action 함수명과 동일하게 작성한다. |
|
||||||
- 특별한 경우가 아니면 return은 즉시 해준다. |
|
||||||
|
|
||||||
```bash |
|
||||||
export const sampleAPI = { |
|
||||||
getDroneList: async () => { |
|
||||||
return await axios.get('api/bas/dron/list....'); |
|
||||||
} |
|
||||||
} |
|
||||||
``` |
|
||||||
|
|
||||||
<br> |
|
||||||
|
|
||||||
## 📂 models |
|
||||||
|
|
||||||
- 모든 interface는 파스칼케이스를 사용하되, 약자인 I를 붙여서 작성한다. |
|
||||||
- Rq, Rs interface의 경우 I + Action명 + Rq or Rs로 작성한다. |
|
||||||
- 초기값의 경우 변수명을 init + [주체]로 작성한다. |
|
||||||
- 초기값의 interface는 State로 끝나도록 작성한다. |
|
||||||
|
|
||||||
```bash |
|
||||||
export const initSample: ISampleState = { |
|
||||||
droneList: undefined, |
|
||||||
droneCount: 0 |
|
||||||
} |
|
||||||
|
|
||||||
export interface ISampleState { |
|
||||||
droneList: IDrone[] | undefined; |
|
||||||
droneCount: number | 0; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IDrone { |
|
||||||
groupId: string; |
|
||||||
arcrftSno: number; |
|
||||||
.... |
|
||||||
} |
|
||||||
|
|
||||||
export interface IUpdateDroneRq { |
|
||||||
... |
|
||||||
} |
|
||||||
``` |
|
||||||
|
|
||||||
<br> |
|
||||||
|
|
||||||
## 📂 reducers |
|
||||||
|
|
||||||
- Reducer 함수는 카멜케이스를 사용하여 [주체] + Reducer 로 작성한다. |
|
||||||
|
|
||||||
```bash |
|
||||||
export const sampleReducer = createReducer<ISampleState, Actions.SampleActions>( |
|
||||||
initSample |
|
||||||
).handleAction(Actions.getDroneList.success, (state, action) => |
|
||||||
produce(state, draft => {}) |
|
||||||
); |
|
||||||
``` |
|
||||||
|
|
||||||
<br> |
|
||||||
|
|
||||||
## 📂 sagas |
|
||||||
|
|
||||||
- Saga 함수는 카멜케이스를 사용하여 Action 함수 + Saga 로 작성한다. |
|
||||||
|
|
||||||
```bash |
|
||||||
function* getDroneListSaga( |
|
||||||
action: ActionType<typeof Actions.getDroneList.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
} catch (error: any) {} |
|
||||||
} |
|
||||||
``` |
|
||||||
|
|
||||||
- export 함수는 카멜케이스를 사용하여 [주체] + Saga 로 작성한다. |
|
||||||
|
|
||||||
```bash |
|
||||||
export function* sampleSaga() { |
|
||||||
yield takeEvery(Actions.getDroneList.request, getDroneListSaga); |
|
||||||
} |
|
||||||
``` |
|
||||||
|
|
||||||
<br> |
|
||||||
|
|
||||||
## 📜 index.ts |
|
||||||
|
|
||||||
```bash |
|
||||||
export * from './actions'; |
|
||||||
export * from './apis'; |
|
||||||
export * from './models'; |
|
||||||
export * from './reducers'; |
|
||||||
export * from './sagas'; |
|
||||||
``` |
|
@ -1,55 +0,0 @@ |
|||||||
import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; |
|
||||||
|
|
||||||
/** |
|
||||||
* [Action 타입] |
|
||||||
* 대문자와 _를 사용하여 상수 형태로 작성한다. |
|
||||||
* 구분자는 소문자로 작성한다. |
|
||||||
* 동사를 먼저 작성한다. |
|
||||||
* 비동기 요청 액션이 아닐 땐 CLIENT_ 로 시작한다. |
|
||||||
* |
|
||||||
* 기본 규칙 |
|
||||||
* 목록 조회 - GET_[주체]_LIST |
|
||||||
* 상세 조회 - GET_[주체]_DETAIL |
|
||||||
* 생성/추가 - CREATE_[주체] |
|
||||||
* 수정/변경 - UPDATE_[주체] |
|
||||||
* 삭제 - DELETE_[주체] |
|
||||||
* |
|
||||||
* [동사] |
|
||||||
* SET, FIND, SEND, CHECK, REGISTER ... |
|
||||||
* [명사] |
|
||||||
* LIST, DETAIL, LOG, APPROVAL ... |
|
||||||
* |
|
||||||
* |
|
||||||
* [Action 함수] |
|
||||||
* 카멜케이스를 사용하여 작성한다. |
|
||||||
* 작성한 Action 타입을 참고하여 작성한다. (Ex. GET_DRONE_LIST_REQUEST -> getDroneList) |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
// 드론 목록
|
|
||||||
const GET_DRONE_LIST_REQUEST = 'sample/GET_DRONE_LIST_REQUEST'; |
|
||||||
const GET_DRONE_LIST_SUCCESS = 'sample/GET_DRONE_LIST_SUCCESS'; |
|
||||||
const GET_DRONE_LIST_FAILURE = 'sample/GET_DRONE_LIST_FAILURE'; |
|
||||||
|
|
||||||
// 지도 타입
|
|
||||||
const CLIENT_MAPTYPE = 'sample/CLIENT_MAPTYPE'; |
|
||||||
|
|
||||||
// 비행 이력 목록
|
|
||||||
const GET_HISTORY_LIST_REQUEST = 'sample/HISTORY_LIST_REQUEST'; |
|
||||||
|
|
||||||
// 비행 이력 상세 목록
|
|
||||||
const GET_HISTORY_LOG_REQUEST = 'sample/HISTORY_LOG_REQUEST'; |
|
||||||
|
|
||||||
export const getDroneList = createAsyncAction( |
|
||||||
GET_DRONE_LIST_REQUEST, |
|
||||||
GET_DRONE_LIST_SUCCESS, |
|
||||||
GET_DRONE_LIST_FAILURE |
|
||||||
)(); |
|
||||||
|
|
||||||
export const clientMapType = createAction(CLIENT_MAPTYPE)(); |
|
||||||
|
|
||||||
const actions = { |
|
||||||
getDroneList |
|
||||||
}; |
|
||||||
|
|
||||||
export type SampleActions = ActionType<typeof actions>; |
|
@ -1,14 +0,0 @@ |
|||||||
import axios from '../../utils/customAxiosUtil'; |
|
||||||
|
|
||||||
/** |
|
||||||
* 변수명은 주체 + API로 작성한다. |
|
||||||
* api는 Action 함수명과 동일하게 작성한다. |
|
||||||
* 특별한 경우가 아니면 return은 즉시 해준다. |
|
||||||
*/ |
|
||||||
|
|
||||||
export const sampleAPI = { |
|
||||||
// 드론 목록 조회
|
|
||||||
getDroneList: async () => { |
|
||||||
return await axios.get('api/bas/dron/list...'); |
|
||||||
} |
|
||||||
}; |
|
@ -1,5 +0,0 @@ |
|||||||
export * from './actions'; |
|
||||||
export * from './apis'; |
|
||||||
export * from './models'; |
|
||||||
export * from './reducers'; |
|
||||||
export * from './sagas'; |
|
@ -1,30 +0,0 @@ |
|||||||
/** |
|
||||||
* 모든 interface는 파스칼케이스를 사용하여 작성한다. |
|
||||||
* 모든 Interface는 약자인 I를 붙여준다. |
|
||||||
* Rq, Rs interface의 경우 Action명 + Rq or Rs를 붙여준다. |
|
||||||
* |
|
||||||
* 초기값의 경우 변수명을 init + 주체 로 작성한다. |
|
||||||
* 초기값의 interface는 State로 끝나도록 작성한다. |
|
||||||
*/ |
|
||||||
|
|
||||||
export const initSample: ISampleState = { |
|
||||||
droneList: undefined, |
|
||||||
droneCount: 0 |
|
||||||
}; |
|
||||||
|
|
||||||
export interface ISampleState { |
|
||||||
droneList: IDrone[] | undefined; |
|
||||||
droneCount: number | 0; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IDrone { |
|
||||||
groupId: string; |
|
||||||
arcrftSno: number; |
|
||||||
arcrftHght: number; |
|
||||||
arcrftLngth: number; |
|
||||||
arcrftModelNm: string; |
|
||||||
arcrftTypeCd: string; |
|
||||||
arcrftWdth: number; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IUpdateDroneRq {} |
|
@ -1,15 +0,0 @@ |
|||||||
import { createReducer } from 'typesafe-actions'; |
|
||||||
import produce from 'immer'; |
|
||||||
|
|
||||||
import { ISampleState, initSample } from '../models'; |
|
||||||
import * as Actions from '../actions'; |
|
||||||
|
|
||||||
/** |
|
||||||
* Reducer 함수는 카멜케이스를 사용하여 작성한다. |
|
||||||
*/ |
|
||||||
|
|
||||||
export const sampleReducer = createReducer<ISampleState, Actions.SampleActions>( |
|
||||||
initSample |
|
||||||
).handleAction(Actions.getDroneList.success, (state, action) => |
|
||||||
produce(state, draft => {}) |
|
||||||
); |
|
@ -1,21 +0,0 @@ |
|||||||
import { ActionType } from 'typesafe-actions'; |
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { takeEvery } from 'redux-saga/effects'; |
|
||||||
|
|
||||||
/** |
|
||||||
* saga 함수는 카멜케이스를 사용하여 Action 함수 + Saga로 통일한다. |
|
||||||
*/ |
|
||||||
|
|
||||||
function* getDroneListSaga( |
|
||||||
action: ActionType<typeof Actions.getDroneList.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
} catch (error: any) {} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* export saga 함수는 카멜케이스를 사용하여 작성한다. |
|
||||||
*/ |
|
||||||
export function* sampleSaga() { |
|
||||||
yield takeEvery(Actions.getDroneList.request, getDroneListSaga); |
|
||||||
} |
|
@ -1,123 +0,0 @@ |
|||||||
import { AxiosError } from 'axios'; |
|
||||||
import { ActionType, createAsyncAction } from 'typesafe-actions'; |
|
||||||
import { |
|
||||||
TokenAccount, |
|
||||||
ISetLoginRq, |
|
||||||
IUpdateUserPwRq, |
|
||||||
ISetLoginRs, |
|
||||||
IUpdateUserPwRs, |
|
||||||
ICheckAuthencationRs, |
|
||||||
IGetUserPageRs, |
|
||||||
IUpdateUserRs, |
|
||||||
IUpdateUserRq, |
|
||||||
ICheckUserPwRs |
|
||||||
} from '../models'; |
|
||||||
|
|
||||||
// 로그인
|
|
||||||
const SET_LOGIN_REQUEST = 'auth/SET_LOGIN_REQUEST'; |
|
||||||
const SET_LOGIN_SUCCESS = 'auth/SET_LOGIN_SUCCESS'; |
|
||||||
const SET_LOGIN_FAILURE = 'auth/SET_LOGIN_FAILURE'; |
|
||||||
|
|
||||||
// 인증 확인
|
|
||||||
const CHECK_AUTHENCATION_REQUEST = 'auth/CHECK_AUTHENCATION_REQUEST'; |
|
||||||
const CHECK_AUTHENCATION_SUCCESS = 'auth/CHECK_AUTHENCATION_SUCCESS'; |
|
||||||
const CHECK_AUTHENCATION_FAILURE = 'auth/CHECK_AUTHENCATION_FAILURE'; |
|
||||||
|
|
||||||
// 로그아웃
|
|
||||||
const SET_LOGOUT_REQUEST = 'auth/SET_LOGOUT_REQUEST'; |
|
||||||
const SET_LOGOUT_SUCCESS = 'auth/SET_LOGOUT_SUCCESS'; |
|
||||||
const SET_LOGOUT_FAILURE = 'auth/SET_LOGOUT_FAILURE'; |
|
||||||
|
|
||||||
// 마이페이지 조회
|
|
||||||
const GET_USER_PAGE_REQUEST = 'auth/GET_USER_PAGE_REQUEST'; |
|
||||||
const GET_USER_PAGE_SUCCESS = 'auth/GET_USER_PAGE_SUCCESS'; |
|
||||||
const GET_USER_PAGE_FAILURE = 'auth/GET_USER_PAGE_FAILURE'; |
|
||||||
|
|
||||||
// 마이페이지 수정
|
|
||||||
const UPDATE_USER_REQUEST = 'auth/UPDATE_USER_REQUEST'; |
|
||||||
const UPDATE_USER_SUCCESS = 'auth/UPDATE_USER_SUCCESS'; |
|
||||||
const UPDATE_USER_FAILURE = 'auth/UPDATE_USER_FAILURE'; |
|
||||||
|
|
||||||
// 회원 탈퇴
|
|
||||||
const DELETE_USER_REQUEST = 'auth/DELETE_USER_REQUEST'; |
|
||||||
const DELETE_USER_SUCCESS = 'auth/DELETE_USER_SUCCESS'; |
|
||||||
const DELETE_USER_FAILURE = 'auth/DELETE_USER_FAILURE'; |
|
||||||
|
|
||||||
// 기존 비밀번호 체크
|
|
||||||
const CHECK_USERPW_REQUEST = 'auth/CHECK_USERPW_REQUEST'; |
|
||||||
const CHECK_USERPW_SUCCESS = 'auth/CHECK_USERPW_SUCCESS'; |
|
||||||
const CHECK_USERPW_FAILURE = 'auth/CHECK_USERPW_FAILURE'; |
|
||||||
|
|
||||||
// 비밀번호 변경
|
|
||||||
const UPDATE_USERPW_REQUEST = 'auth/UPDATE_USERPW_REQUEST'; |
|
||||||
const UPDATE_USERPW_SUCCESS = 'auth/UPDATE_USERPW_SUCCESS'; |
|
||||||
const UPDATE_USERPW_FAILURE = 'auth/UPDATE_USERPW_FAILURE'; |
|
||||||
|
|
||||||
export const setLogin = createAsyncAction( |
|
||||||
SET_LOGIN_REQUEST, |
|
||||||
SET_LOGIN_SUCCESS, |
|
||||||
SET_LOGIN_FAILURE |
|
||||||
)<ISetLoginRq, ISetLoginRs, string>(); |
|
||||||
|
|
||||||
export const checkAuthencation = createAsyncAction( |
|
||||||
CHECK_AUTHENCATION_REQUEST, |
|
||||||
CHECK_AUTHENCATION_SUCCESS, |
|
||||||
CHECK_AUTHENCATION_FAILURE |
|
||||||
)<void, { isLogin: boolean; user?: ICheckAuthencationRs }, AxiosError>(); |
|
||||||
|
|
||||||
export const setLogout = createAsyncAction( |
|
||||||
SET_LOGOUT_REQUEST, |
|
||||||
SET_LOGOUT_SUCCESS, |
|
||||||
SET_LOGOUT_FAILURE |
|
||||||
)<void, void, AxiosError>(); |
|
||||||
|
|
||||||
// 사용안함?
|
|
||||||
// export const refresh = createAsyncAction(
|
|
||||||
// SET_LOGOUT_REQUEST,
|
|
||||||
// SET_LOGOUT_SUCCESS,
|
|
||||||
// SET_LOGOUT_FAILURE
|
|
||||||
// )<TokenAccount, ISetLoginRs, AxiosError>();
|
|
||||||
|
|
||||||
export const getUserPage = createAsyncAction( |
|
||||||
GET_USER_PAGE_REQUEST, |
|
||||||
GET_USER_PAGE_SUCCESS, |
|
||||||
GET_USER_PAGE_FAILURE |
|
||||||
)<number, IGetUserPageRs, AxiosError>(); |
|
||||||
|
|
||||||
export const updateUser = createAsyncAction( |
|
||||||
UPDATE_USER_REQUEST, |
|
||||||
UPDATE_USER_SUCCESS, |
|
||||||
UPDATE_USER_FAILURE |
|
||||||
)<IUpdateUserRq, IUpdateUserRs, AxiosError>(); |
|
||||||
|
|
||||||
export const deleteUser = createAsyncAction( |
|
||||||
DELETE_USER_REQUEST, |
|
||||||
DELETE_USER_SUCCESS, |
|
||||||
DELETE_USER_FAILURE |
|
||||||
)<number, void, AxiosError>(); |
|
||||||
|
|
||||||
export const checkUserPw = createAsyncAction( |
|
||||||
CHECK_USERPW_REQUEST, |
|
||||||
CHECK_USERPW_SUCCESS, |
|
||||||
CHECK_USERPW_FAILURE |
|
||||||
)<string, ICheckUserPwRs, AxiosError>(); |
|
||||||
|
|
||||||
export const updateUserPw = createAsyncAction( |
|
||||||
UPDATE_USERPW_REQUEST, |
|
||||||
UPDATE_USERPW_SUCCESS, |
|
||||||
UPDATE_USERPW_FAILURE |
|
||||||
)<IUpdateUserPwRq, IUpdateUserPwRs, AxiosError>(); |
|
||||||
|
|
||||||
const actions = { |
|
||||||
setLogin, |
|
||||||
checkAuthencation, |
|
||||||
setLogout, |
|
||||||
// refresh,
|
|
||||||
updateUser, |
|
||||||
getUserPage, |
|
||||||
updateUserPw, |
|
||||||
deleteUser, |
|
||||||
checkUserPw |
|
||||||
}; |
|
||||||
|
|
||||||
export type AuthAction = ActionType<typeof actions>; |
|
@ -1,47 +0,0 @@ |
|||||||
import axios from '../../../utils/customAxiosUtil'; |
|
||||||
import { |
|
||||||
ISetLoginRq, |
|
||||||
TokenAccount, |
|
||||||
IUpdateUserPwRq, |
|
||||||
IUpdateUserRq |
|
||||||
} from '../models'; |
|
||||||
|
|
||||||
export const authAPI = { |
|
||||||
// 로그인
|
|
||||||
setLogin: async (data: ISetLoginRq) => { |
|
||||||
return await axios.post('api/acnt/jwt/login', data); |
|
||||||
}, |
|
||||||
// 로그아웃
|
|
||||||
setLogout: (id: number) => { |
|
||||||
return axios.get(`api/acnt/jwt/logout/${id}`); |
|
||||||
}, |
|
||||||
// 토큰 재발급
|
|
||||||
refreshToken: (data: TokenAccount) => { |
|
||||||
return axios.post('api/acnt/jwt/refresh', data); |
|
||||||
}, |
|
||||||
// 로그인한 회원정보 조회
|
|
||||||
getUserProfile: async (id: number) => { |
|
||||||
return await axios.get(`api/acnt/jwt/profile/${id}`); |
|
||||||
}, |
|
||||||
// 회원정보 조회
|
|
||||||
getUserPage: async (id: number) => { |
|
||||||
return await axios.get(`api/acnt/cstmr/profile/${id}`); |
|
||||||
}, |
|
||||||
// 회원정보 수정
|
|
||||||
updateUser: async (data: IUpdateUserRq) => { |
|
||||||
const res = await axios.put('api/acnt/cstmr/profile/update', data); |
|
||||||
return res; |
|
||||||
}, |
|
||||||
// 회원 탈퇴
|
|
||||||
deletedata: async (id: number) => { |
|
||||||
return await axios.post(`api/acnt/cstmr/profile/delete/${id}`); |
|
||||||
}, |
|
||||||
// 기존 비밀번호 확인
|
|
||||||
checkUserPw: async (userPswd: string) => { |
|
||||||
return await axios.post('api/acnt/cstmr/profile/pwcheck', { userPswd }); |
|
||||||
}, |
|
||||||
// 비밀번호 변경
|
|
||||||
updateUserPw: async (data: IUpdateUserPwRq) => { |
|
||||||
return await axios.post('api/acnt/cstmr/profile/pswdupdate', data); |
|
||||||
} |
|
||||||
}; |
|
@ -1,5 +0,0 @@ |
|||||||
export * from './actions'; |
|
||||||
export * from './apis'; |
|
||||||
export * from './models'; |
|
||||||
export * from './reducers'; |
|
||||||
export * from './sagas'; |
|
@ -1,179 +0,0 @@ |
|||||||
export const initUserPage: IUserPageState = { |
|
||||||
userPage: undefined, |
|
||||||
result: undefined |
|
||||||
}; |
|
||||||
|
|
||||||
export interface IUserPageState { |
|
||||||
userPage?: IGetUserPageRs | undefined; |
|
||||||
result: boolean | undefined; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IAuthState { |
|
||||||
pageLoading: boolean; |
|
||||||
isRefresh: boolean; |
|
||||||
isLogin?: boolean; |
|
||||||
message: string; |
|
||||||
user?: ICheckAuthencationRs; |
|
||||||
UserPw?: IUpdateUserPwRq; |
|
||||||
} |
|
||||||
|
|
||||||
export const initAuth: IAuthState = { |
|
||||||
pageLoading: false, |
|
||||||
isRefresh: false, |
|
||||||
isLogin: undefined, |
|
||||||
message: '', |
|
||||||
user: undefined, |
|
||||||
UserPw: undefined |
|
||||||
}; |
|
||||||
|
|
||||||
// login
|
|
||||||
export interface ISetLoginRq { |
|
||||||
userId: string; |
|
||||||
userPswd: string; |
|
||||||
} |
|
||||||
export interface ISetLoginRs { |
|
||||||
accessToken: string; |
|
||||||
refreshToken: string; |
|
||||||
userId: string; |
|
||||||
userNm: string; |
|
||||||
cstmrSno: number; |
|
||||||
auth: string; |
|
||||||
brthdyDate: string; |
|
||||||
clncd: string; |
|
||||||
hpno: string; |
|
||||||
email: string; |
|
||||||
} |
|
||||||
|
|
||||||
// check
|
|
||||||
|
|
||||||
export interface ICheckAuthencationRs { |
|
||||||
authId: string; |
|
||||||
cptAuthCode: string; |
|
||||||
cstmrSno: number; |
|
||||||
memberName: string; |
|
||||||
siteCode: string; |
|
||||||
userId: string; |
|
||||||
} |
|
||||||
|
|
||||||
// userPage
|
|
||||||
export interface IGetUserPageRs { |
|
||||||
memberName: string; |
|
||||||
birthdyDate: string; |
|
||||||
genderCd: string; |
|
||||||
cntryCd: string; |
|
||||||
email: string; |
|
||||||
hpno: string; |
|
||||||
userId: string; |
|
||||||
updateDt: string; |
|
||||||
cptAuthCode: string; |
|
||||||
} |
|
||||||
|
|
||||||
// updateUser
|
|
||||||
export interface IUpdateUserRq { |
|
||||||
cstmrSno: number; |
|
||||||
email: string; |
|
||||||
hpno: string; |
|
||||||
updateUserId: string; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IUpdateUserRs { |
|
||||||
cstmrSno: number; |
|
||||||
ipinCi: string; |
|
||||||
joinCrtfyCd: string; |
|
||||||
cntryCd: string; |
|
||||||
genderCd: string; |
|
||||||
memberName: string; |
|
||||||
brthdyDate: string; |
|
||||||
email: string; |
|
||||||
hpno: string; |
|
||||||
clncd: string; |
|
||||||
updateDt: string; |
|
||||||
updateUserId: string; |
|
||||||
} |
|
||||||
|
|
||||||
// checkUserPw
|
|
||||||
export interface ICheckUserPwRs { |
|
||||||
result: boolean; |
|
||||||
errorMessage?: string; |
|
||||||
errorCode?: string; |
|
||||||
} |
|
||||||
|
|
||||||
// updateUserPw
|
|
||||||
export interface IUpdateUserPwRq { |
|
||||||
newPswd: string; |
|
||||||
newPswdConfirm: string; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IUpdateUserPwRs { |
|
||||||
authId: string; |
|
||||||
cptAuthCode: string; |
|
||||||
cstmrDivCd: string; |
|
||||||
cstmrSno: number; |
|
||||||
cstmrStatusCd: string; |
|
||||||
joinDt: string; |
|
||||||
joinIp: string; |
|
||||||
pswdUpdtDt: string; |
|
||||||
rfrshToken: string; |
|
||||||
siteCode: string; |
|
||||||
userId: string; |
|
||||||
userPswd: string; |
|
||||||
} |
|
||||||
|
|
||||||
// token decode
|
|
||||||
|
|
||||||
export interface IDecodeToken { |
|
||||||
auth: string; |
|
||||||
cptAuthCode: string; |
|
||||||
cstmrSno: number; |
|
||||||
exp: number; |
|
||||||
group: IDecodeTokenGroup[]; |
|
||||||
iat: number; |
|
||||||
sub: string; |
|
||||||
userId: string; |
|
||||||
userNm: string; |
|
||||||
} |
|
||||||
|
|
||||||
interface IDecodeTokenGroup { |
|
||||||
groupId: string; |
|
||||||
groupAuthCd: string; |
|
||||||
} |
|
||||||
|
|
||||||
// ---------------------------------------------------
|
|
||||||
|
|
||||||
export interface TokenAccount { |
|
||||||
cstmrSno: number; |
|
||||||
refreshToken: string | null; |
|
||||||
} |
|
||||||
// export interface MyPageFormData {
|
|
||||||
// data: IGetUserPageRs | undefined;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export interface ILoginData {
|
|
||||||
// accessToken: string;
|
|
||||||
// refreshToken: string;
|
|
||||||
// expires_in: number;
|
|
||||||
// exp: string;
|
|
||||||
// scope: string | string[];
|
|
||||||
// jti: string;
|
|
||||||
// userId: string;
|
|
||||||
// cstmrSno: number;
|
|
||||||
// auth: string;
|
|
||||||
// encodedInfo: string | null;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export interface IGetUserPageRs {
|
|
||||||
// memberName: string;
|
|
||||||
// birthdyDate: string;
|
|
||||||
// genderCd: string;
|
|
||||||
// cntryCd: string;
|
|
||||||
// email: string;
|
|
||||||
// hpno: string;
|
|
||||||
// userId: string;
|
|
||||||
// updateDt: string;
|
|
||||||
// cptAuthCode: string;
|
|
||||||
// // cstmrSno: string;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export interface UserPwCheck {
|
|
||||||
// result: string;
|
|
||||||
// }
|
|
@ -1,87 +0,0 @@ |
|||||||
// base
|
|
||||||
import produce from 'immer'; |
|
||||||
import { createReducer } from 'typesafe-actions'; |
|
||||||
|
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { |
|
||||||
IUserPageState, |
|
||||||
IGetUserPageRs, |
|
||||||
initUserPage, |
|
||||||
IAuthState, |
|
||||||
initAuth |
|
||||||
} from '../models'; |
|
||||||
|
|
||||||
export const authReducer = createReducer<IAuthState, Actions.AuthAction>( |
|
||||||
initAuth |
|
||||||
) |
|
||||||
.handleAction(Actions.setLogin.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
draft.isLogin = true; |
|
||||||
// draft.user = action.payload;
|
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.setLogin.request, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
draft.isLogin = false; |
|
||||||
draft.message = ''; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.setLogin.failure, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
draft.isLogin = false; |
|
||||||
draft.message = action.payload; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.checkAuthencation.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { isLogin, user } = action.payload; |
|
||||||
draft.isRefresh = false; |
|
||||||
draft.isLogin = isLogin; |
|
||||||
draft.user = user; |
|
||||||
}) |
|
||||||
) |
|
||||||
// .handleAction(Actions.refresh.request, (state, action) =>
|
|
||||||
// produce(state, draft => {
|
|
||||||
// draft.isRefresh = true;
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
// .handleAction(Actions.refresh.success, (state, action) =>
|
|
||||||
// produce(state, draft => {
|
|
||||||
// // draft.user = action.payload;
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
.handleAction(Actions.setLogout.success, state => |
|
||||||
produce(state, draft => { |
|
||||||
draft.isLogin = false; |
|
||||||
draft.user = undefined; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.deleteUser.success, state => |
|
||||||
produce(state, draft => { |
|
||||||
draft.isLogin = false; |
|
||||||
draft.user = undefined; |
|
||||||
}) |
|
||||||
); |
|
||||||
|
|
||||||
export const userPageReducer = createReducer< |
|
||||||
IUserPageState, |
|
||||||
Actions.AuthAction |
|
||||||
>(initUserPage) |
|
||||||
.handleAction(Actions.getUserPage.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const data: IGetUserPageRs = action.payload; |
|
||||||
draft.userPage = data; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.checkUserPw.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const data = action.payload; |
|
||||||
draft.result = data.result; |
|
||||||
}) |
|
||||||
); |
|
||||||
// .handleAction(Actions.updateUserPw.success, (state, action) =>
|
|
||||||
// produce(state, draft => {
|
|
||||||
// const data = action.payload;
|
|
||||||
// draft.userPwPage = data;
|
|
||||||
// })
|
|
||||||
// );
|
|
@ -1,302 +0,0 @@ |
|||||||
// base
|
|
||||||
import { replace } from 'connected-react-router'; |
|
||||||
import decode from 'jwt-decode'; |
|
||||||
import { call, put, takeEvery } from 'redux-saga/effects'; |
|
||||||
// packages
|
|
||||||
import { ActionType } from 'typesafe-actions'; |
|
||||||
// modules
|
|
||||||
import { ERROR_MESSAGE, SAVE_MESSAGE } from '../../../../configs/constants'; |
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { authAPI } from '../apis'; |
|
||||||
import { ICheckUserPwRs, IDecodeToken } from '../models'; |
|
||||||
import { |
|
||||||
cookieStorage, |
|
||||||
COOKIE_ACCESS_TOKEN, |
|
||||||
COOKIE_REFRESH_TOKEN |
|
||||||
} from '../service/cookie'; |
|
||||||
import * as MessageActions from '../../../comn/message/actions/comnMessageAction'; |
|
||||||
|
|
||||||
function* setLoginSaga(action: ActionType<typeof Actions.setLogin.request>) { |
|
||||||
const param = action.payload; |
|
||||||
try { |
|
||||||
const { data, errorCode } = yield call(authAPI.setLogin, param); |
|
||||||
|
|
||||||
if (errorCode == '-101') { |
|
||||||
throw '계정 정보를 찾을 수 없습니다. 다시 확인해 주세요.'; |
|
||||||
} else if (errorCode == '-102') { |
|
||||||
throw '비밀번호가 잘못되었습니다. 다시 확인해 주세요.'; |
|
||||||
} else if (errorCode == '-103') { |
|
||||||
throw '계정 정보가 사용할 수 없는 상태입니다. 다시 확인해 주세요.'; |
|
||||||
} |
|
||||||
// access_token 세팅
|
|
||||||
cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, data.accessToken); |
|
||||||
cookieStorage.setCookie(COOKIE_REFRESH_TOKEN, data.refreshToken); |
|
||||||
|
|
||||||
const user = yield call(authAPI.getUserProfile, data.cstmrSno); |
|
||||||
// if (data.userId) {
|
|
||||||
// cookieStorage.setCookie('SAVE_USR_ID', data.userId);
|
|
||||||
// } else {
|
|
||||||
// cookieStorage.removeCookie('SAVE_USR_ID');
|
|
||||||
// }
|
|
||||||
|
|
||||||
yield put( |
|
||||||
Actions.setLogin.success({ |
|
||||||
...user.data |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.setLogin.failure(error)); |
|
||||||
|
|
||||||
// message.error(error);
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
// function* refreshTokenSaga(action: ActionType<typeof Actions.refresh.request>) {
|
|
||||||
// const param = action.payload;
|
|
||||||
// cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN);
|
|
||||||
// cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN);
|
|
||||||
// try {
|
|
||||||
// const { data, errorCode } = yield call(authAPI.refreshToken, param);
|
|
||||||
|
|
||||||
// console.log('token>>>', data);
|
|
||||||
// // access_token 세팅
|
|
||||||
// cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, data.accessToken);
|
|
||||||
// cookieStorage.setCookie(COOKIE_REFRESH_TOKEN, data.refreshToken);
|
|
||||||
|
|
||||||
// const user = yield call(authAPI.getUserProfile, data.cstmrSno);
|
|
||||||
|
|
||||||
// yield put(Actions.checkAuthencation.success({ ...user.data }));
|
|
||||||
// } catch (error: any) {
|
|
||||||
// yield put(Actions.checkAuthencation.failure(error));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
function* checkSaga() { |
|
||||||
try { |
|
||||||
const accessToken = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN); |
|
||||||
|
|
||||||
if (!accessToken) { |
|
||||||
yield put( |
|
||||||
Actions.checkAuthencation.success({ |
|
||||||
isLogin: false |
|
||||||
}) |
|
||||||
); |
|
||||||
|
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
const decodedToken = decode<IDecodeToken>(accessToken); |
|
||||||
|
|
||||||
const { data } = yield call(authAPI.getUserProfile, decodedToken.cstmrSno); |
|
||||||
|
|
||||||
//token 셋팅
|
|
||||||
cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, accessToken); |
|
||||||
|
|
||||||
// storageService.session.setItem(STORAGE_SESSION_ICT, user.icToken);
|
|
||||||
yield put( |
|
||||||
Actions.checkAuthencation.success({ |
|
||||||
isLogin: true, |
|
||||||
user: data |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN); |
|
||||||
|
|
||||||
yield put(Actions.checkAuthencation.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* setLogoutSaga() { |
|
||||||
const accessToken = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN); |
|
||||||
|
|
||||||
try { |
|
||||||
if (accessToken) { |
|
||||||
const decodedToken = decode<IDecodeToken>(accessToken); |
|
||||||
const res = yield call(authAPI.setLogout, decodedToken.cstmrSno); |
|
||||||
|
|
||||||
if (res.data == 'SUCCESS') { |
|
||||||
location.href = '/account/login'; |
|
||||||
} |
|
||||||
} |
|
||||||
// yield put(Actions.setLogout.success());
|
|
||||||
cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN); |
|
||||||
cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN); |
|
||||||
|
|
||||||
yield put(replace('/')); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.setLogout.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* getUserPageSaga( |
|
||||||
action: ActionType<typeof Actions.getUserPage.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
const controlId = action.payload; |
|
||||||
|
|
||||||
const { data } = yield call(authAPI.getUserPage, controlId); |
|
||||||
|
|
||||||
yield put(Actions.getUserPage.success(data)); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getUserPage.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* deleteUserSaga( |
|
||||||
action: ActionType<typeof Actions.deleteUser.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
const controlId = action.payload; |
|
||||||
|
|
||||||
const { data } = yield call(authAPI.deletedata, controlId); |
|
||||||
if (data.result === true) { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_MESSAGE({ |
|
||||||
messageCode: SAVE_MESSAGE.code, |
|
||||||
message: '탈퇴가 완료되었습니다', |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: true |
|
||||||
}) |
|
||||||
); |
|
||||||
//location.href = '/account/login';
|
|
||||||
cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN); |
|
||||||
cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN); |
|
||||||
|
|
||||||
yield put(replace('/')); |
|
||||||
// yield put(Actions.deleteUser.success(data));;
|
|
||||||
} |
|
||||||
|
|
||||||
// yield put(Actions.setLogout.success());
|
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.setLogout.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* updateUserSaga( |
|
||||||
action: ActionType<typeof Actions.updateUser.request> |
|
||||||
) { |
|
||||||
const param = action.payload; |
|
||||||
try { |
|
||||||
const { data, errorCode } = yield call(authAPI.updateUser, param); |
|
||||||
yield put(Actions.updateUserPw.success(data)); |
|
||||||
if (data.errorCode === '-1') { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_ERROR({ |
|
||||||
errorCode: ERROR_MESSAGE.code, |
|
||||||
errorMessage: ERROR_MESSAGE.message, |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: false |
|
||||||
}) |
|
||||||
); |
|
||||||
} else { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_MESSAGE({ |
|
||||||
messageCode: SAVE_MESSAGE.code, |
|
||||||
message: SAVE_MESSAGE.message, |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: false |
|
||||||
}) |
|
||||||
); |
|
||||||
} |
|
||||||
} catch (error: any) { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_ERROR({ |
|
||||||
errorCode: ERROR_MESSAGE.code, |
|
||||||
errorMessage: '처리 중 에러입니다.', |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: false |
|
||||||
}) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* checkupdateUserPwSaga( |
|
||||||
action: ActionType<typeof Actions.checkUserPw.request> |
|
||||||
) { |
|
||||||
const controlId = action.payload; |
|
||||||
try { |
|
||||||
const { data }: { data: ICheckUserPwRs } = yield call( |
|
||||||
authAPI.checkUserPw, |
|
||||||
controlId |
|
||||||
); |
|
||||||
yield put(Actions.checkUserPw.success(data)); |
|
||||||
if (data.errorCode === '-1') { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_ERROR({ |
|
||||||
errorCode: ERROR_MESSAGE.code, |
|
||||||
errorMessage: '기존 비밀번호가 일치하지 않습니다.', |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: false |
|
||||||
}) |
|
||||||
); |
|
||||||
} else { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_MESSAGE({ |
|
||||||
messageCode: SAVE_MESSAGE.code, |
|
||||||
message: '확인이 완료되었습니다.', |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: false |
|
||||||
}) |
|
||||||
); |
|
||||||
} |
|
||||||
} catch (error: any) { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_ERROR({ |
|
||||||
errorCode: ERROR_MESSAGE.code, |
|
||||||
errorMessage: '처리 중 에러입니다.', |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: false |
|
||||||
}) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* updateUserPwSaga( |
|
||||||
action: ActionType<typeof Actions.updateUserPw.request> |
|
||||||
) { |
|
||||||
const param = action.payload; |
|
||||||
try { |
|
||||||
const { data, errorCode } = yield call(authAPI.updateUserPw, param); |
|
||||||
//yield put(Actions.updateUserPw.success(data));
|
|
||||||
|
|
||||||
if (data.errorCode === '-1') { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_ERROR({ |
|
||||||
errorCode: ERROR_MESSAGE.code, |
|
||||||
errorMessage: '기존 비밀번호가 일치하지 않습니다.', |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: false |
|
||||||
}) |
|
||||||
); |
|
||||||
} else { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_MESSAGE({ |
|
||||||
messageCode: SAVE_MESSAGE.code, |
|
||||||
message: SAVE_MESSAGE.message, |
|
||||||
isHistoryBack: true, |
|
||||||
isRefresh: true |
|
||||||
}) |
|
||||||
); |
|
||||||
} |
|
||||||
} catch (error: any) { |
|
||||||
yield put( |
|
||||||
MessageActions.IS_ERROR({ |
|
||||||
errorCode: ERROR_MESSAGE.code, |
|
||||||
errorMessage: '처리 중 에러입니다.', |
|
||||||
isHistoryBack: false, |
|
||||||
isRefresh: false |
|
||||||
}) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
export function* authSaga() { |
|
||||||
yield takeEvery(Actions.setLogin.request, setLoginSaga); |
|
||||||
yield takeEvery(Actions.setLogout.request, setLogoutSaga); |
|
||||||
yield takeEvery(Actions.checkAuthencation.request, checkSaga); |
|
||||||
yield takeEvery(Actions.getUserPage.request, getUserPageSaga); |
|
||||||
yield takeEvery(Actions.updateUser.request, updateUserSaga); |
|
||||||
yield takeEvery(Actions.deleteUser.request, deleteUserSaga); |
|
||||||
yield takeEvery(Actions.checkUserPw.request, checkupdateUserPwSaga); |
|
||||||
yield takeEvery(Actions.updateUserPw.request, updateUserPwSaga); |
|
||||||
} |
|
@ -1,55 +0,0 @@ |
|||||||
import { AxiosError } from 'axios'; |
|
||||||
import { ActionType, createAsyncAction } from 'typesafe-actions'; |
|
||||||
|
|
||||||
// 아이디 찾기 인증번호 발송
|
|
||||||
const SEND_FORID_REQUEST = 'find/SEND_FORID_REQUEST'; |
|
||||||
const SEND_FORID_SUCCESS = 'find/SEND_FORID_SUCCESS'; |
|
||||||
const SEND_FORID_FAILURE = 'find/SEND_FORID_FAILURE'; |
|
||||||
|
|
||||||
// 아이디 찾기
|
|
||||||
const FIND_USERID_REQUEST = 'find/FIND_USERID_REQUEST'; |
|
||||||
const FIND_USERID_SUCCESS = 'find/FIND_USERID_SUCCESS'; |
|
||||||
const FIND_USERID_FAILURE = 'find/FIND_USERID_FAILURE'; |
|
||||||
|
|
||||||
// 비밀번호 찾기 인증번호 발송
|
|
||||||
const SEND_FORPW_REQUEST = 'find/SEND_FORPW_REQUEST'; |
|
||||||
const SEND_FORPW_SUCCESS = 'find/SEND_FORPW_SUCCESS'; |
|
||||||
const SEND_FORPW_FAILURE = 'find/SEND_FORPW_FAILURE'; |
|
||||||
|
|
||||||
// 비밀번호 변경
|
|
||||||
const UPDATE_USERPW_REQUEST = 'find/UPDATE_USERPW_REQUEST'; |
|
||||||
const UPDATE_USERPW_SUCCESS = 'find/UPDATE_USERPW_SUCCESS'; |
|
||||||
const UPDATE_USERPW_FAILURE = 'find/UPDATE_USERPW_FAILURE'; |
|
||||||
|
|
||||||
export const sendForId = createAsyncAction( |
|
||||||
SEND_FORID_REQUEST, |
|
||||||
SEND_FORID_SUCCESS, |
|
||||||
SEND_FORID_FAILURE |
|
||||||
)<{ memberName: string; hpno: string }, string, AxiosError>(); |
|
||||||
|
|
||||||
export const findUserId = createAsyncAction( |
|
||||||
FIND_USERID_REQUEST, |
|
||||||
FIND_USERID_SUCCESS, |
|
||||||
FIND_USERID_FAILURE |
|
||||||
)<{ memberName: string; hpno: string }, string, AxiosError>(); |
|
||||||
|
|
||||||
export const sendForPw = createAsyncAction( |
|
||||||
SEND_FORPW_REQUEST, |
|
||||||
SEND_FORPW_SUCCESS, |
|
||||||
SEND_FORPW_FAILURE |
|
||||||
)<{ userId: string; hpno: string }, string, AxiosError>(); |
|
||||||
|
|
||||||
export const updateUserPw = createAsyncAction( |
|
||||||
UPDATE_USERPW_REQUEST, |
|
||||||
UPDATE_USERPW_SUCCESS, |
|
||||||
UPDATE_USERPW_FAILURE |
|
||||||
)<{ userId: string; hpno: string; newPw: string }, string, AxiosError>(); |
|
||||||
|
|
||||||
const actions = { |
|
||||||
sendForId, |
|
||||||
findUserId, |
|
||||||
sendForPw, |
|
||||||
updateUserPw |
|
||||||
}; |
|
||||||
|
|
||||||
export type FindAction = ActionType<typeof actions>; |
|
@ -1,31 +0,0 @@ |
|||||||
import axios from '../../../utils/customAxiosUtil'; |
|
||||||
|
|
||||||
export const findAPI = { |
|
||||||
// 아이디 찾기 인증번호 발송
|
|
||||||
sendForId: async param => { |
|
||||||
return await axios.get( |
|
||||||
`api/acnt/crtfyhp/find/sendForId?memberName=${param.memberName}&hpno=${param.hpno}` |
|
||||||
); |
|
||||||
}, |
|
||||||
|
|
||||||
// 아이디 찾기
|
|
||||||
getUserId: async param => { |
|
||||||
return await axios.get( |
|
||||||
`api/acnt/crtfyhp/find/findUserId?memberName=${param.memberName}&hpno=${param.hpno}` |
|
||||||
); |
|
||||||
}, |
|
||||||
|
|
||||||
// 비밀번호 찾기 인증번호 발송
|
|
||||||
sendForPw: async param => { |
|
||||||
return await axios.get( |
|
||||||
`api/acnt/crtfyhp/find/sendForPw?userId=${param.userId}&hpno=${param.hpno}` |
|
||||||
); |
|
||||||
}, |
|
||||||
|
|
||||||
// 비밀번호 변경
|
|
||||||
updatePw: async param => { |
|
||||||
return await axios.get( |
|
||||||
`api/acnt/crtfyhp/find/updatePw?userId=${param.userId}&hpno=${param.hpno}&newPw=${param.newPw}` |
|
||||||
); |
|
||||||
} |
|
||||||
}; |
|
@ -1,5 +0,0 @@ |
|||||||
export * from './actions'; |
|
||||||
export * from './apis'; |
|
||||||
export * from './models'; |
|
||||||
export * from './reducers'; |
|
||||||
export * from './sagas'; |
|
@ -1,12 +0,0 @@ |
|||||||
export interface IFindState { |
|
||||||
idResult: string | undefined; |
|
||||||
userId: string | undefined; |
|
||||||
pwResult: string | undefined; |
|
||||||
udResult: string | undefined; |
|
||||||
} |
|
||||||
export const initFind: IFindState = { |
|
||||||
idResult: undefined, |
|
||||||
userId: undefined, |
|
||||||
pwResult: undefined, |
|
||||||
udResult: undefined |
|
||||||
}; |
|
@ -1,36 +0,0 @@ |
|||||||
// base
|
|
||||||
import produce from 'immer'; |
|
||||||
|
|
||||||
import { createReducer } from 'typesafe-actions'; |
|
||||||
|
|
||||||
// action
|
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { IFindState, initFind } from '../models'; |
|
||||||
|
|
||||||
export const findReducer = createReducer<IFindState, Actions.FindAction>( |
|
||||||
initFind |
|
||||||
) |
|
||||||
.handleAction(Actions.sendForId.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const data = action.payload; |
|
||||||
draft.idResult = data; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.findUserId.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const data = action.payload; |
|
||||||
draft.userId = data; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.sendForPw.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const data = action.payload; |
|
||||||
draft.pwResult = data; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.updateUserPw.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const data = action.payload; |
|
||||||
draft.udResult = data; |
|
||||||
}) |
|
||||||
); |
|
@ -1,61 +0,0 @@ |
|||||||
import { call, put, takeEvery } from 'redux-saga/effects'; |
|
||||||
// packages
|
|
||||||
import { ActionType } from 'typesafe-actions'; |
|
||||||
// modules
|
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { findAPI } from '../apis'; |
|
||||||
|
|
||||||
function* sendForIdSaga(action: ActionType<typeof Actions.sendForId.request>) { |
|
||||||
try { |
|
||||||
const { memberName, hpno } = action.payload; |
|
||||||
|
|
||||||
const res = yield call(findAPI.sendForId, { memberName, hpno }); |
|
||||||
yield put(Actions.sendForId.success(res)); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.sendForId.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* findUserIdSaga( |
|
||||||
action: ActionType<typeof Actions.findUserId.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
const { memberName, hpno } = action.payload; |
|
||||||
|
|
||||||
const res = yield call(findAPI.getUserId, { memberName, hpno }); |
|
||||||
yield put(Actions.findUserId.success(res)); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.findUserId.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* sendForPwSaga(action: ActionType<typeof Actions.sendForPw.request>) { |
|
||||||
try { |
|
||||||
const { userId, hpno } = action.payload; |
|
||||||
|
|
||||||
const res = yield call(findAPI.sendForPw, { userId, hpno }); |
|
||||||
yield put(Actions.sendForPw.success(res)); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.sendForPw.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* updateUserPwSaga( |
|
||||||
action: ActionType<typeof Actions.updateUserPw.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
const { userId, hpno, newPw } = action.payload; |
|
||||||
|
|
||||||
const res = yield call(findAPI.updatePw, { userId, hpno, newPw }); |
|
||||||
yield put(Actions.updateUserPw.success(res)); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.updateUserPw.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
export function* findSaga() { |
|
||||||
yield takeEvery(Actions.sendForId.request, sendForIdSaga); |
|
||||||
yield takeEvery(Actions.findUserId.request, findUserIdSaga); |
|
||||||
yield takeEvery(Actions.sendForPw.request, sendForPwSaga); |
|
||||||
yield takeEvery(Actions.updateUserPw.request, updateUserPwSaga); |
|
||||||
} |
|
@ -1,40 +0,0 @@ |
|||||||
import { AxiosError } from 'axios'; |
|
||||||
import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; |
|
||||||
import { DefaultSearchModel } from '../../../models/ComnModel'; |
|
||||||
import { IGetTermsListRs, IRegisterRq, IAgreeTerms } from '../models'; |
|
||||||
|
|
||||||
// 회원가입
|
|
||||||
const REGISTER_REQUEST = 'account/register/REGISTER_REQUEST'; |
|
||||||
const REGISTER_SUCCESS = 'account/register/REGISTER_SUCCESS'; |
|
||||||
const REGISTER_FAILURE = 'account/register/REGISTER_FAILURE'; |
|
||||||
|
|
||||||
// 약관 리스트
|
|
||||||
const GET_TERMS_LIST_REQUEST = 'account/terms/GET_TERMS_LIST_REQUEST'; |
|
||||||
const GET_TERMS_LIST_SUCCESS = 'account/terms/GET_TERMS_LIST_SUCCESS'; |
|
||||||
const GET_TERMS_LIST_FAILURE = 'account/terms/GET_TERMS_LIST_FAILURE'; |
|
||||||
|
|
||||||
// 사용자가 체크한 약관 목록
|
|
||||||
const CLIENT_AGREE_TERMS = 'account/terms/CLIENT_AGREE_TERMS'; |
|
||||||
|
|
||||||
export const register = createAsyncAction( |
|
||||||
REGISTER_REQUEST, |
|
||||||
REGISTER_SUCCESS, |
|
||||||
REGISTER_FAILURE |
|
||||||
)<IRegisterRq, string, AxiosError>(); |
|
||||||
|
|
||||||
export const getTermsList = createAsyncAction( |
|
||||||
GET_TERMS_LIST_REQUEST, |
|
||||||
GET_TERMS_LIST_SUCCESS, |
|
||||||
GET_TERMS_LIST_FAILURE |
|
||||||
)<DefaultSearchModel, IGetTermsListRs[], AxiosError>(); |
|
||||||
|
|
||||||
export const clientAgreeTerms = |
|
||||||
createAction(CLIENT_AGREE_TERMS)<IAgreeTerms[]>(); |
|
||||||
|
|
||||||
const actions = { |
|
||||||
register, |
|
||||||
getTermsList, |
|
||||||
clientAgreeTerms |
|
||||||
}; |
|
||||||
|
|
||||||
export type AccountAction = ActionType<typeof actions>; |
|
@ -1,36 +0,0 @@ |
|||||||
import axios from '../../../utils/customAxiosUtil'; |
|
||||||
|
|
||||||
import qs from 'qs'; |
|
||||||
import { IRegisterRq } from '../models'; |
|
||||||
import { DefaultSearchModel } from '../../../models/ComnModel'; |
|
||||||
import { ACCOUNT } from '../../../../configs/constants'; |
|
||||||
|
|
||||||
export const accountAPI = { |
|
||||||
// 회원가입
|
|
||||||
register: async (data: IRegisterRq) => { |
|
||||||
const param = { |
|
||||||
...data.data, |
|
||||||
...ACCOUNT, |
|
||||||
terms: data.agreeTerms |
|
||||||
}; |
|
||||||
return await axios.post('api/acnt/cstmr/register', param); |
|
||||||
}, |
|
||||||
// 약관 목록
|
|
||||||
getTemrsList: async (param: DefaultSearchModel) => { |
|
||||||
const queryString = qs.stringify(param, { |
|
||||||
addQueryPrefix: true, |
|
||||||
arrayFormat: 'repeat' |
|
||||||
}); |
|
||||||
return await axios.get(`api/acnt/terms/list` + queryString); |
|
||||||
}, |
|
||||||
// 인증번호 발송
|
|
||||||
sendCrtfyhp: async (hpno: string) => { |
|
||||||
return await axios.get(`api/acnt/crtfyhp/register/send?hpno=${hpno}`); |
|
||||||
}, |
|
||||||
// 인증번호 확인
|
|
||||||
confirmCrtfyhp: async (hpno: string, crtfyNo: string) => { |
|
||||||
return await axios.get( |
|
||||||
`api/acnt/crtfyhp/register/confirm?hpno=${hpno}&crtfyNo=${crtfyNo}` |
|
||||||
); |
|
||||||
} |
|
||||||
}; |
|
@ -1,5 +0,0 @@ |
|||||||
export * from './actions'; |
|
||||||
export * from './apis'; |
|
||||||
export * from './models'; |
|
||||||
export * from './reducers'; |
|
||||||
export * from './sagas'; |
|
@ -1,54 +0,0 @@ |
|||||||
export const initAccount: IAccountState = { |
|
||||||
data: undefined, |
|
||||||
agreeTerms: undefined, |
|
||||||
termsList: undefined, |
|
||||||
errCode: undefined |
|
||||||
}; |
|
||||||
|
|
||||||
export interface IAccountState { |
|
||||||
data: IRegisterData | undefined; |
|
||||||
agreeTerms: IAgreeTerms[] | undefined; |
|
||||||
termsList: IGetTermsListRs[] | undefined; |
|
||||||
errCode: string | undefined; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IRegisterRq { |
|
||||||
data: IRegisterData | undefined; |
|
||||||
agreeTerms: IAgreeTerms[] | undefined; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IRegisterData { |
|
||||||
cstrmDivCd: string; |
|
||||||
cstrmStatusCd: string; |
|
||||||
userId: string; |
|
||||||
authId: string; |
|
||||||
siteCode: string; |
|
||||||
memberDivCd: string; |
|
||||||
userPswd: string; |
|
||||||
ipinDi: string; |
|
||||||
ipinCi: string; |
|
||||||
joinCrtfyCd: string; |
|
||||||
cntryCd: string; |
|
||||||
genderCd: string; |
|
||||||
memberName: string; |
|
||||||
brthdyDate: string; |
|
||||||
email: string; |
|
||||||
hpno: string; |
|
||||||
clncd: string; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IAgreeTerms { |
|
||||||
termsSno: number; |
|
||||||
agreeYn: string; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IGetTermsListRs { |
|
||||||
termsSno: number; |
|
||||||
siteCd: string; |
|
||||||
estbshDate: string; |
|
||||||
termsCtgryCd: string; |
|
||||||
langDivCd: string; |
|
||||||
termsTitleNm: string; |
|
||||||
termsCn: string; |
|
||||||
simpleCn: string; |
|
||||||
} |
|
@ -1,22 +0,0 @@ |
|||||||
import { createReducer } from 'typesafe-actions'; |
|
||||||
import produce from 'immer'; |
|
||||||
|
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { initAccount, IAccountState } from '../models'; |
|
||||||
|
|
||||||
export const accountReducer = createReducer< |
|
||||||
IAccountState, |
|
||||||
Actions.AccountAction |
|
||||||
>(initAccount) |
|
||||||
.handleAction(Actions.clientAgreeTerms, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const res = action.payload; |
|
||||||
draft.agreeTerms = res; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.getTermsList.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const res = action.payload; |
|
||||||
draft.termsList = res; |
|
||||||
}) |
|
||||||
); |
|
@ -1,51 +0,0 @@ |
|||||||
import { call, put, takeEvery } from '@redux-saga/core/effects'; |
|
||||||
import { ActionType } from 'typesafe-actions'; |
|
||||||
|
|
||||||
import * as Actions from '../actions'; |
|
||||||
import * as Apis from '../apis'; |
|
||||||
import * as Models from '../models'; |
|
||||||
|
|
||||||
function* registerSaga(action: ActionType<typeof Actions.register.request>) { |
|
||||||
try { |
|
||||||
const { data, agreeTerms } = action.payload; |
|
||||||
|
|
||||||
const res = yield call(Apis.accountAPI.register, { data, agreeTerms }); |
|
||||||
|
|
||||||
const resData = res.data; |
|
||||||
|
|
||||||
if (resData.errrCode > 0) { |
|
||||||
yield put(Actions.register.success(resData)); |
|
||||||
} else { |
|
||||||
yield put(Actions.register.failure(resData)); |
|
||||||
} |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.register.failure(error)); |
|
||||||
// yield put(Actions.createNoticeAction.failure(error));
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* getTermsListSaga( |
|
||||||
action: ActionType<typeof Actions.getTermsList.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
const { langDivCd, siteCd, termsCtgryCd } = action.payload; |
|
||||||
|
|
||||||
const res = yield call(Apis.accountAPI.getTemrsList, { |
|
||||||
langDivCd, |
|
||||||
siteCd, |
|
||||||
termsCtgryCd |
|
||||||
}); |
|
||||||
|
|
||||||
const resData: Models.IGetTermsListRs[] = res.data; |
|
||||||
|
|
||||||
yield put(Actions.getTermsList.success(resData)); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getTermsList.failure(error)); |
|
||||||
// yield put(Actions.createNoticeAction.failure(error));
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
export function* accountSaga() { |
|
||||||
yield takeEvery(Actions.register.request, registerSaga); |
|
||||||
yield takeEvery(Actions.getTermsList.request, getTermsListSaga); |
|
||||||
} |
|
@ -1,66 +0,0 @@ |
|||||||
import { AxiosError } from 'axios'; |
|
||||||
import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; |
|
||||||
import { |
|
||||||
IGetHstryDetailRs, |
|
||||||
IGetHstryListRs, |
|
||||||
IGetHstryLogRs, |
|
||||||
IHistoryState |
|
||||||
} from '../models'; |
|
||||||
|
|
||||||
// 비행 이력 현황 목록
|
|
||||||
const GET_HSTRY_LIST_REQUEST = 'anls/hstry/GET_HSTRY_LIST_REQUEST'; |
|
||||||
const GET_HSTRY_LIST_SUCCESS = 'anls/hstry/GET_HSTRY_LIST_SUCCESS'; |
|
||||||
const GET_HSTRY_LIST_FAILURE = 'anls/hstry/GET_HSTRY_LIST_FAILURE'; |
|
||||||
|
|
||||||
// 비행 이력 로그
|
|
||||||
const GET_HSTRY_LOG_REQUEST = 'anls/hstry/GET_HSTRY_LOG_REQUEST'; |
|
||||||
const GET_HSTRY_LOG_SUCCESS = 'anls/hstry/GET_HSTRY_LOG_SUCCESS'; |
|
||||||
const GET_HSTRY_LOG_FAILURE = 'anls/hstry/GET_HSTRY_LOG_FAILURE'; |
|
||||||
|
|
||||||
// 비행 이력 상세
|
|
||||||
const GET_HSTRY_DETAIL_REQUEST = 'anls/hstry/GET_HSTRY_DETAIL_REQUEST'; |
|
||||||
const GET_HSTRY_DETAIL_SUCCESS = 'anls/hstry/GET_HSTRY_DETAIL_SUCCESS'; |
|
||||||
const GET_HSTRY_DETAIL_FAILURE = 'anls/hstry/GET_HSTRY_DETAIL_FAILURE'; |
|
||||||
|
|
||||||
// 검색 조건 저장
|
|
||||||
const CLIENT_SEARCH_PARAM = 'anls/hstry/CLIENT_SEARCH_PARAM'; |
|
||||||
|
|
||||||
// 그룹 선택 시 검색 데이터 저장
|
|
||||||
const CLIENT_SELECT_HSTRY_GROUP = 'anls/hstry/CLIENT_SELECT_HSTRY_GROUP'; |
|
||||||
|
|
||||||
export const getHstryList = createAsyncAction( |
|
||||||
GET_HSTRY_LIST_REQUEST, |
|
||||||
GET_HSTRY_LIST_SUCCESS, |
|
||||||
GET_HSTRY_LIST_FAILURE |
|
||||||
)< |
|
||||||
IHistoryState, |
|
||||||
{ data: IGetHstryListRs[]; count: number; total: number }, |
|
||||||
AxiosError |
|
||||||
>(); |
|
||||||
|
|
||||||
export const getHstryLog = createAsyncAction( |
|
||||||
GET_HSTRY_LOG_REQUEST, |
|
||||||
GET_HSTRY_LOG_SUCCESS, |
|
||||||
GET_HSTRY_LOG_FAILURE |
|
||||||
)<string, { log: IGetHstryLogRs[] }, AxiosError>(); |
|
||||||
|
|
||||||
export const getHstryDetail = createAsyncAction( |
|
||||||
GET_HSTRY_DETAIL_REQUEST, |
|
||||||
GET_HSTRY_DETAIL_SUCCESS, |
|
||||||
GET_HSTRY_DETAIL_FAILURE |
|
||||||
)<string, { detail: IGetHstryDetailRs }, AxiosError>(); |
|
||||||
|
|
||||||
export const clientSearchParam = |
|
||||||
createAction(CLIENT_SEARCH_PARAM)<{ searchParams: string }>(); |
|
||||||
|
|
||||||
export const clientSelectHstryGroup = createAction(CLIENT_SELECT_HSTRY_GROUP)(); |
|
||||||
|
|
||||||
const actions = { |
|
||||||
getHstryList, |
|
||||||
getHstryLog, |
|
||||||
getHstryDetail, |
|
||||||
clientSearchParam, |
|
||||||
clientSelectHstryGroup |
|
||||||
}; |
|
||||||
|
|
||||||
export type AnalysisHistoryAction = ActionType<typeof actions>; |
|
@ -1,19 +0,0 @@ |
|||||||
import axios from '../../../utils/customAxiosUtil'; |
|
||||||
import qs from 'qs'; |
|
||||||
|
|
||||||
export const historyAPI = { |
|
||||||
getHstryList: async (data: string, page: number) => { |
|
||||||
const queryString = qs.stringify(data, { |
|
||||||
addQueryPrefix: true, |
|
||||||
arrayFormat: 'repeat' |
|
||||||
}); |
|
||||||
|
|
||||||
return await axios.get(`/api/anls/hstry/list${queryString}&page=${page}`); |
|
||||||
}, |
|
||||||
getHstryLog: async (id: string) => { |
|
||||||
return await axios.get(`/api/anls/hstry/log/${id}`); |
|
||||||
}, |
|
||||||
getHstryDetail: async (id: string) => { |
|
||||||
return await axios.get(`/api/anls/hstry/detail/${id}`); |
|
||||||
} |
|
||||||
}; |
|
@ -1,5 +0,0 @@ |
|||||||
export * from './actions'; |
|
||||||
export * from './apis'; |
|
||||||
export * from './models'; |
|
||||||
export * from './reducers'; |
|
||||||
export * from './sagas'; |
|
@ -1,80 +0,0 @@ |
|||||||
export const initHistory: IHistoryState = { |
|
||||||
data: undefined, |
|
||||||
detail: undefined, |
|
||||||
log: undefined, |
|
||||||
count: 0, |
|
||||||
searchParams: '', |
|
||||||
arrSpeed: undefined, |
|
||||||
arrElev: undefined, |
|
||||||
page: 1, |
|
||||||
total: 0, |
|
||||||
id: undefined |
|
||||||
}; |
|
||||||
|
|
||||||
export interface IHistoryState { |
|
||||||
data: IGetHstryListRs[] | undefined; |
|
||||||
detail: IGetHstryDetailRs | undefined; |
|
||||||
log: IGetHstryLogRs[] | undefined; |
|
||||||
count: number | 0; |
|
||||||
searchParams: string; |
|
||||||
arrSpeed: number[] | undefined; |
|
||||||
arrElev: number[] | undefined; |
|
||||||
page: number | 1; |
|
||||||
total: number | 0; |
|
||||||
id: string | undefined; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IGetHstryListRs { |
|
||||||
cntrlId: string; |
|
||||||
idntfNum: string; |
|
||||||
cntrlStDt: Date; |
|
||||||
cntrlEndDt: Date; |
|
||||||
ttlTime: number; |
|
||||||
ttlDstnc: number; |
|
||||||
avrgSpeed: number; |
|
||||||
bttrCnsmptn: number; |
|
||||||
area1: string; |
|
||||||
area2: string; |
|
||||||
area3: string; |
|
||||||
landNm?: string; |
|
||||||
landNum: string; |
|
||||||
stArea: string; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IGetHstryDetailRs { |
|
||||||
cntrlId: string; |
|
||||||
idntfNum: string; |
|
||||||
statusCd: string; |
|
||||||
objectTypeCd: string; |
|
||||||
cntrlStDt: Date; |
|
||||||
cntrlEndDt: Date; |
|
||||||
ttlTime: number; |
|
||||||
ttlDstnc: number; |
|
||||||
ttlDstncType: string; |
|
||||||
avrgSpped: number; |
|
||||||
bttrCnsmptn: number; |
|
||||||
endTypeCd: string; |
|
||||||
createDt: Date; |
|
||||||
updateDt: Date; |
|
||||||
} |
|
||||||
|
|
||||||
export interface IGetHstryLogRs { |
|
||||||
hstrySno: number; |
|
||||||
cntrlId: string; |
|
||||||
idntfNum: string; |
|
||||||
trmnlId: string; |
|
||||||
mssgTypeCd: string; |
|
||||||
statusCd: string; |
|
||||||
lat: number; |
|
||||||
lon: number; |
|
||||||
speed: number; |
|
||||||
speedType: string; |
|
||||||
heading: number; |
|
||||||
elev: number; |
|
||||||
elevType: string; |
|
||||||
mvDstnc: number; |
|
||||||
bttrLvl: number; |
|
||||||
bttrVltg: number; |
|
||||||
trmnlRcvDt: Date; |
|
||||||
srvrRcvDt: Date; |
|
||||||
} |
|
@ -1,51 +0,0 @@ |
|||||||
import { createReducer } from 'typesafe-actions'; |
|
||||||
import produce from 'immer'; |
|
||||||
|
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { initHistory, IHistoryState } from '../models'; |
|
||||||
|
|
||||||
export const historyReducer = createReducer< |
|
||||||
IHistoryState, |
|
||||||
Actions.AnalysisHistoryAction |
|
||||||
>(initHistory) |
|
||||||
.handleAction(Actions.clientSearchParam, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { searchParams } = action.payload; |
|
||||||
draft.searchParams = searchParams; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.getHstryList.request, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { searchParams, page } = action.payload; |
|
||||||
draft.searchParams = searchParams; |
|
||||||
draft.page = page; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.getHstryList.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { data, count, total } = action.payload; |
|
||||||
|
|
||||||
draft.data = data; |
|
||||||
draft.count = count; |
|
||||||
draft.total = total; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.getHstryDetail.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { detail } = action.payload; |
|
||||||
draft.detail = detail; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.getHstryLog.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { log } = action.payload; |
|
||||||
draft.log = log; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.clientSelectHstryGroup, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
draft.data = initHistory.data; |
|
||||||
draft.count = initHistory.count; |
|
||||||
draft.total = initHistory.total; |
|
||||||
}) |
|
||||||
); |
|
@ -1,71 +0,0 @@ |
|||||||
import { call, put, takeEvery } from '@redux-saga/core/effects'; |
|
||||||
import { ActionType } from 'typesafe-actions'; |
|
||||||
|
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { historyAPI } from '../apis'; |
|
||||||
|
|
||||||
function* getHstryListSaga( |
|
||||||
action: ActionType<typeof Actions.getHstryList.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
const { searchParams, page } = action.payload; |
|
||||||
|
|
||||||
const res = yield call(historyAPI.getHstryList, searchParams, page); |
|
||||||
const { |
|
||||||
data: { items, total }, |
|
||||||
count |
|
||||||
} = res; |
|
||||||
|
|
||||||
yield put( |
|
||||||
Actions.getHstryList.success({ |
|
||||||
data: items, |
|
||||||
count, |
|
||||||
total |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getHstryList.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* getHstryLogSaga( |
|
||||||
action: ActionType<typeof Actions.getHstryLog.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
const id = action.payload; |
|
||||||
const res = yield call(historyAPI.getHstryLog, id); |
|
||||||
const { data } = res; |
|
||||||
|
|
||||||
yield put( |
|
||||||
Actions.getHstryLog.success({ |
|
||||||
log: data |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getHstryLog.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* getHstryDetailSaga( |
|
||||||
action: ActionType<typeof Actions.getHstryDetail.request> |
|
||||||
) { |
|
||||||
try { |
|
||||||
const id = action.payload; |
|
||||||
const res = yield call(historyAPI.getHstryDetail, id); |
|
||||||
yield put(Actions.getHstryLog.request(id)); |
|
||||||
const { data } = res; |
|
||||||
yield put( |
|
||||||
Actions.getHstryDetail.success({ |
|
||||||
detail: data |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getHstryDetail.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
export function* analysisHistorySaga() { |
|
||||||
yield takeEvery(Actions.getHstryList.request, getHstryListSaga); |
|
||||||
yield takeEvery(Actions.getHstryDetail.request, getHstryDetailSaga); |
|
||||||
yield takeEvery(Actions.getHstryLog.request, getHstryLogSaga); |
|
||||||
} |
|
@ -1,72 +0,0 @@ |
|||||||
import { AxiosError } from 'axios'; |
|
||||||
import { ActionType, createAction, createAsyncAction } from 'typesafe-actions'; |
|
||||||
import { |
|
||||||
AnalysisSimulatorData, |
|
||||||
AnalysisSimulatorLogData, |
|
||||||
AnalysisSimulatorState, |
|
||||||
AnalysisSimulatorStcsData |
|
||||||
} from '../models'; |
|
||||||
|
|
||||||
// 시뮬레이션 목록
|
|
||||||
const GET_SMLT_LIST_REQUEST = 'anls/smlt/GET_SMLT_LIST_REQUEST'; |
|
||||||
const GET_SMLT_LIST_SUCCESS = 'anls/smlt/GET_SMLT_LIST_SUCCESS'; |
|
||||||
const GET_SMLT_LIST_FAILURE = 'anls/smlt/GET_SMLT_LIST_FAILURE'; |
|
||||||
|
|
||||||
// 시뮬레이션 상세 로그 목록
|
|
||||||
const GET_SMLT_LOG_REQUEST = 'anls/smlt/GET_SMLT_LOG_REQUEST'; |
|
||||||
const GET_SMLT_LOG_SUCCESS = 'anls/smlt/GET_SMLT_LOG_SUCCESS'; |
|
||||||
const GET_SMLT_LOG_FAILURE = 'anls/smlt/GET_SMLT_LOG_FAILURE'; |
|
||||||
|
|
||||||
// 시뮬레이션 상세 정보
|
|
||||||
const GET_SMLT_DETAIL_REQUEST = 'anls/smlt/GET_SMLT_DETAIL_REQUEST'; |
|
||||||
const GET_SMLT_DETAIL_SUCCESS = 'anls/smlt/GET_SMLT_DETAIL_SUCCESS'; |
|
||||||
const GET_SMLT_DETAIL_FAILURE = 'anls/smlt/GET_SMLT_DETAIL_FAILURE'; |
|
||||||
|
|
||||||
// 시뮬레이션 분 단위 통계 정보
|
|
||||||
const GET_SMLT_STCS_REQUEST = 'anls/smlt/GET_SMLT_STCS_REQUEST'; |
|
||||||
const GET_SMLT_STCS_SUCCESS = 'anls/smlt/GET_SMLT_STCS_SUCCESS'; |
|
||||||
const GET_SMLT_STCS_FAILURE = 'anls/smlt/GET_SMLT_STCS_FAILURE'; |
|
||||||
|
|
||||||
// 검색 조건 저장
|
|
||||||
const CLIENT_SEARCH_PARAM = 'anls/smlt/CLIENT_SEARCH_PARAM'; |
|
||||||
|
|
||||||
export const getSmltList = createAsyncAction( |
|
||||||
GET_SMLT_LIST_REQUEST, |
|
||||||
GET_SMLT_LIST_SUCCESS, |
|
||||||
GET_SMLT_LIST_FAILURE |
|
||||||
)< |
|
||||||
AnalysisSimulatorState, |
|
||||||
{ data: AnalysisSimulatorData[]; count: number; total: number; page: number }, |
|
||||||
AxiosError |
|
||||||
>(); |
|
||||||
|
|
||||||
export const getSmltLog = createAsyncAction( |
|
||||||
GET_SMLT_LOG_REQUEST, |
|
||||||
GET_SMLT_LOG_SUCCESS, |
|
||||||
GET_SMLT_LOG_FAILURE |
|
||||||
)<string, { log: AnalysisSimulatorLogData[] }, AxiosError>(); |
|
||||||
|
|
||||||
export const getSmltDetail = createAsyncAction( |
|
||||||
GET_SMLT_DETAIL_REQUEST, |
|
||||||
GET_SMLT_DETAIL_SUCCESS, |
|
||||||
GET_SMLT_DETAIL_FAILURE |
|
||||||
)<string, { data: AnalysisSimulatorData }, AxiosError>(); |
|
||||||
|
|
||||||
export const getSmltStcs = createAsyncAction( |
|
||||||
GET_SMLT_STCS_REQUEST, |
|
||||||
GET_SMLT_STCS_SUCCESS, |
|
||||||
GET_SMLT_STCS_FAILURE |
|
||||||
)<string, { data: AnalysisSimulatorStcsData[]; count: number }, AxiosError>(); |
|
||||||
|
|
||||||
export const clientSearchParam = |
|
||||||
createAction(CLIENT_SEARCH_PARAM)<{ searchParams: string }>(); |
|
||||||
|
|
||||||
const actions = { |
|
||||||
getSmltList, |
|
||||||
getSmltDetail, |
|
||||||
getSmltLog, |
|
||||||
getSmltStcs, |
|
||||||
clientSearchParam |
|
||||||
}; |
|
||||||
|
|
||||||
export type AnalysisSimulatorAction = ActionType<typeof actions>; |
|
@ -1,28 +0,0 @@ |
|||||||
import qs from 'qs'; |
|
||||||
import axios from '../../../utils/customAxiosUtil'; |
|
||||||
|
|
||||||
export const analysisSimulator = { |
|
||||||
//비행 현황 목록
|
|
||||||
getSmltList: async (data: string, page: number) => { |
|
||||||
const queryString = qs.stringify(data, { |
|
||||||
addQueryPrefix: true, |
|
||||||
arrayFormat: 'repeat' |
|
||||||
}); |
|
||||||
|
|
||||||
return await axios.get(`/api/anls/smlt/list${queryString}&page=${page}`); |
|
||||||
}, |
|
||||||
// 비행 이력 데이터 조회
|
|
||||||
getSmltLog: async (id: string) => { |
|
||||||
return await axios.get(`/api/anls/smlt/hist/${id}`); |
|
||||||
}, |
|
||||||
|
|
||||||
//비행 상세 데이터 조회
|
|
||||||
getSmltDetail: async (id: string) => { |
|
||||||
return await axios.get(`/api/anls/smlt/detail/${id}`); |
|
||||||
}, |
|
||||||
|
|
||||||
//비행 통계 데이터 조회
|
|
||||||
getSmltStcs: async (id: string) => { |
|
||||||
return await axios.get(`/api/anls/smlt/stcs/${id}`); |
|
||||||
} |
|
||||||
}; |
|
@ -1,5 +0,0 @@ |
|||||||
export * from './actions'; |
|
||||||
export * from './apis'; |
|
||||||
export * from './models'; |
|
||||||
export * from './reducers'; |
|
||||||
export * from './sagas'; |
|
@ -1,78 +0,0 @@ |
|||||||
export interface AnalysisSimulatorState { |
|
||||||
list: AnalysisSimulatorData[] | undefined; |
|
||||||
detail: AnalysisSimulatorData | undefined; |
|
||||||
count: number | 0; |
|
||||||
log: AnalysisSimulatorLogData[] | undefined; |
|
||||||
searchParams: string; |
|
||||||
stcsList: AnalysisSimulatorStcsData[] | undefined; |
|
||||||
stcsCount: number | 0; |
|
||||||
page: number | 1; |
|
||||||
total: number | 0; |
|
||||||
} |
|
||||||
|
|
||||||
export interface AnalysisSimulatorData { |
|
||||||
cntrlId: string; |
|
||||||
idntfNum: string; |
|
||||||
flghtStDt: Date; |
|
||||||
flghtEndDt: Date; |
|
||||||
cntrlStDt: Date; |
|
||||||
cntrlEndDt: Date; |
|
||||||
ttlTime: number; |
|
||||||
ttlTimeType: string; |
|
||||||
ttlDstnc: number; |
|
||||||
ttlDstncType: string; |
|
||||||
avrgSpeed: number; |
|
||||||
avrgSpeedType: string; |
|
||||||
bttrCnsmptn: number; |
|
||||||
stArea: string; |
|
||||||
endArea: string; |
|
||||||
arcrftTypeCd: string; |
|
||||||
prdctNum: string; |
|
||||||
arcrftModelNm: string; |
|
||||||
imageUrl: string; |
|
||||||
} |
|
||||||
|
|
||||||
export interface AnalysisSimulatorLogData { |
|
||||||
hstrySno: number; |
|
||||||
cntrlId: string; |
|
||||||
trmnlId: string; |
|
||||||
mssgTypeCd: string; |
|
||||||
statusCd: string; |
|
||||||
lat: number; |
|
||||||
lon: number; |
|
||||||
speed: number; |
|
||||||
speedType: string; |
|
||||||
heading: number; |
|
||||||
elev: number; |
|
||||||
elevType: string; |
|
||||||
mvDstnc: number; |
|
||||||
bttrLvl: number; |
|
||||||
bttrVltg: number; |
|
||||||
trmnlRcvDt: string; |
|
||||||
srvrRcvDt: string; |
|
||||||
} |
|
||||||
|
|
||||||
export interface AnalysisSimulatorStcsData { |
|
||||||
dateCd: string; |
|
||||||
timeCd: string; |
|
||||||
avrgSpeed: number; |
|
||||||
speedType: string; |
|
||||||
avrgElev: number; |
|
||||||
elevType: string; |
|
||||||
avrgMvDstnc: number; |
|
||||||
mvDstncType: string; |
|
||||||
minBttrLvl: number; |
|
||||||
maxBttrLvl: number; |
|
||||||
} |
|
||||||
|
|
||||||
export const initialState: AnalysisSimulatorState = { |
|
||||||
list: undefined, |
|
||||||
detail: undefined, |
|
||||||
count: 0, |
|
||||||
log: undefined, |
|
||||||
searchParams: '', |
|
||||||
stcsList: undefined, |
|
||||||
stcsCount: 0, |
|
||||||
page: 1, |
|
||||||
total: 0 |
|
||||||
}; |
|
@ -1,59 +0,0 @@ |
|||||||
import produce from 'immer'; |
|
||||||
import { createReducer } from 'typesafe-actions'; |
|
||||||
import * as Actions from '../actions'; |
|
||||||
import { AnalysisSimulatorState, initialState } from '../models'; |
|
||||||
|
|
||||||
export const analysisSimulatorReducer = createReducer< |
|
||||||
AnalysisSimulatorState, |
|
||||||
Actions.AnalysisSimulatorAction |
|
||||||
>(initialState) |
|
||||||
.handleAction(Actions.clientSearchParam, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { searchParams } = action.payload; |
|
||||||
draft.searchParams = searchParams; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.getSmltList.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { data, count, total, page } = action.payload; |
|
||||||
if (!state.list) { |
|
||||||
draft.list = data; |
|
||||||
} else { |
|
||||||
if (page === 1) { |
|
||||||
draft.list = data; |
|
||||||
draft.page = page; |
|
||||||
return; |
|
||||||
} |
|
||||||
draft.list = state.list?.concat(data); |
|
||||||
} |
|
||||||
|
|
||||||
draft.page = page; |
|
||||||
draft.count = count; |
|
||||||
draft.total = total; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.getSmltDetail.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { data } = action.payload; |
|
||||||
draft.detail = data; |
|
||||||
}) |
|
||||||
) |
|
||||||
.handleAction(Actions.getSmltStcs.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { data, count } = action.payload; |
|
||||||
draft.stcsList = data; |
|
||||||
draft.stcsCount = count; |
|
||||||
}) |
|
||||||
) |
|
||||||
|
|
||||||
.handleAction(Actions.getSmltLog.success, (state, action) => |
|
||||||
produce(state, draft => { |
|
||||||
const { log } = action.payload; |
|
||||||
const data = log.sort((p: any, n: any): any => { |
|
||||||
const a = p.srvrRcvDt.replace(/[^0-9\.]+/g, ''); |
|
||||||
const b = n.srvrRcvDt.replace(/[^0-9\.]+/g, ''); |
|
||||||
return a - b; |
|
||||||
}); |
|
||||||
draft.log = log; |
|
||||||
}) |
|
||||||
); |
|
@ -1,86 +0,0 @@ |
|||||||
import { call, put, takeEvery } from '@redux-saga/core/effects'; |
|
||||||
import { ActionType } from 'typesafe-actions'; |
|
||||||
import * as Actions from '../actions'; |
|
||||||
import * as Apis from '../apis'; |
|
||||||
|
|
||||||
function* listSaga(action: ActionType<typeof Actions.getSmltList.request>) { |
|
||||||
try { |
|
||||||
const { searchParams, page } = action.payload; |
|
||||||
const res = yield call( |
|
||||||
Apis.analysisSimulator.getSmltList, |
|
||||||
searchParams, |
|
||||||
page |
|
||||||
); |
|
||||||
const { |
|
||||||
data: { items, total }, |
|
||||||
count |
|
||||||
} = res; |
|
||||||
|
|
||||||
yield put( |
|
||||||
Actions.getSmltList.success({ |
|
||||||
data: items, |
|
||||||
count: count, |
|
||||||
total, |
|
||||||
page: res.data.page |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getSmltList.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* detailSaga(action: ActionType<typeof Actions.getSmltDetail.request>) { |
|
||||||
try { |
|
||||||
const id = action.payload; |
|
||||||
const res = yield call(Apis.analysisSimulator.getSmltDetail, id); |
|
||||||
// yield put(Actions.getSmltLog.request(id));
|
|
||||||
const { data } = res; |
|
||||||
yield put( |
|
||||||
Actions.getSmltDetail.success({ |
|
||||||
data: data |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getSmltDetail.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* stcsSaga(action: ActionType<typeof Actions.getSmltStcs.request>) { |
|
||||||
try { |
|
||||||
const id = action.payload; |
|
||||||
const res = yield call(Apis.analysisSimulator.getSmltStcs, id); |
|
||||||
// yield put(Actions.getSmltLog.request(id));
|
|
||||||
const { data, count } = res; |
|
||||||
yield put( |
|
||||||
Actions.getSmltStcs.success({ |
|
||||||
data: data, |
|
||||||
count: count |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getSmltDetail.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function* logSaga(action: ActionType<typeof Actions.getSmltLog.request>) { |
|
||||||
try { |
|
||||||
const id = action.payload; |
|
||||||
const res = yield call(Apis.analysisSimulator.getSmltLog, id); |
|
||||||
const { data } = res; |
|
||||||
|
|
||||||
yield put( |
|
||||||
Actions.getSmltLog.success({ |
|
||||||
log: data |
|
||||||
}) |
|
||||||
); |
|
||||||
} catch (error: any) { |
|
||||||
yield put(Actions.getSmltLog.failure(error)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
export function* analysisSimulatorSaga() { |
|
||||||
yield takeEvery(Actions.getSmltList.request, listSaga); |
|
||||||
yield takeEvery(Actions.getSmltDetail.request, detailSaga); |
|
||||||
yield takeEvery(Actions.getSmltStcs.request, stcsSaga); |
|
||||||
yield takeEvery(Actions.getSmltLog.request, logSaga); |
|
||||||
} |
|
@ -1,145 +0,0 @@ |
|||||||
import { AxiosError } from 'axios'; |
|
||||||
import { createAsyncAction, ActionType, createAction } from 'typesafe-actions'; |
|
||||||
|
|
||||||
import { |
|
||||||
IDrone, |
|
||||||
ISelectGroup, |
|
||||||
IIdntf, |
|
||||||
IUpdateIdntfRq, |
|
||||||
ICreateDroneRq, |
|
||||||
IUpdateDroneRq, |
|
||||||
ICreateIdntfRq |
|
||||||
} from '../models'; |
|
||||||
|
|
||||||
// 드론 목록 조회
|
|
||||||
const GET_DRONE_LIST_REQUEST = 'basis/drone/GET_DRONE_LIST_REQUEST'; |
|
||||||
const GET_DRONE_LIST_SUCCESS = 'basis/drone/GET_DRONE_LIST_SUCCESS'; |
|
||||||
const GET_DRONE_LIST_FAILURE = 'basis/drone/GET_DRONE_LIST_FAILURE'; |
|
||||||
|
|
||||||
// 드론 상세 조회
|
|
||||||
const GET_DRONE_DETAIL_REQUEST = 'basis/drone/GET_DRONE_DETAIL_REQUEST'; |
|
||||||
const GET_DRONE_DETAIL_SUCCESS = 'basis/drone/GET_DRONE_DETAIL_SUCCESS'; |
|
||||||
const GET_DRONE_DETAIL_FAILURE = 'basis/drone/GET_DRONE_DETAIL_FAILURE'; |
|
||||||
|
|
||||||
// 드론 생성
|
|
||||||
const CREATE_DRONE_REQUEST = 'basis/drone/CREATE_DRONE_REQUEST'; |
|
||||||
const CREATE_DRONE_SUCCESS = 'basis/drone/CREATE_DRONE_SUCCESS'; |
|
||||||
const CREATE_DRONE_FAILURE = 'basis/drone/CREATE_DRONE_FAILURE'; |
|
||||||
|
|
||||||
// 드론 수정
|
|
||||||
const UPDATE_DRONE_REQUEST = 'basis/drone/UPDATE_DRONE_REQUEST'; |
|
||||||
const UPDATE_DRONE_SUCCESS = 'basis/drone/UPDATE_DRONE_SUCCESS'; |
|
||||||
const UPDATE_DRONE_FAILURE = 'basis/drone/UPDATE_DRONE_FAILURE'; |
|
||||||
|
|
||||||
// 드론 삭제
|
|
||||||
const DELETE_DRONE_REQUEST = 'basis/drone/DELETE_DRONE_REQUEST'; |
|
||||||
const DELETE_DRONE_SUCCESS = 'basis/drone/DELETE_DRONE_SUCCESS'; |
|
||||||
const DELETE_DRONE_FAILURE = 'basis/drone/DELETE_DRONE_FAILURE'; |
|
||||||
|
|
||||||
// 식별장치 조회
|
|
||||||
const GET_IDNTF_LIST_REQUEST = 'basis/idntf/GET_IDNTF_LIST_REQUEST'; |
|
||||||
const GET_IDNTF_LIST_SUCCESS = 'basis/idntf/GET_IDNTF_LIST_SUCCESS'; |
|
||||||
const GET_IDNTF_LIST_FAILURE = 'basis/idntf/GET_IDNTF_LIST_FAILURE'; |
|
||||||
|
|
||||||
// 식별장치 생성
|
|
||||||
const CREATE_IDNTF_REQUEST = 'basis/idntf/CREATE_IDNTF_REQUEST'; |
|
||||||
const CREATE_IDNTF_SUCCESS = 'basis/idntf/CREATE_IDNTF_SUCCESS'; |
|
||||||
const CREATE_IDNTF_FAILURE = 'basis/idntf/CREATE_IDNTF_FAILURE'; |
|
||||||
|
|
||||||
// 식별장치 수정
|
|
||||||
const UPDATE_IDNTF_REQUEST = 'basis/idntf/UPDATE_IDNTF_REQUEST'; |
|
||||||
const UPDATE_IDNTF_SUCCESS = 'basis/idntf/UPDATE_IDNTF_SUCCESS'; |
|
||||||
const UPDATE_IDNTF_FAILURE = 'basis/idntf/UPDATE_IDNTF_FAILURE'; |
|
||||||
|
|
||||||
//식별장치 삭제
|
|
||||||
const DELETE_IDNTF_REQUEST = 'basis/idntf/DELETE_IDNTF_REQUEST'; |
|
||||||
const DELETE_IDNTF_SUCCESS = 'basis/idntf/DELETE_IDNTF_SUCCESS'; |
|
||||||
const DELETE_IDNTF_FAILURE = 'basis/idntf/DELETE_IDNTF_FAILURE'; |
|
||||||
|
|
||||||
// 드론 탭에서 그룹 선택
|
|
||||||
const CLIENT_SELECT_GROUP = 'basis/drone/CLIENT_SELECT_GROUP'; |
|
||||||
|
|
||||||
const CLIENT_RESET_IDNTF = 'basis/idntf/CLIENT_RESET_IDNTF'; |
|
||||||
|
|
||||||
export const getDroneList = createAsyncAction( |
|
||||||
GET_DRONE_LIST_REQUEST, |
|
||||||
GET_DRONE_LIST_SUCCESS, |
|
||||||
GET_DRONE_LIST_FAILURE |
|
||||||
)<string, { data: IDrone[]; total: number }, AxiosError>(); |
|
||||||
|
|
||||||
export const getDroneDetail = createAsyncAction( |
|
||||||
GET_DRONE_DETAIL_REQUEST, |
|
||||||
GET_DRONE_DETAIL_SUCCESS, |
|
||||||
GET_DRONE_DETAIL_FAILURE |
|
||||||
)<number, IDrone, AxiosError>(); |
|
||||||
|
|
||||||
export const createDrone = createAsyncAction( |
|
||||||
CREATE_DRONE_REQUEST, |
|
||||||
CREATE_DRONE_SUCCESS, |
|
||||||
CREATE_DRONE_FAILURE |
|
||||||
)<ICreateDroneRq, string, AxiosError>(); |
|
||||||
|
|
||||||
export const updateDrone = createAsyncAction( |
|
||||||
UPDATE_DRONE_REQUEST, |
|
||||||
UPDATE_DRONE_SUCCESS, |
|
||||||
UPDATE_DRONE_FAILURE |
|
||||||
)<IUpdateDroneRq, string, AxiosError>(); |
|
||||||
|
|
||||||
export const deleteDrone = createAsyncAction( |
|
||||||
DELETE_DRONE_REQUEST, |
|
||||||
DELETE_DRONE_SUCCESS, |
|
||||||
DELETE_DRONE_FAILURE |
|
||||||
)<number, string, AxiosError>(); |
|
||||||
|
|
||||||
export const getIdntfList = createAsyncAction( |
|
||||||
GET_IDNTF_LIST_REQUEST, |
|
||||||
GET_IDNTF_LIST_SUCCESS, |
|
||||||
GET_IDNTF_LIST_FAILURE |
|
||||||
)<number, { data: IIdntf[]; count: number }, AxiosError>(); |
|
||||||
|
|
||||||
export const createIdntf = createAsyncAction( |
|
||||||
CREATE_IDNTF_REQUEST, |
|
||||||
CREATE_IDNTF_SUCCESS, |
|
||||||
CREATE_IDNTF_FAILURE |
|
||||||
)< |
|
||||||
{ mode: string; data: ICreateIdntfRq[]; arcrftSno: number }, |
|
||||||
string, |
|
||||||
AxiosError |
|
||||||
>(); |
|
||||||
|
|
||||||
export const updateIdntf = createAsyncAction( |
|
||||||
UPDATE_IDNTF_REQUEST, |
|
||||||
UPDATE_IDNTF_SUCCESS, |
|
||||||
UPDATE_IDNTF_FAILURE |
|
||||||
)< |
|
||||||
{ mode: string; data: IUpdateIdntfRq[]; arcrftSno: number }, |
|
||||||
string, |
|
||||||
AxiosError |
|
||||||
>(); |
|
||||||
|
|
||||||
export const deleteIdntf = createAsyncAction( |
|
||||||
DELETE_IDNTF_REQUEST, |
|
||||||
DELETE_IDNTF_SUCCESS, |
|
||||||
DELETE_IDNTF_FAILURE |
|
||||||
)<string, string, AxiosError>(); |
|
||||||
|
|
||||||
export const clientSelectGroup = |
|
||||||
createAction(CLIENT_SELECT_GROUP)<ISelectGroup>(); |
|
||||||
|
|
||||||
export const clientResetIdntf = createAction(CLIENT_RESET_IDNTF)(); |
|
||||||
|
|
||||||
const actions = { |
|
||||||
getDroneList, |
|
||||||
getDroneDetail, |
|
||||||
createDrone, |
|
||||||
updateDrone, |
|
||||||
deleteDrone, |
|
||||||
getIdntfList, |
|
||||||
createIdntf, |
|
||||||
updateIdntf, |
|
||||||
deleteIdntf, |
|
||||||
clientResetIdntf, |
|
||||||
clientSelectGroup |
|
||||||
}; |
|
||||||
|
|
||||||
export type DronAction = ActionType<typeof actions>; |
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue