@mshima/generator-jhipster-nodejs 0.0.0-stage → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +204 -0
- package/README.md +243 -2
- package/build-info.json +3 -0
- package/cli/cli-customizations.cjs +9 -0
- package/cli/cli.cjs +40 -0
- package/cli/logo.js +31 -0
- package/cli/version.cjs +12 -0
- package/generators/ci-cd/USAGE +5 -0
- package/generators/ci-cd/command.js +5 -0
- package/generators/ci-cd/generator.js +158 -0
- package/generators/ci-cd/index.js +2 -0
- package/generators/ci-cd/templates/.gitlab-ci.yml.ejs +137 -0
- package/generators/ci-cd/templates/azure-pipelines.yml.ejs +68 -0
- package/generators/ci-cd/templates/circle.yml.ejs +59 -0
- package/generators/ci-cd/templates/docker-registry.yml.ejs +58 -0
- package/generators/ci-cd/templates/github-ci.yml.ejs +90 -0
- package/generators/ci-cd/templates/jenkins/Jenkinsfile.ejs +104 -0
- package/generators/ci-cd/templates/jenkins/idea.gdsl +90 -0
- package/generators/ci-cd/templates/jenkins/jenkins.yml.ejs +33 -0
- package/generators/ci-cd/templates/travis.yml.ejs +75 -0
- package/generators/client/command.js +5 -0
- package/generators/client/generator.js +21 -0
- package/generators/client/generators/bootstrap/command.js +5 -0
- package/generators/client/generators/bootstrap/generator.js +28 -0
- package/generators/client/generators/bootstrap/index.js +2 -0
- package/generators/client/index.js +2 -0
- package/generators/common/generators/bootstrap/command.js +5 -0
- package/generators/common/generators/bootstrap/generator.js +37 -0
- package/generators/common/generators/bootstrap/index.js +2 -0
- package/generators/docker/command.js +5 -0
- package/generators/docker/generator.js +16 -0
- package/generators/docker/generators/bootstrap/command.js +5 -0
- package/generators/docker/generators/bootstrap/generator.js +56 -0
- package/generators/docker/generators/bootstrap/index.js +2 -0
- package/generators/docker/index.js +2 -0
- package/generators/docker/templates/docker/app.yml.ejs +25 -0
- package/generators/generator-nodejs-constants.js +32 -0
- package/generators/languages/command.js +5 -0
- package/generators/languages/generator.js +22 -0
- package/generators/languages/index.js +2 -0
- package/generators/languages/templates/src/main/webapp/i18n/en/home.json +19 -0
- package/generators/languages/templates/src/main/webapp/i18n/es/home.json +19 -0
- package/generators/languages/templates/src/main/webapp/i18n/it/home.json +19 -0
- package/generators/node-server/command.js +96 -0
- package/generators/node-server/entity-files.js +26 -0
- package/generators/node-server/files.js +254 -0
- package/generators/node-server/generator.js +705 -0
- package/generators/node-server/generators/bootstrap/command.js +5 -0
- package/generators/node-server/generators/bootstrap/generator.js +84 -0
- package/generators/node-server/generators/bootstrap/index.js +2 -0
- package/generators/node-server/generators/migrations/command.js +5 -0
- package/generators/node-server/generators/migrations/files.js +42 -0
- package/generators/node-server/generators/migrations/generator.js +108 -0
- package/generators/node-server/generators/migrations/index.js +2 -0
- package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityConstraintsMigration_.ts.ejs +40 -0
- package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityMigration_.ts.ejs +26 -0
- package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityRemovedMigration_.ts.ejs +15 -0
- package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityUpdatedConstraintsMigration_.ts.ejs +60 -0
- package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityUpdatedMigration_.ts.ejs +28 -0
- package/generators/node-server/index.js +2 -0
- package/generators/node-server/resources/package.json +76 -0
- package/generators/node-server/support/api-fake-data.js +54 -0
- package/generators/node-server/support/columns.js +73 -0
- package/generators/node-server/support/database.js +24 -0
- package/generators/node-server/support/entity-authorities.js +32 -0
- package/generators/node-server/support/entity-paths.js +13 -0
- package/generators/node-server/support/enums.js +11 -0
- package/generators/node-server/support/index.js +9 -0
- package/generators/node-server/support/mail-templates.js +82 -0
- package/generators/node-server/support/migrations.js +376 -0
- package/generators/node-server/support/validators.js +25 -0
- package/generators/node-server/templates/.dockerignore.ejs +16 -0
- package/generators/node-server/templates/.gitignore.jhi.nodejs.ejs +24 -0
- package/generators/node-server/templates/Dockerfile.ejs +54 -0
- package/generators/node-server/templates/README.md.jhi.nodejs.ejs +220 -0
- package/generators/node-server/templates/package.json.ejs +82 -0
- package/generators/node-server/templates/server/README.md.ejs +277 -0
- package/generators/node-server/templates/server/e2e/_entityFileName_.database.e2e-spec.ts.ejs +192 -0
- package/generators/node-server/templates/server/e2e/_entityFileName_.e2e-spec.ts.ejs +402 -0
- package/generators/node-server/templates/server/e2e/account.e2e-spec.ts.ejs +349 -0
- package/generators/node-server/templates/server/e2e/app.e2e-spec.ts.ejs +188 -0
- package/generators/node-server/templates/server/e2e/authority.e2e-spec.ts.ejs +50 -0
- package/generators/node-server/templates/server/e2e/cors.e2e-spec.ts.ejs +110 -0
- package/generators/node-server/templates/server/e2e/management.e2e-spec.ts.ejs +180 -0
- package/generators/node-server/templates/server/e2e/oauth2-bearer.e2e-spec.ts.ejs +71 -0
- package/generators/node-server/templates/server/e2e/session.e2e-spec.ts.ejs +234 -0
- package/generators/node-server/templates/server/e2e/setup.test.js.ejs +1 -0
- package/generators/node-server/templates/server/e2e/user.e2e-spec.ts.ejs +318 -0
- package/generators/node-server/templates/server/env.ejs +1 -0
- package/generators/node-server/templates/server/eslint.config.mjs.ejs +48 -0
- package/generators/node-server/templates/server/nest-cli.json.ejs +11 -0
- package/generators/node-server/templates/server/ormconfig.ts.ejs +35 -0
- package/generators/node-server/templates/server/package.json.ejs +143 -0
- package/generators/node-server/templates/server/sonar-project.properties.ejs +10 -0
- package/generators/node-server/templates/server/src/app.config.spec.ts.ejs +13 -0
- package/generators/node-server/templates/server/src/app.config.ts.ejs +179 -0
- package/generators/node-server/templates/server/src/app.module.ts.ejs +80 -0
- package/generators/node-server/templates/server/src/application-config.ts.ejs +153 -0
- package/generators/node-server/templates/server/src/auth/account.controller.ts.ejs +183 -0
- package/generators/node-server/templates/server/src/auth/auth.module.ts.ejs +104 -0
- package/generators/node-server/templates/server/src/auth/auth.service.ts.ejs +294 -0
- package/generators/node-server/templates/server/src/auth/csrf.middleware.spec.ts.ejs +76 -0
- package/generators/node-server/templates/server/src/auth/csrf.middleware.ts.ejs +85 -0
- package/generators/node-server/templates/server/src/auth/decorators/auth-user.decorator.ts.ejs +8 -0
- package/generators/node-server/templates/server/src/auth/decorators/roles.decorator.ts.ejs +4 -0
- package/generators/node-server/templates/server/src/auth/dto/key-and-password.dto.ts.ejs +17 -0
- package/generators/node-server/templates/server/src/auth/dto/password-change.dto.ts.ejs +17 -0
- package/generators/node-server/templates/server/src/auth/dto/user-login.dto.ts.ejs +21 -0
- package/generators/node-server/templates/server/src/auth/guards/auth.guard.ts.ejs +50 -0
- package/generators/node-server/templates/server/src/auth/guards/oauth2-login.guard.ts.ejs +6 -0
- package/generators/node-server/templates/server/src/auth/guards/roles.guard.ts.ejs +25 -0
- package/generators/node-server/templates/server/src/auth/index.ts.ejs +8 -0
- package/generators/node-server/templates/server/src/auth/jwt.config.spec.ts.ejs +22 -0
- package/generators/node-server/templates/server/src/auth/jwt.config.ts.ejs +29 -0
- package/generators/node-server/templates/server/src/auth/oauth2.authorities.spec.ts.ejs +24 -0
- package/generators/node-server/templates/server/src/auth/oauth2.authorities.ts.ejs +33 -0
- package/generators/node-server/templates/server/src/auth/oauth2.config.ts.ejs +51 -0
- package/generators/node-server/templates/server/src/auth/passport.jwt.strategy.ts.ejs +45 -0
- package/generators/node-server/templates/server/src/auth/passport.oauth2-bearer.strategy.ts.ejs +32 -0
- package/generators/node-server/templates/server/src/auth/passport.oauth2.strategy.spec.ts.ejs +27 -0
- package/generators/node-server/templates/server/src/auth/passport.oauth2.strategy.ts.ejs +44 -0
- package/generators/node-server/templates/server/src/auth/password-util.ts.ejs +10 -0
- package/generators/node-server/templates/server/src/auth/password.service.ts.ejs +34 -0
- package/generators/node-server/templates/server/src/auth/payload.interface.ts.ejs +14 -0
- package/generators/node-server/templates/server/src/auth/role-type.ts.ejs +7 -0
- package/generators/node-server/templates/server/src/auth/session-user.middleware.ts.ejs +33 -0
- package/generators/node-server/templates/server/src/auth/session.entity.ts.ejs +36 -0
- package/generators/node-server/templates/server/src/auth/session.store.spec.ts.ejs +99 -0
- package/generators/node-server/templates/server/src/auth/session.store.ts.ejs +116 -0
- package/generators/node-server/templates/server/src/auth/user.jwt.controller.ts.ejs +26 -0
- package/generators/node-server/templates/server/src/auth/user.oauth2.controller.ts.ejs +78 -0
- package/generators/node-server/templates/server/src/auth/user.session.controller.ts.ejs +103 -0
- package/generators/node-server/templates/server/src/common/common.module.ts.ejs +19 -0
- package/generators/node-server/templates/server/src/common/database/base.entity.ts.ejs +13 -0
- package/generators/node-server/templates/server/src/common/database/column-transformers.spec.ts.ejs +46 -0
- package/generators/node-server/templates/server/src/common/database/column-transformers.ts.ejs +69 -0
- package/generators/node-server/templates/server/src/common/database/column-types.spec.ts.ejs +21 -0
- package/generators/node-server/templates/server/src/common/database/column-types.ts.ejs +29 -0
- package/generators/node-server/templates/server/src/common/database/pagination.entity.spec.ts.ejs +66 -0
- package/generators/node-server/templates/server/src/common/database/pagination.entity.ts.ejs +108 -0
- package/generators/node-server/templates/server/src/common/dto/base.dto.ts.ejs +19 -0
- package/generators/node-server/templates/server/src/common/errors/error-constants.ts.ejs +10 -0
- package/generators/node-server/templates/server/src/common/errors/problem-details.filter.ts.ejs +63 -0
- package/generators/node-server/templates/server/src/common/errors/problem.exception.ts.ejs +92 -0
- package/generators/node-server/templates/server/src/common/field_validators.ejs +77 -0
- package/generators/node-server/templates/server/src/common/header-util.ts.ejs +105 -0
- package/generators/node-server/templates/server/src/common/interceptors/logging.interceptor.spec.ts.ejs +93 -0
- package/generators/node-server/templates/server/src/common/interceptors/logging.interceptor.ts.ejs +48 -0
- package/generators/node-server/templates/server/src/common/logging.spec.ts.ejs +83 -0
- package/generators/node-server/templates/server/src/common/logging.ts.ejs +129 -0
- package/generators/node-server/templates/server/src/common/metrics.spec.ts.ejs +43 -0
- package/generators/node-server/templates/server/src/common/metrics.ts.ejs +198 -0
- package/generators/node-server/templates/server/src/common/request.ts.ejs +8 -0
- package/generators/node-server/templates/server/src/common/sortable-properties.ts.ejs +43 -0
- package/generators/node-server/templates/server/src/common/updatable-properties.ts.ejs +14 -0
- package/generators/node-server/templates/server/src/config/application-dev.yml.ejs +118 -0
- package/generators/node-server/templates/server/src/config/application-prod.yml.ejs +97 -0
- package/generators/node-server/templates/server/src/config/application-secret-samples.yml.ejs +42 -0
- package/generators/node-server/templates/server/src/config/application-test.yml.ejs +68 -0
- package/generators/node-server/templates/server/src/config/application-tls-samples.yml.ejs +15 -0
- package/generators/node-server/templates/server/src/config/application-tls.yml.ejs +15 -0
- package/generators/node-server/templates/server/src/config/application.yml.ejs +149 -0
- package/generators/node-server/templates/server/src/config.spec.ts.ejs +81 -0
- package/generators/node-server/templates/server/src/config.ts.ejs +255 -0
- package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.controller.ts.ejs +178 -0
- package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.entity.ts.ejs +110 -0
- package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.mapper.ts.ejs +37 -0
- package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.module.ts.ejs +14 -0
- package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.service.ts.ejs +123 -0
- package/generators/node-server/templates/server/src/entities/_entityFileName_/dto/_entityFileName_.dto.ts.ejs +99 -0
- package/generators/node-server/templates/server/src/mail/mail.module.ts.ejs +49 -0
- package/generators/node-server/templates/server/src/mail/mail.service.spec.ts.ejs +105 -0
- package/generators/node-server/templates/server/src/mail/mail.service.ts.ejs +120 -0
- package/generators/node-server/templates/server/src/main.ts.ejs +114 -0
- package/generators/node-server/templates/server/src/management/api-docs.controller.ts.ejs +27 -0
- package/generators/node-server/templates/server/src/management/api-docs.service.ts.ejs +8 -0
- package/generators/node-server/templates/server/src/management/configuration.controller.ts.ejs +80 -0
- package/generators/node-server/templates/server/src/management/health.controller.spec.ts.ejs +79 -0
- package/generators/node-server/templates/server/src/management/health.controller.ts.ejs +87 -0
- package/generators/node-server/templates/server/src/management/health.module.ts.ejs +9 -0
- package/generators/node-server/templates/server/src/management/loggers.controller.ts.ejs +40 -0
- package/generators/node-server/templates/server/src/management/management.controller.spec.ts.ejs +26 -0
- package/generators/node-server/templates/server/src/management/management.controller.ts.ejs +34 -0
- package/generators/node-server/templates/server/src/management/management.module.ts.ejs +21 -0
- package/generators/node-server/templates/server/src/management/metrics.controller.ts.ejs +85 -0
- package/generators/node-server/templates/server/src/migrations/1570200270081-CreateTables.ts.ejs +64 -0
- package/generators/node-server/templates/server/src/migrations/1570200270082-CreateSessions.ts.ejs +26 -0
- package/generators/node-server/templates/server/src/migrations/1570200490072-SeedUsersRoles.ts.ejs +74 -0
- package/generators/node-server/templates/server/src/migrations/support/schema.ts.ejs +254 -0
- package/generators/node-server/templates/server/src/orm.config.ts.ejs +147 -0
- package/generators/node-server/templates/server/src/registry/consul.service.ts.ejs +70 -0
- package/generators/node-server/templates/server/src/registry/eureka.service.ts.ejs +129 -0
- package/generators/node-server/templates/server/src/swagger.ts.ejs +24 -0
- package/generators/node-server/templates/server/src/tls.ts.ejs +27 -0
- package/generators/node-server/templates/server/src/users/authority.controller.ts.ejs +85 -0
- package/generators/node-server/templates/server/src/users/authority.entity.ts.ejs +22 -0
- package/generators/node-server/templates/server/src/users/dto/authority.dto.ts.ejs +10 -0
- package/generators/node-server/templates/server/src/users/dto/user.dto.ts.ejs +116 -0
- package/generators/node-server/templates/server/src/users/public.user.controller.ts.ejs +51 -0
- package/generators/node-server/templates/server/src/users/user.controller.ts.ejs +191 -0
- package/generators/node-server/templates/server/src/users/user.entity.ts.ejs +63 -0
- package/generators/node-server/templates/server/src/users/user.mapper.ts.ejs +26 -0
- package/generators/node-server/templates/server/src/users/user.module.ts.ejs +19 -0
- package/generators/node-server/templates/server/src/users/user.service.ts.ejs +156 -0
- package/generators/node-server/templates/server/tsconfig.build.json.ejs +9 -0
- package/generators/node-server/templates/server/tsconfig.json.ejs +23 -0
- package/generators/node-server/templates/server/typeorm-migration.ts.ejs +18 -0
- package/generators/node-server/templates/server/vitest.config.e2e.ts.ejs +16 -0
- package/generators/node-server/templates/server/vitest.config.ts.ejs +16 -0
- package/generators/server/command.js +7 -0
- package/generators/server/generator.js +20 -0
- package/generators/server/generators/bootstrap/command.js +5 -0
- package/generators/server/generators/bootstrap/generator.js +15 -0
- package/generators/server/generators/bootstrap/index.js +2 -0
- package/generators/server/index.js +2 -0
- package/package.json +75 -4
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Injectable<% if (generateUserManagement) { %>, Logger<% } %> } from '@nestjs/common';
|
|
2
|
+
<%_ if (generateUserManagement) { _%>
|
|
3
|
+
import { Cron } from '@nestjs/schedule';
|
|
4
|
+
<%_ } _%>
|
|
5
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
6
|
+
import { EntityMetadata, FindManyOptions, FindOneOptions, <% if (generateUserManagement && typeormRelationsSupport) { %>IsNull, LessThan, Not, <% } %>Repository } from 'typeorm';
|
|
7
|
+
import { <%= user.persistClass %> } from './user.entity.ts';
|
|
8
|
+
import { PublicUserDTO, <%= user.dtoClass%> } from './dto/user.dto.ts';
|
|
9
|
+
import { UserMapper } from './user.mapper.ts';
|
|
10
|
+
<%_ if (databaseTypeMongodb) { _%>
|
|
11
|
+
import { documentOrder } from '../common/sortable-properties.ts';
|
|
12
|
+
<%_ } _%>
|
|
13
|
+
import { User } from './user.entity.ts';
|
|
14
|
+
<%_ if (generateUserManagement) { _%>
|
|
15
|
+
import { PasswordService } from '../auth/password.service.ts';
|
|
16
|
+
<%_ } _%>
|
|
17
|
+
|
|
18
|
+
<%_ if (typeormRelationsSupport) { _%>
|
|
19
|
+
const relations = { authorities: true } as const;
|
|
20
|
+
|
|
21
|
+
<%_ } _%>
|
|
22
|
+
@Injectable()
|
|
23
|
+
export class UserService {
|
|
24
|
+
<%_ if (generateUserManagement) { _%>
|
|
25
|
+
logger = new Logger('UserService');
|
|
26
|
+
|
|
27
|
+
<%_ } _%>
|
|
28
|
+
constructor(
|
|
29
|
+
@InjectRepository(User) private userRepository: Repository<User>,
|
|
30
|
+
<%_ if (generateUserManagement) { _%>
|
|
31
|
+
private readonly passwordService: PasswordService,
|
|
32
|
+
<%_ } _%>
|
|
33
|
+
) {}
|
|
34
|
+
|
|
35
|
+
/** The TypeORM metadata of the user, the sort of the user lists is validated with. */
|
|
36
|
+
get metadata(): EntityMetadata {
|
|
37
|
+
return this.userRepository.metadata;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async findById(id: <%= user.primaryKey.tsType %>): Promise<<%= user.dtoClass%> | undefined> {
|
|
41
|
+
const result = await this.userRepository.findOneBy({ id });
|
|
42
|
+
return UserMapper.fromEntityToDTO(this.flatAuthorities(result))
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async findByFields(options: FindOneOptions<<%= user.dtoClass%>>): Promise<<%= user.dtoClass%> | undefined> {
|
|
46
|
+
const result = await this.userRepository.findOne(
|
|
47
|
+
<%_ if (typeormRelationsSupport) { _%>
|
|
48
|
+
{ ...options, relations },
|
|
49
|
+
<%_ } else { _%>
|
|
50
|
+
options,
|
|
51
|
+
<%_ } _%>
|
|
52
|
+
);
|
|
53
|
+
return UserMapper.fromEntityToDTO(this.flatAuthorities(result));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async find(options: FindManyOptions<<%= user.dtoClass%>>): Promise<<%= user.dtoClass%> | undefined> {
|
|
57
|
+
const result = await this.userRepository.findOne(options);
|
|
58
|
+
return UserMapper.fromEntityToDTO(this.flatAuthorities(result));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async findAndCount(options: FindManyOptions<<%= user.dtoClass%>>): Promise<[<%= user.dtoClass%>[], number]> {
|
|
62
|
+
const resultList = await this.userRepository.findAndCount(
|
|
63
|
+
<%_ if (typeormRelationsSupport) { _%>
|
|
64
|
+
{ ...options, relations },
|
|
65
|
+
<%_ } else { _%>
|
|
66
|
+
{ ...options, order: documentOrder(this.metadata, options.order) },
|
|
67
|
+
<%_ } _%>
|
|
68
|
+
);
|
|
69
|
+
const usersDTO: <%= user.dtoClass%>[] = [];
|
|
70
|
+
if (resultList && resultList[0]) {
|
|
71
|
+
resultList[0].forEach(user => usersDTO.push(UserMapper.fromEntityToDTO(this.flatAuthorities(user))));
|
|
72
|
+
resultList[0] = usersDTO;
|
|
73
|
+
}
|
|
74
|
+
return resultList;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** The users of the public user list, like JHipster Spring Boot: the activated ones, by their id and login only. */
|
|
78
|
+
async findPublicUsers(options: FindManyOptions<<%= user.persistClass %>>): Promise<[PublicUserDTO[], number]> {
|
|
79
|
+
const [users, count] = await this.userRepository.findAndCount({
|
|
80
|
+
...options,
|
|
81
|
+
<%_ if (databaseTypeMongodb) { _%>
|
|
82
|
+
order: documentOrder(this.metadata, options.order),
|
|
83
|
+
<%_ } _%>
|
|
84
|
+
where: { activated: true },
|
|
85
|
+
});
|
|
86
|
+
return [users.map(user => ({ id: user.<%- user.primaryKey.name %>!, login: user.login })), count];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async save(userDTO: <%= user.dtoClass%>, creator?: string<% if (generateUserManagement) { %>, updatePassword = false<% } %>): Promise<<%= user.dtoClass%>> {
|
|
90
|
+
const user = this.convertInAuthorities(UserMapper.fromDTOtoEntity(userDTO));
|
|
91
|
+
<%_ if (generateUserManagement) { _%>
|
|
92
|
+
if (updatePassword) {
|
|
93
|
+
await this.passwordService.transform(user);
|
|
94
|
+
}
|
|
95
|
+
<%_ } _%>
|
|
96
|
+
if (creator) {
|
|
97
|
+
if (!user.createdBy ) {
|
|
98
|
+
user.createdBy = creator;
|
|
99
|
+
}
|
|
100
|
+
user.lastModifiedBy = creator;
|
|
101
|
+
}
|
|
102
|
+
const result = await this.userRepository.save(user);
|
|
103
|
+
return UserMapper.fromEntityToDTO(this.flatAuthorities(result));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async update(userDTO: <%= user.dtoClass%>, updater?: string): Promise<<%= user.dtoClass%>> {
|
|
107
|
+
return this.save(userDTO, updater);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async delete(userDTO: <%= user.dtoClass%>): Promise<<%= user.dtoClass%> | undefined> {
|
|
111
|
+
const user = UserMapper.fromDTOtoEntity(userDTO);
|
|
112
|
+
const result = await this.userRepository.remove(user)
|
|
113
|
+
return UserMapper.fromEntityToDTO(result);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
<%_ if (generateUserManagement) { _%>
|
|
117
|
+
/**
|
|
118
|
+
* Like JHipster Spring Boot, removes every day, at 01:00, the users registered more than 3 days ago and still not
|
|
119
|
+
* activated: their login and mail are free again.
|
|
120
|
+
*/
|
|
121
|
+
@Cron('0 0 1 * * *')
|
|
122
|
+
async removeNotActivatedUsers(): Promise<void> {
|
|
123
|
+
const registeredBefore = new Date(Date.now() - 3 * 24 * 60 * 60 * 1000);
|
|
124
|
+
const users = await this.userRepository.find({
|
|
125
|
+
<%_ if (typeormRelationsSupport) { _%>
|
|
126
|
+
where: { activated: false, activationKey: Not(IsNull()), createdDate: LessThan(registeredBefore) },
|
|
127
|
+
<%_ } else { _%>
|
|
128
|
+
// The operators of MongoDB: TypeORM does not translate its find operators (LessThan) for it.
|
|
129
|
+
where: { activated: false, activationKey: { $ne: null }, createdDate: { $lt: registeredBefore } } as any,
|
|
130
|
+
<%_ } _%>
|
|
131
|
+
});
|
|
132
|
+
for (const user of users) {
|
|
133
|
+
this.logger.debug(`Deleting not activated user ${user.login}`);
|
|
134
|
+
await this.userRepository.remove(user);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
<%_ } _%>
|
|
139
|
+
private flatAuthorities<T extends <%= user.persistClass %> | null>(user: T): T {
|
|
140
|
+
if (user && user.authorities) {
|
|
141
|
+
const authorities: string[] = [];
|
|
142
|
+
user.authorities.forEach((authority: { name: string }) => authorities.push(authority.name));
|
|
143
|
+
user.authorities = authorities as any[];
|
|
144
|
+
}
|
|
145
|
+
return user;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
private convertInAuthorities(user: any): <%= user.persistClass %> {
|
|
149
|
+
if (user && user.authorities) {
|
|
150
|
+
const authorities: any[] = [];
|
|
151
|
+
user.authorities.forEach((authority: string) => authorities.push({ name: authority }));
|
|
152
|
+
user.authorities = authorities;
|
|
153
|
+
}
|
|
154
|
+
return user;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["ES2022"],
|
|
5
|
+
// ES modules ("type": "module"), resolved like Node.js does.
|
|
6
|
+
"module": "nodenext",
|
|
7
|
+
"moduleResolution": "nodenext",
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
// Relative imports name the TypeScript file (./app.module.ts), emitted as the JavaScript one (./app.module.js), like
|
|
10
|
+
// the TypeScript files Node.js runs directly.
|
|
11
|
+
"rewriteRelativeImportExtensions": true,
|
|
12
|
+
// The ambient types (TypeScript 6 includes none by default); the specs import the test API from vitest.
|
|
13
|
+
"types": ["node"],
|
|
14
|
+
"outDir": "dist",
|
|
15
|
+
"sourceMap": true,
|
|
16
|
+
"skipLibCheck": true,
|
|
17
|
+
"strict": true,
|
|
18
|
+
// Required by the NestJS decorators and dependency injection.
|
|
19
|
+
"experimentalDecorators": true,
|
|
20
|
+
"emitDecoratorMetadata": true
|
|
21
|
+
},
|
|
22
|
+
"include": ["src/**/*", "**/*spec.ts", "e2e/setup.test.js", "ormconfig.ts", <% if (databaseTypeSql) { %>"typeorm-migration.ts", <% } %>"vitest.config*.ts"]
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Runs a command of the typeorm CLI creating a migration (migration:create, migration:generate) with the timestamp of the
|
|
2
|
+
// migrations of the developers: its time plus <%= nodejsMigrationTimestampOffset %>, after the constraints migrations
|
|
3
|
+
// JHipster generates for the entities (their changelogDate plus a smaller offset), like the changelogs added at the end of
|
|
4
|
+
// the master.xml of Liquibase. TypeORM runs the migrations in the order of their timestamp.
|
|
5
|
+
import { spawnSync } from 'node:child_process';
|
|
6
|
+
import process from 'node:process';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
|
|
9
|
+
const MIGRATION_TIMESTAMP_OFFSET = <%= nodejsMigrationTimestampOffset %>;
|
|
10
|
+
|
|
11
|
+
// The CLI run by Node.js without a shell, which would split the arguments again (a path with a space).
|
|
12
|
+
const typeormCli = fileURLToPath(import.meta.resolve('typeorm/cli.js'));
|
|
13
|
+
const { status } = spawnSync(
|
|
14
|
+
process.execPath,
|
|
15
|
+
[typeormCli, ...process.argv.slice(2), '--timestamp', `${Date.now() + MIGRATION_TIMESTAMP_OFFSET}`],
|
|
16
|
+
{ stdio: 'inherit' },
|
|
17
|
+
);
|
|
18
|
+
process.exit(status ?? 1);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
|
+
|
|
3
|
+
// The end-to-end tests of the REST API (supertest), on the test profile. The lcov report is read by SonarQube.
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
test: {
|
|
6
|
+
include: ['e2e/**/*.e2e-spec.ts'],
|
|
7
|
+
setupFiles: ['./e2e/setup.test.js'],
|
|
8
|
+
testTimeout: 10000,
|
|
9
|
+
coverage: {
|
|
10
|
+
include: ['src/**/*.ts'],
|
|
11
|
+
// The specs next to the code are tests, not code to cover.
|
|
12
|
+
exclude: ['src/**/*.spec.ts'],
|
|
13
|
+
reporter: ['text', 'lcov'],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
|
+
|
|
3
|
+
// The unit tests: the specs next to the code. Vite transforms the decorators with their metadata from
|
|
4
|
+
// tsconfig.json (experimentalDecorators, emitDecoratorMetadata), which the dependency injection of NestJS needs.
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
test: {
|
|
7
|
+
include: ['src/**/*.spec.ts'],
|
|
8
|
+
setupFiles: ['./e2e/setup.test.js'],
|
|
9
|
+
coverage: {
|
|
10
|
+
include: ['src/**/*.ts'],
|
|
11
|
+
// The specs next to the code are tests, not code to cover.
|
|
12
|
+
exclude: ['src/**/*.spec.ts'],
|
|
13
|
+
reporter: ['text', 'lcov'],
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import ServerGenerator from 'generator-jhipster/generators/server';
|
|
2
|
+
|
|
3
|
+
export default class extends ServerGenerator {
|
|
4
|
+
constructor(args, opts, features) {
|
|
5
|
+
super(args, opts, { ...features, checkBlueprint: true });
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
async beforeQueue() {
|
|
9
|
+
await this.dependsOnBootstrap('server');
|
|
10
|
+
await this.dependsOnJHipster('common');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
get [ServerGenerator.COMPOSING]() {
|
|
14
|
+
return this.asComposingTaskGroup({
|
|
15
|
+
async composingTemplateTask() {
|
|
16
|
+
await this.composeWithJHipster('jhipster-nodejs:node-server');
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import BaseApplicationGenerator from 'generator-jhipster/generators/base-application';
|
|
2
|
+
|
|
3
|
+
export default class extends BaseApplicationGenerator {
|
|
4
|
+
constructor(args, opts, features) {
|
|
5
|
+
super(args, opts, { ...features, sbsBlueprint: true });
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
get [BaseApplicationGenerator.COMPOSING]() {
|
|
9
|
+
return this.asComposingTaskGroup({
|
|
10
|
+
async composingTemplateTask() {
|
|
11
|
+
await this.composeWithJHipster('jhipster-nodejs:node-server:bootstrap');
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,77 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mshima/generator-jhipster-nodejs",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "A NodeJS blueprint that creates the backend using NodeJS with NestJS framework",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"yeoman-generator",
|
|
7
|
+
"jhipster-blueprint",
|
|
8
|
+
"jhipster-8",
|
|
9
|
+
"nodejs"
|
|
10
|
+
],
|
|
11
|
+
"homepage": "https://github.com/jhipster/generator-jhipster-nodejs",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/jhipster/generator-jhipster-nodejs/issues"
|
|
14
|
+
},
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/jhipster/generator-jhipster-nodejs.git"
|
|
18
|
+
},
|
|
19
|
+
"license": "Apache-2.0",
|
|
20
|
+
"author": {
|
|
21
|
+
"name": "Angelo Manganiello",
|
|
22
|
+
"email": "angelo.mang@libero.it",
|
|
23
|
+
"url": "https://github.com/amanganiello90"
|
|
24
|
+
},
|
|
25
|
+
"contributors": [
|
|
26
|
+
"Deepu KS <d4udts@gmail.com> (https://deepu105.github.io)",
|
|
27
|
+
"Hadi Rasouli (https://github.com/hadirsa)",
|
|
28
|
+
"Iván García Sainz-Aja (https://github.com/ivangsa)",
|
|
29
|
+
"Daniel Franco <dandrfranco@gmail.com> (https://github.com/DanielFran)"
|
|
30
|
+
],
|
|
31
|
+
"type": "module",
|
|
32
|
+
"main": "generators/app/index.js",
|
|
33
|
+
"bin": {
|
|
34
|
+
"nhipster": "cli/cli.cjs"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"build-info.json",
|
|
38
|
+
"cli",
|
|
39
|
+
"generators",
|
|
40
|
+
"!**/__*",
|
|
41
|
+
"!**/*.snap",
|
|
42
|
+
"!**/*.spec.?(c|m)?(j|t)s"
|
|
43
|
+
],
|
|
44
|
+
"scripts": {
|
|
45
|
+
"ejslint": "ejslint generators/**/*.ejs",
|
|
46
|
+
"lint": "eslint",
|
|
47
|
+
"lint-fix": "npm run ejslint && npm run lint -- --fix",
|
|
48
|
+
"prettier-check": "prettier --check \"{,**/}*.{md,json,yml,html,cjs,mjs,js,cts,mts,ts,tsx,css,scss,vue,java}\"",
|
|
49
|
+
"prettier-format": "prettier --write \"{,**/}*.{md,json,yml,html,cjs,mjs,js,cts,mts,ts,tsx,css,scss,vue,java}\"",
|
|
50
|
+
"sonar:scanner": "sonar-scanner",
|
|
51
|
+
"pretest": "npm run prettier-check && npm run lint",
|
|
52
|
+
"test": "vitest run",
|
|
53
|
+
"update-snapshot": "vitest run --update",
|
|
54
|
+
"vitest": "vitest"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"chalk": "^5.3.0",
|
|
58
|
+
"generator-jhipster": "npm:@mshima/generator-jhipster@0.0.10"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"ejs-lint": "2.0.1",
|
|
62
|
+
"eslint": "10.10.0",
|
|
63
|
+
"eslint-config-prettier": "10.1.8",
|
|
64
|
+
"eslint-plugin-prettier": "5.5.6",
|
|
65
|
+
"globals": "17.12.0",
|
|
66
|
+
"jiti": "2.7.0",
|
|
67
|
+
"prettier": "3.9.6",
|
|
68
|
+
"prettier-plugin-packagejson": "3.0.2",
|
|
69
|
+
"sonarqube-scanner": "5.0.1",
|
|
70
|
+
"vitest": "5.0.5",
|
|
71
|
+
"yeoman-test": ">=10"
|
|
72
|
+
},
|
|
73
|
+
"engines": {
|
|
74
|
+
"generator-jhipster": "^9.4.0",
|
|
75
|
+
"node": "^22.18.0 || >=24.11.0"
|
|
76
|
+
}
|
|
77
|
+
}
|