@lomray/microservice-users
Version:
Users microservice based on NodeJS & inverted json.
88 lines (84 loc) • 3.44 kB
JavaScript
;
var tslib = require('tslib');
var microserviceNodejsLib = require('@lomray/microservice-nodejs-lib');
var UsersEvents = require('@lomray/microservices-client-api/constants/events/users');
var typeorm = require('typeorm');
var identityProvider = require('../entities/identity-provider.js');
var profile = require('../entities/profile.js');
var user = require('../entities/user.js');
var User_1;
let User = User_1 = class User {
/**
* This subscriber only for User entity
*/
listenTo() {
return user;
}
/**
* 1. Create profile when we create new user
* 2. Generate username
*/
afterInsert({ entity, manager, }) {
const profileRepository = manager.getRepository(profile);
const userRepository = manager.getRepository(user);
if (!entity.username) {
entity.username = entity.id.replace(/-/g, '');
}
void microserviceNodejsLib.Microservice.eventPublish(UsersEvents.UserCreate, entity);
return Promise.all([
userRepository.update({ id: entity.id }, { username: entity.username }),
profileRepository.save(profileRepository.create({ userId: entity.id })),
]);
}
/**
* Also soft delete or restore user profile
* @inheritDoc
*/
afterUpdate(event) {
return tslib.__awaiter(this, void 0, void 0, function* () {
const profileRepository = event.manager.getRepository(profile);
const idProviderRepository = event.manager.getRepository(identityProvider);
if (User_1.isRecovered(event)) {
yield Promise.all([
profileRepository.restore({ userId: event.databaseEntity.id }),
idProviderRepository.restore({ userId: event.databaseEntity.id }),
]);
void microserviceNodejsLib.Microservice.eventPublish(UsersEvents.UserRestore, { entity: event.entity });
}
else if (User_1.isSoftRemoved(event)) {
yield Promise.all([
profileRepository.softDelete({ userId: event.databaseEntity.id }),
idProviderRepository.softDelete({ userId: event.databaseEntity.id }),
]);
void microserviceNodejsLib.Microservice.eventPublish(UsersEvents.UserRemove, { entity: event.entity });
}
else {
/**
* If user data were updated
*/
void microserviceNodejsLib.Microservice.eventPublish(UsersEvents.UserUpdate, event.entity);
}
});
}
/**
* Detect if user is soft removed
* @private
*/
static isSoftRemoved({ entity, databaseEntity }) {
var _a;
return typeof ((_a = entity === null || entity === void 0 ? void 0 : entity.deletedAt) === null || _a === void 0 ? void 0 : _a.toString()) === 'string' && databaseEntity.deletedAt === null;
}
/**
* Detect if user is restored
* @private
*/
static isRecovered({ entity, databaseEntity }) {
var _a;
return (entity === null || entity === void 0 ? void 0 : entity.deletedAt) === null && typeof ((_a = databaseEntity.deletedAt) === null || _a === void 0 ? void 0 : _a.toString()) === 'string';
}
};
User = User_1 = tslib.__decorate([
typeorm.EventSubscriber()
], User);
var User$1 = User;
module.exports = User$1;