전체적인 리팩토링
This commit is contained in:
95
features/settings/lib/kis-remember-storage.ts
Normal file
95
features/settings/lib/kis-remember-storage.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* [파일 역할]
|
||||
* KIS 설정 화면의 "기억하기" 항목(localStorage) 키와 읽기/쓰기 유틸을 관리합니다.
|
||||
*
|
||||
* [주요 책임]
|
||||
* - 앱키/앱시크릿키/계좌번호의 기억하기 체크 상태 저장
|
||||
* - 기억하기 값 저장/조회/삭제
|
||||
* - 로그아웃/세션만료 시 일괄 정리할 키 목록 제공
|
||||
*/
|
||||
|
||||
export type KisRememberField = "appKey" | "appSecret" | "accountNo";
|
||||
|
||||
const KIS_REMEMBER_ENABLED_KEY_MAP = {
|
||||
appKey: "autotrade-kis-remember-app-key-enabled",
|
||||
appSecret: "autotrade-kis-remember-app-secret-enabled",
|
||||
accountNo: "autotrade-kis-remember-account-no-enabled",
|
||||
} as const;
|
||||
|
||||
const KIS_REMEMBER_VALUE_KEY_MAP = {
|
||||
appKey: "autotrade-kis-remember-app-key",
|
||||
appSecret: "autotrade-kis-remember-app-secret",
|
||||
accountNo: "autotrade-kis-remember-account-no",
|
||||
} as const;
|
||||
|
||||
export const KIS_REMEMBER_LOCAL_STORAGE_KEYS = [
|
||||
...Object.values(KIS_REMEMBER_ENABLED_KEY_MAP),
|
||||
...Object.values(KIS_REMEMBER_VALUE_KEY_MAP),
|
||||
] as const;
|
||||
|
||||
function getBrowserLocalStorage() {
|
||||
if (typeof window === "undefined") {
|
||||
return null;
|
||||
}
|
||||
|
||||
return window.localStorage;
|
||||
}
|
||||
|
||||
function readLocalStorage(key: string) {
|
||||
const storage = getBrowserLocalStorage();
|
||||
if (!storage) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return storage.getItem(key) ?? "";
|
||||
}
|
||||
|
||||
function writeLocalStorage(key: string, value: string) {
|
||||
const storage = getBrowserLocalStorage();
|
||||
if (!storage) {
|
||||
return;
|
||||
}
|
||||
|
||||
storage.setItem(key, value);
|
||||
}
|
||||
|
||||
function removeLocalStorage(key: string) {
|
||||
const storage = getBrowserLocalStorage();
|
||||
if (!storage) {
|
||||
return;
|
||||
}
|
||||
|
||||
storage.removeItem(key);
|
||||
}
|
||||
|
||||
export function isKisRememberEnabled(field: KisRememberField) {
|
||||
return readLocalStorage(KIS_REMEMBER_ENABLED_KEY_MAP[field]) === "1";
|
||||
}
|
||||
|
||||
export function setKisRememberEnabled(field: KisRememberField, enabled: boolean) {
|
||||
const enabledKey = KIS_REMEMBER_ENABLED_KEY_MAP[field];
|
||||
if (enabled) {
|
||||
writeLocalStorage(enabledKey, "1");
|
||||
return;
|
||||
}
|
||||
|
||||
removeLocalStorage(enabledKey);
|
||||
removeLocalStorage(KIS_REMEMBER_VALUE_KEY_MAP[field]);
|
||||
}
|
||||
|
||||
export function getRememberedKisValue(field: KisRememberField) {
|
||||
return readLocalStorage(KIS_REMEMBER_VALUE_KEY_MAP[field]);
|
||||
}
|
||||
|
||||
export function setRememberedKisValue(field: KisRememberField, value: string) {
|
||||
const normalized = value.trim();
|
||||
const valueKey = KIS_REMEMBER_VALUE_KEY_MAP[field];
|
||||
|
||||
if (!normalized) {
|
||||
removeLocalStorage(valueKey);
|
||||
return;
|
||||
}
|
||||
|
||||
writeLocalStorage(valueKey, normalized);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user