Files
physical-expo/lib/storage.ts

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,
]);
},
};