FEAT: User module init

This commit is contained in:
Gabriel Rosa
2022-07-07 15:57:40 -03:00
parent 59ffb24985
commit 4356adea65
7 changed files with 286 additions and 0 deletions
+3
View File
@@ -40,6 +40,7 @@ import { SalesforceStrategy } from './modules/oauth/passport-strategies/salesfor
import { ConnectorClientConfiguration } from './clients/connector/client.config';
import { ConnectorController } from './modules/connector/connector.controller';
import { ConnectorClientService } from './clients/connector/client.service';
import { UsersModule } from './modules/users/users.module';
const inputClient = new InputsClientConfiguration();
const outputClient = new OutputsClientConfiguration();
@@ -111,6 +112,8 @@ const connectorClient = new ConnectorClientConfiguration();
...connectorClient.config(),
},
]),
UsersModule,
],
})
export class AppModule {}
+105
View File
@@ -0,0 +1,105 @@
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
export class Customer {
@ApiProperty()
id: string;
@ApiProperty()
name: string;
@ApiProperty()
domain: string;
@ApiProperty()
tier: string;
@ApiProperty()
info: string;
@ApiProperty()
createdAt: string;
@ApiProperty()
updatedAt: string;
}
export class Permission {
@ApiProperty()
id: string;
@ApiProperty()
seqid: number;
@ApiProperty()
name: string;
@ApiProperty()
claim: string;
@ApiProperty()
createdAt: string;
@ApiProperty()
updatedAt: string;
}
export class Role {
@ApiProperty({ type: [Permission] })
permissions: Permission[];
@ApiProperty()
id: string;
@ApiProperty()
name: string;
@ApiProperty()
createdAt: string;
@ApiProperty()
updatedAt: string;
}
export class UserByCustomer {
@ApiProperty({ type: [Role] })
roles: Role[];
@ApiProperty()
id: string;
@ApiProperty()
name: string;
@ApiProperty()
username: string;
@ApiProperty()
mfaStatus: string;
@ApiProperty()
createdAt: string;
@ApiProperty()
updatedAt: string;
}
export class User {
@ApiProperty()
id: string;
@ApiProperty()
name: string;
@ApiProperty()
username: string;
@ApiProperty()
UserRole: string[];
@ApiProperty()
customer: Customer;
@ApiProperty()
mfaStatus: string;
@ApiProperty()
createdAt: string;
@ApiProperty()
updatedAt: string;
}
export class GetAllUsersByCustomerIdReq {
@ApiPropertyOptional()
s: string;
}
export class GetAllUsersByCustomerIdRes {
@ApiProperty({ type: [UserByCustomer] })
users: UserByCustomer[];
}
export class AssignRoleToUserReq {
@ApiProperty()
userId: string;
@ApiProperty()
roleId: string;
}
export class UnassignRoleToUserReq {
@ApiProperty()
userId: string;
@ApiProperty()
roleId: string;
}
export class SearchUserReq {
@ApiProperty()
s: string;
}
export class SearchUserRes extends GetAllUsersByCustomerIdRes {}
@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { UsersController } from './users.controller';
describe('UsersController', () => {
let controller: UsersController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [UsersController],
}).compile();
controller = module.get<UsersController>(UsersController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
});
+68
View File
@@ -0,0 +1,68 @@
import {
Body,
Controller,
Delete,
Get,
Inject,
Put,
Query,
} from '@nestjs/common';
import { ApiOkResponse, ApiTags } from '@nestjs/swagger';
import { DadosferaLogger } from 'dadosfera-logs';
import { RequestUser, User } from 'src/authentication/user.decorator';
import {
AssignRoleToUserReq,
GetAllUsersByCustomerIdReq,
GetAllUsersByCustomerIdRes,
UnassignRoleToUserReq,
} from './dtos/entities';
import { UsersService } from './users.service';
@ApiTags('Users')
@Controller('users')
export class UsersController {
logger: any;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
private userService: UsersService,
) {
this.logger = dadosferaLogger.logger;
}
@Get()
@ApiOkResponse({
type: GetAllUsersByCustomerIdRes,
description: 'List of users of a customer',
})
async getAllUsersByCustomerId(
@User() user: RequestUser,
@Query('s') s: GetAllUsersByCustomerIdReq,
) {
this.logger.info('getAllUsersByCustomerId', { user });
return await this.userService.findAllUsersByCustomerId(user.customer_id, s);
}
@Put('role')
async assignRoleToUser(@User() user, @Body() body: AssignRoleToUserReq) {
this.logger.info('assignRoleToUser', { user });
return await this.userService.assignRoleToUser(body);
}
@Delete('role')
async unassignRoleToUser(@User() user, @Body() body: UnassignRoleToUserReq) {
this.logger.info('unassignRoleToUser', { user });
return await this.userService.unassignRoleToUser(body);
}
// @Get('search')
// @ApiOkResponse({ type: SearchUserRes })
// async searchUser(
// @User() user: RequestUser,
// @Query('s') searchQuery: SearchUserReq,
// ) {
// this.logger.info('searchUser', { user });
// console.log(searchQuery);
// }
}
+21
View File
@@ -0,0 +1,21 @@
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
import { DadosferaLogger } from 'dadosfera-logs';
import { ClientsModule } from '@nestjs/microservices';
import { DucClient } from 'src/clients/duc/client.config';
const ducClient = new DucClient();
@Module({
imports: [
ClientsModule.register([
{
name: 'DUC_PACKAGE',
...ducClient.config(),
},
]),
],
controllers: [UsersController],
providers: [UsersService, DadosferaLogger],
})
export class UsersModule {}
+18
View File
@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { UsersService } from './users.service';
describe('UsersService', () => {
let service: UsersService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [UsersService],
}).compile();
service = module.get<UsersService>(UsersService);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
});
+53
View File
@@ -0,0 +1,53 @@
import { OnModuleInit, Inject, Injectable } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { DadosferaLogger } from 'dadosfera-logs';
import { ProtoServices } from 'protospack-v2/dist/lib/Duc';
import { UsersProtoService } from 'protospack-v2/dist/lib/Duc/interfaces/write-service';
import {
AssignRoleToUserRequest,
AssignRoleToUserResponse,
UnassignRoleFromUserRequest,
UnassignRoleFromUserResponse,
UserFindAllByCustomerIdResponse,
} from 'protospack-v2/dist/lib/Duc/interfaces/messages';
import grpcHandler from '../../utils/grpcHandler';
@Injectable()
export class UsersService implements OnModuleInit {
logger: any;
private usersService: UsersProtoService;
constructor(
@Inject(DadosferaLogger)
dadosferaLogger: DadosferaLogger,
@Inject('DUC_PACKAGE') private readonly grpcClient: ClientGrpc,
) {
this.logger = dadosferaLogger.logger;
}
onModuleInit() {
this.usersService = this.grpcClient.getService<UsersProtoService>(
ProtoServices.UsersProtoService,
);
}
async findAllUsersByCustomerId(customerId, searchQuery) {
return grpcHandler<UserFindAllByCustomerIdResponse>(
this.usersService.UserFindAllByCustomerId({ customerId }),
);
}
async assignRoleToUser(body: AssignRoleToUserRequest) {
return grpcHandler<AssignRoleToUserResponse>(
this.usersService.AssignRoleToUser(body),
);
}
async unassignRoleToUser(body: UnassignRoleFromUserRequest) {
return grpcHandler<UnassignRoleFromUserResponse>(
this.usersService.UnassignRoleFromUser(body),
);
}
}