UNPKG

mychips-react-sdk

Version:
136 lines (118 loc) 3.88 kB
import AsyncStorage from '@react-native-async-storage/async-storage'; import type { MCGenderEnum } from '../domain/MCGenderEnum'; export class UserService { private static USER_ID_KEY = 'user_id'; private static ADVERTISING_ID_KEY = 'advertising_id'; private static GENDER_KEY = 'gender'; private static AGE_KEY = 'age'; private static EMAIL_KEY = 'email'; private static CURRENCY_KEY = 'partner_virtual_currency'; async setId(userId: string): Promise<void> { try { await AsyncStorage.setItem(UserService.USER_ID_KEY, userId); } catch (error) { console.error('Failed to set user ID', error); } } async getOrCreateId(): Promise<string> { try { let userId = await AsyncStorage.getItem(UserService.USER_ID_KEY); if (!userId) { userId = this.generateUUID(); await this.setId(userId); } return userId; } catch (error) { console.error('Failed to get or create user ID', error); throw error; } } async setAdvertisingId(advertisingId: string): Promise<void> { try { await AsyncStorage.setItem(UserService.ADVERTISING_ID_KEY, advertisingId); } catch (error) { console.error('Failed to set advertising ID', error); } } async getAdvertisingId(): Promise<string> { try { const advertisingId = await AsyncStorage.getItem(UserService.ADVERTISING_ID_KEY); return advertisingId || ''; } catch (error) { console.error('Failed to get advertising ID', error); return ''; } } async setAge(age: number): Promise<void> { try { await AsyncStorage.setItem(UserService.AGE_KEY, age.toString()); } catch (error) { console.error('Failed to set age', error); } } async getAge(): Promise<number> { try { const age = await AsyncStorage.getItem(UserService.AGE_KEY); return age ? parseInt(age, 10) : -1; } catch (error) { console.error('Failed to get age', error); return -1; } } async setGender(gender: MCGenderEnum): Promise<void> { try { await AsyncStorage.setItem(UserService.GENDER_KEY, gender.toString()); } catch (error) { console.error('Failed to set gender', error); } } async getGender(): Promise<string> { try { const gender = await AsyncStorage.getItem(UserService.GENDER_KEY); return gender || ''; } catch (error) { console.error('Failed to get gender', error); return ''; } } async setEmail(email: string): Promise<void> { try { await AsyncStorage.setItem(UserService.EMAIL_KEY, email); } catch (error) { console.error('Failed to set email', error); } } async getEmail(): Promise<string> { try { const email = await AsyncStorage.getItem(UserService.EMAIL_KEY); return email || ''; } catch (error) { console.error('Failed to get email', error); return ''; } } async setCurrentTotalCurrency(vc: number): Promise<void> { try { await AsyncStorage.setItem(UserService.CURRENCY_KEY, vc.toString()); } catch (error) { console.error('Failed to set currency', error); } } async getCurrentTotalCurrency(): Promise<number> { try { const currency = await AsyncStorage.getItem(UserService.CURRENCY_KEY); return currency ? parseFloat(currency) : -1; } catch (error) { console.error('Failed to get currency', error); return -1; } } private generateUUID(): string { // Generate a simple UUID return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { const r = (Math.random() * 16) | 0; const v = c === 'x' ? r : (r & 0x3) | 0x8; return v.toString(16); }); } }