import { LogAndError } from '@birbal/common-utilities/dist/error'; import { SpecializationInfoModel, ISpecializationInfoBody, ISpecializationInfo } from '../../Model/Demography/specialization'; import { VirtualBaseResource } from '../../Utility/Profile/virtual'; export class SpecializationResource extends VirtualBaseResource { protected ID_TYPE = "specialization"; constructor(dbName: string, superSecret: string) { super(dbName, superSecret); } async setInfo(userId: string, details: ISpecializationInfoBody, dbTxnId?: string): Promise { if (!userId || !details) { throw new LogAndError("Invalid userid or details"); } try { let [virtualId, state] = await this.makeEntry(userId, dbTxnId); // console.log("wwwwwwww" , userId, details); // Set details let model = new SpecializationInfoModel(this.DATABASE_NAME); await model.defineSchema(); let body: ISpecializationInfo = { specializationInfo: { virtualId: virtualId , info: details , status: state } } // console.log("wwwwwwww" , userId, details); await model.upsert(userId, body, dbTxnId); return virtualId; } catch (e) { // console.log("uuuuuuuuu"); throw e; } } async performAction( virtualId: string , action: 'remove' | 'reject' | 'approve' | 'expire' | 'revoke' , dbTxnId?: string ) { if (!virtualId || !action) { throw new LogAndError("Invalid virtual id or action"); } if (!this.SUPER_SECRET || !this.DATABASE_NAME) { throw new LogAndError("Invalid dbname or super secret"); } try { let [state, userId] = await this.updateStatus(virtualId, action, dbTxnId); let model = new SpecializationInfoModel(this.DATABASE_NAME); await model.defineSchema(); let infoDoc = await model.find(userId, dbTxnId); let info = model.getDataModel(infoDoc); if (!info ) { throw new LogAndError("Invalid info details"); } // console.log("tttttttt" , info, info.specializationInfo); if (!info.specializationInfo){ throw new LogAndError("invalid") } info.specializationInfo.status = state; await model.update(userId, info, dbTxnId); } catch (e) { throw e; } } }