import { DyFM_Error, DyFM_DBFilter } from '@futdevpro/fsm-dynamo'; import { DyNTS_DataService } from '../../../_services/base/data.service'; import { DyNTS_global_settings } from '../../../_collections/global-settings.const'; import { DyNTS_Default_User, DyNTS_defaultUser_dataParams } from '../_models/default-user.data-model'; /** * Default User Data Service * Handles CRUD operations for default users */ export class DyNTS_Default_User_DataService extends DyNTS_DataService { constructor( set: { user?: DyNTS_Default_User; issuer: string; } ) { super( new DyNTS_Default_User(set?.user), DyNTS_defaultUser_dataParams, set.issuer ); } /** * Find user by username */ async findByUsername(username: string): Promise { try { await this.dataDBService .findOne({ username, __deleted: { $exists: false } } as DyFM_DBFilter) .then(res => { if (res) { this.data = res; } }); return this.data._id ? this.data : null; } catch (error) { throw new DyFM_Error({ ...this.getDefaultErrorSettings('findByUsername', error), errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEF-FBU`, userMessage: 'Failed to find user by username.', }); } } /** * Find user by email */ async findByEmail(email: string): Promise { try { await this.dataDBService .findOne({ email, __deleted: { $exists: false } } as DyFM_DBFilter) .then(res => { if (res) { this.data = res; } }); return this.data._id ? this.data : null; } catch (error) { throw new DyFM_Error({ ...this.getDefaultErrorSettings('findByEmail', error), errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEF-FBE`, userMessage: 'Failed to find user by email.', }); } } /** * Update last login timestamp */ async updateLastLogin(userId: string): Promise { try { const user = await this.getDataById(userId); if (!user) { throw new Error('User not found'); } user.lastLoginAt = new Date(); await this.saveData(user); } catch (error) { throw new DyFM_Error({ ...this.getDefaultErrorSettings('updateLastLogin', error), errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEF-ULI`, userMessage: 'Failed to update last login timestamp.', }); } } }