You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.0 KiB
TypeScript

import { DeepPartial } from 'utility-types';
import { MessageModel } from '@/database/client/models/message';
import { SessionModel } from '@/database/client/models/session';
import { UserModel } from '@/database/client/models/user';
import { UserGuide, UserInitializationState, UserPreference } from '@/types/user';
import { UserSettings } from '@/types/user/settings';
import { AsyncLocalStorage } from '@/utils/localStorage';
import { IUserService } from './type';
export class ClientService implements IUserService {
private preferenceStorage: AsyncLocalStorage<UserPreference>;
constructor() {
this.preferenceStorage = new AsyncLocalStorage('LOBE_PREFERENCE');
}
async getUserState(): Promise<UserInitializationState> {
const user = await UserModel.getUser();
const messageCount = await MessageModel.count();
const sessionCount = await SessionModel.count();
console.log(user,2827272727)
localStorage.setItem('userId',user.uuid)
return {
avatar: user.avatar,
canEnablePWAGuide: messageCount >= 4,
canEnableTrace: messageCount >= 4,
hasConversation: messageCount > 0 || sessionCount > 0,
isOnboard: true,
preference: await this.preferenceStorage.getFromLocalStorage(),
settings: user.settings as UserSettings,
userId: user.uuid,
};
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
updateUserSettings = async (patch: DeepPartial<UserSettings>, _?: any) => {
return UserModel.updateSettings(patch);
};
resetUserSettings = async () => {
return UserModel.resetSettings();
};
updateAvatar(avatar: string) {
return UserModel.updateAvatar(avatar);
}
async updatePreference(preference: Partial<UserPreference>) {
await this.preferenceStorage.saveToLocalStorage(preference);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars,unused-imports/no-unused-vars
async updateGuide(guide: Partial<UserGuide>) {
throw new Error('Method not implemented.');
}
}