96 lines
2.6 KiB
TypeScript
96 lines
2.6 KiB
TypeScript
import type { UserProfile } from "@/types/api";
|
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
|
|
const STORAGE_KEYS = {
|
|
ACCESS_TOKEN: "access_token",
|
|
REFRESH_TOKEN: "refresh_token",
|
|
USER: "user",
|
|
ODDS_SETTINGS: "odds_settings",
|
|
CARDS_SETTINGS: "cards_settings",
|
|
};
|
|
|
|
export interface OddsSettings {
|
|
enabled: boolean;
|
|
selectedBookmakers: string[];
|
|
}
|
|
|
|
export interface CardsSettings {
|
|
enabled: boolean;
|
|
}
|
|
|
|
export const storage = {
|
|
async setAccessToken(token: string): Promise<void> {
|
|
await AsyncStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, token);
|
|
},
|
|
|
|
async getAccessToken(): Promise<string | null> {
|
|
return await AsyncStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN);
|
|
},
|
|
|
|
async setRefreshToken(token: string): Promise<void> {
|
|
await AsyncStorage.setItem(STORAGE_KEYS.REFRESH_TOKEN, token);
|
|
},
|
|
|
|
async getRefreshToken(): Promise<string | null> {
|
|
return await AsyncStorage.getItem(STORAGE_KEYS.REFRESH_TOKEN);
|
|
},
|
|
|
|
async setUser(user: UserProfile): Promise<void> {
|
|
await AsyncStorage.setItem(STORAGE_KEYS.USER, JSON.stringify(user));
|
|
},
|
|
|
|
async getUser(): Promise<UserProfile | null> {
|
|
const userStr = await AsyncStorage.getItem(STORAGE_KEYS.USER);
|
|
if (!userStr) return null;
|
|
try {
|
|
return JSON.parse(userStr) as UserProfile;
|
|
} catch {
|
|
return null;
|
|
}
|
|
},
|
|
|
|
async setOddsSettings(settings: OddsSettings): Promise<void> {
|
|
await AsyncStorage.setItem(
|
|
STORAGE_KEYS.ODDS_SETTINGS,
|
|
JSON.stringify(settings),
|
|
);
|
|
},
|
|
|
|
async getOddsSettings(): Promise<OddsSettings> {
|
|
const settingsStr = await AsyncStorage.getItem(STORAGE_KEYS.ODDS_SETTINGS);
|
|
if (!settingsStr) return { enabled: false, selectedBookmakers: [] };
|
|
try {
|
|
return JSON.parse(settingsStr) as OddsSettings;
|
|
} catch {
|
|
return { enabled: false, selectedBookmakers: [] };
|
|
}
|
|
},
|
|
|
|
async setCardsSettings(settings: CardsSettings): Promise<void> {
|
|
await AsyncStorage.setItem(
|
|
STORAGE_KEYS.CARDS_SETTINGS,
|
|
JSON.stringify(settings),
|
|
);
|
|
},
|
|
|
|
async getCardsSettings(): Promise<CardsSettings> {
|
|
const settingsStr = await AsyncStorage.getItem(STORAGE_KEYS.CARDS_SETTINGS);
|
|
if (!settingsStr) return { enabled: false };
|
|
try {
|
|
return JSON.parse(settingsStr) as CardsSettings;
|
|
} catch {
|
|
return { enabled: false };
|
|
}
|
|
},
|
|
|
|
async clear(): Promise<void> {
|
|
await AsyncStorage.multiRemove([
|
|
STORAGE_KEYS.ACCESS_TOKEN,
|
|
STORAGE_KEYS.REFRESH_TOKEN,
|
|
STORAGE_KEYS.USER,
|
|
STORAGE_KEYS.ODDS_SETTINGS,
|
|
STORAGE_KEYS.CARDS_SETTINGS,
|
|
]);
|
|
},
|
|
};
|