mychips-react-sdk
Version:
MyChips Offerwall
136 lines (118 loc) • 3.88 kB
text/typescript
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);
});
}
}