40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { Service, Inject } from 'typedi';
|
|
import { omit } from 'lodash';
|
|
import moment from 'moment';
|
|
import events from '@/subscribers/events';
|
|
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
|
import { IAcceptInviteEventPayload } from '@/interfaces';
|
|
|
|
@Service()
|
|
export default class SyncTenantAcceptInvite {
|
|
@Inject()
|
|
private tenancy: HasTenancyService;
|
|
|
|
/**
|
|
* Attaches events with handlers.
|
|
* @param bus
|
|
*/
|
|
public attach(bus) {
|
|
bus.subscribe(events.inviteUser.acceptInvite, this.syncTenantAcceptInvite);
|
|
}
|
|
|
|
/**
|
|
* Syncs accept invite to tenant user.
|
|
* @param {IAcceptInviteEventPayload} payload -
|
|
*/
|
|
private syncTenantAcceptInvite = async ({
|
|
inviteToken,
|
|
user,
|
|
inviteUserDTO,
|
|
}: IAcceptInviteEventPayload) => {
|
|
const { User } = this.tenancy.models(inviteToken.tenantId);
|
|
|
|
await User.query()
|
|
.where('systemUserId', inviteToken.userId)
|
|
.update({
|
|
...omit(inviteUserDTO, ['password']),
|
|
inviteAcceptedAt: moment().format('YYYY-MM-DD'),
|
|
});
|
|
};
|
|
}
|