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