-
-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathcreate-initial-user.use.case.ts
More file actions
60 lines (52 loc) · 2.52 KB
/
Copy pathcreate-initial-user.use.case.ts
File metadata and controls
60 lines (52 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { BadRequestException, Inject, Injectable } from '@nestjs/common';
import AbstractUseCase from '../../../common/abstract-use.case.js';
import { IGlobalDatabaseContext } from '../../../common/application/global-database-context.interface.js';
import { BaseType } from '../../../common/data-injection.tokens.js';
import { SimpleFoundUserInfoDs } from '../../../entities/user/dto/found-user.dto.js';
import { ICreateInitialUserUseCase } from './selfhosted-use-cases.interfaces.js';
import { CreateInitialUserDs } from '../data-structures/create-initial-user.ds.js';
import { isSaaS } from '../../../helpers/app/is-saas.js';
import { Messages } from '../../../exceptions/text/messages.js';
import { RegisterUserDs } from '../../../entities/user/application/data-structures/register-user-ds.js';
import { UserRoleEnum } from '../../../entities/user/enums/user-role.enum.js';
import { buildRegisteringUser } from '../../../entities/user/utils/build-registering-user.util.js';
import { CompanyInfoEntity } from '../../../entities/company-info/company-info.entity.js';
import { Encryptor } from '../../../helpers/encryption/encryptor.js';
import { buildSimpleUserInfoDs } from '../../../entities/user/utils/build-created-user.ds.js';
@Injectable()
export class CreateInitialUserUseCase
extends AbstractUseCase<CreateInitialUserDs, SimpleFoundUserInfoDs>
implements ICreateInitialUserUseCase
{
constructor(
@Inject(BaseType.GLOBAL_DB_CONTEXT)
protected _dbContext: IGlobalDatabaseContext,
) {
super();
}
protected async implementation(inputData: CreateInitialUserDs): Promise<SimpleFoundUserInfoDs> {
if (isSaaS()) {
throw new BadRequestException(Messages.ENDPOINT_NOT_AVAILABLE_IN_THIS_MODE);
}
const userCount = await this._dbContext.userRepository.count();
if (userCount > 0) {
throw new BadRequestException(Messages.SELF_HOSTED_ALREADY_CONFIGURED);
}
const { email, password } = inputData;
const registerUserData: RegisterUserDs = {
email: email,
password: password,
isActive: true,
gclidValue: null,
name: 'Admin',
role: UserRoleEnum.ADMIN,
};
const savedUser = await this._dbContext.userRepository.saveUserEntity(buildRegisteringUser(registerUserData));
const newCompanyInfo = new CompanyInfoEntity();
newCompanyInfo.id = Encryptor.generateUUID();
const savedCompanyInfo = await this._dbContext.companyInfoRepository.save(newCompanyInfo);
savedUser.company = savedCompanyInfo;
const finalUser = await this._dbContext.userRepository.saveUserEntity(savedUser);
return buildSimpleUserInfoDs(finalUser);
}
}