UNPKG

@lomray/microservice-users

Version:

Users microservice based on NodeJS & inverted json.

88 lines (84 loc) 3.44 kB
'use strict'; 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;