Skip to content

Commit

Permalink
refactor: team user module (#1260)
Browse files Browse the repository at this point in the history
  • Loading branch information
patricia-mdias authored Mar 21, 2023
1 parent 11413ad commit 42a368d
Show file tree
Hide file tree
Showing 106 changed files with 1,001 additions and 706 deletions.
6 changes: 3 additions & 3 deletions backend/src/infrastructure/database/mongoose.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import ResetPassword, {
ResetPasswordSchema
} from 'src/modules/auth/entities/reset-password.schema';
import Board, { BoardSchema } from 'src/modules/boards/entities/board.schema';
import BoardUser, { BoardUserSchema } from 'src/modules/boards/entities/board.user.schema';
import BoardUser, { BoardUserSchema } from 'src/modules/boardUsers/entities/board.user.schema';
import Schedules, { SchedulesSchema } from 'src/modules/schedules/entities/schedules.schema';
import TeamUser, { TeamUserSchema } from 'src/modules/teams/entities/team.user.schema';
import Team, { TeamSchema } from 'src/modules/teams/entities/teams.schema';
import TeamUser, { TeamUserSchema } from 'src/modules/teamUsers/entities/team.user.schema';
import Team, { TeamSchema } from 'src/modules/teams/entities/team.schema';
import User, { UserSchema } from 'src/modules/users/entities/user.schema';

export const mongooseBoardModule = MongooseModule.forFeature([
Expand Down
19 changes: 9 additions & 10 deletions backend/src/libs/guards/boardRoles.guard.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
import { GetBoardUserServiceInterface } from 'src/modules/boardusers/interfaces/services/get.board.user.service.interface';
import { GetTeamUserServiceInterface } from '../../modules/teamUsers/interfaces/services/get.team.user.service.interface';
import { GetBoardUserServiceInterface } from 'src/modules/boardUsers/interfaces/services/get.board.user.service.interface';
import { GetBoardServiceInterface } from 'src/modules/boards/interfaces/services/get.board.service.interface';
import { GetTeamServiceInterface } from 'src/modules/teams/interfaces/services/get.team.service.interface';
import {
CanActivate,
ExecutionContext,
ForbiddenException,
Inject,
Injectable,
forwardRef
Injectable
} from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import * as Teams from 'src/modules/teams/interfaces/types';
import * as TeamUsers from 'src/modules/teamUsers/interfaces/types';
import * as Boards from 'src/modules/boards/interfaces/types';
import * as BoardUsers from 'src/modules/boardusers/interfaces/types';
import TeamUser from 'src/modules/teams/entities/team.user.schema';
import * as BoardUsers from 'src/modules/boardUsers/interfaces/types';
import TeamUser from 'src/modules/teamUsers/entities/team.user.schema';

@Injectable()
export class BoardUserGuard implements CanActivate {
constructor(
@Inject(forwardRef(() => Teams.TYPES.services.GetTeamService))
private getTeamService: GetTeamServiceInterface,
@Inject(TeamUsers.TYPES.services.GetTeamUserService)
private getTeamUserService: GetTeamUserServiceInterface,
private readonly reflector: Reflector,
@Inject(Boards.TYPES.services.GetBoardService)
private getBoardService: GetBoardServiceInterface,
Expand All @@ -41,7 +40,7 @@ export class BoardUserGuard implements CanActivate {

// If board has team, get Team User to check if it is Admin or Stakeholder
if (board.team)
teamUser = await this.getTeamService.getTeamUser(user._id, String(board.team));
teamUser = await this.getTeamUserService.getTeamUser(user._id, String(board.team));

const boardUserFound = await this.getBoardUserService.getBoardUser(boardId, user._id);

Expand Down
8 changes: 4 additions & 4 deletions backend/src/libs/guards/getBoardPermissions.guard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import {
Injectable
} from '@nestjs/common';
import * as Boards from 'src/modules/boards/interfaces/types';
import * as BoardUsers from 'src/modules/boardusers/interfaces/types';
import TeamUser from 'src/modules/teams/entities/team.user.schema';
import Team from 'src/modules/teams/entities/teams.schema';
import * as BoardUsers from 'src/modules/boardUsers/interfaces/types';
import TeamUser from 'src/modules/teamUsers/entities/team.user.schema';
import Team from 'src/modules/teams/entities/team.schema';
import User from 'src/modules/users/entities/user.schema';
import { Reflector } from '@nestjs/core';
import { GetBoardServiceInterface } from 'src/modules/boards/interfaces/services/get.board.service.interface';
import { GetBoardUserServiceInterface } from 'src/modules/boardusers/interfaces/services/get.board.user.service.interface';
import { GetBoardUserServiceInterface } from 'src/modules/boardUsers/interfaces/services/get.board.user.service.interface';

@Injectable()
export class GetBoardGuard implements CanActivate {
Expand Down
18 changes: 12 additions & 6 deletions backend/src/libs/guards/teamRoles.guard.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
import { CanActivate, ExecutionContext, ForbiddenException, Injectable } from '@nestjs/common';
import { GetTeamUserServiceInterface } from 'src/modules/teamUsers/interfaces/services/get.team.user.service.interface';
import {
CanActivate,
ExecutionContext,
ForbiddenException,
Inject,
Injectable
} from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import TeamUser, { TeamUserDocument } from '../../modules/teams/entities/team.user.schema';
import * as TeamUsers from 'src/modules/teamUsers/interfaces/types';

@Injectable()
export class TeamUserGuard implements CanActivate {
constructor(
private readonly reflector: Reflector,
@InjectModel(TeamUser.name) private teamUserModel: Model<TeamUserDocument>
@Inject(TeamUsers.TYPES.services.GetTeamUserService)
private getTeamUserService: GetTeamUserServiceInterface
) {}

async canActivate(context: ExecutionContext) {
Expand All @@ -18,7 +24,7 @@ export class TeamUserGuard implements CanActivate {
const user = request.user;
const teamId: string = request.params.teamId;
try {
const userFound = await this.teamUserModel.findOne({ user: user._id, team: teamId }).exec();
const userFound = await this.getTeamUserService.getTeamUser(user._id, teamId);
const hasPermissions = permissions.includes(userFound?.role) || user.isSAdmin;

return hasPermissions;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import faker from '@faker-js/faker';
import { buildTestFactory } from './generic-factory.mock';
import BoardUser from 'src/modules/boards/entities/board.user.schema';
import BoardUser from 'src/modules/boardUsers/entities/board.user.schema';
import { BoardRoles } from 'src/libs/enum/board.roles';

const mockBoardUserData = () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import faker from '@faker-js/faker';
import { BoardRoles } from 'src/libs/enum/board.roles';
import BoardUserDto from 'src/modules/boards/dto/board.user.dto';
import BoardUserDto from 'src/modules/boardUsers/dto/board.user.dto';
import { buildTestFactory } from '../generic-factory.mock';
import { UserFactory } from '../user-factory';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import faker from '@faker-js/faker';
import { buildTestFactory } from './generic-factory.mock';
import Team from 'src/modules/teams/entities/teams.schema';
import Team from 'src/modules/teams/entities/team.schema';

const dateCreatedAt = faker.date.past(1);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import faker from '@faker-js/faker';
import { buildTestFactory } from './generic-factory.mock';
import { TeamRoles } from 'src/libs/enum/team.roles';
import TeamUser from 'src/modules/teams/entities/team.user.schema';
import TeamUser from 'src/modules/teamUsers/entities/team.user.schema';

const mockTeamUserData = () => {
const isNewJoiner = faker.datatype.boolean();
Expand Down
2 changes: 1 addition & 1 deletion backend/src/libs/utils/generateBoardData.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import BoardDto from 'src/modules/boards/dto/board.dto';
import BoardUserDto from 'src/modules/boards/dto/board.user.dto';
import BoardUserDto from 'src/modules/boardUsers/dto/board.user.dto';
import { CreateBoardDto } from 'src/modules/boards/dto/createBoard.dto';

export const generateSubBoardDtoData = (index: number, users: BoardUserDto[] = []): BoardDto => {
Expand Down
4 changes: 2 additions & 2 deletions backend/src/libs/validators/check-unique-users.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator';
import BoardUserDto from 'src/modules/boards/dto/board.user.dto';
import TeamUserDto from 'src/modules/teams/dto/team.user.dto';
import BoardUserDto from 'src/modules/boardUsers/dto/board.user.dto';
import TeamUserDto from 'src/modules/teamUsers/dto/team.user.dto';

@ValidatorConstraint({ name: 'checkUniqueUsers', async: false })
export class CheckUniqueUsers implements ValidatorConstraintInterface {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import { Inject, Injectable } from '@nestjs/common';
import * as User from 'src/modules/users/interfaces/types';
import * as Teams from 'src/modules/teams/interfaces/types';
import * as TeamUsers from 'src/modules/teamUsers/interfaces/types';
import * as Boards from 'src/modules/boards/interfaces/types';
import { GetBoardApplicationInterface } from 'src/modules/boards/interfaces/applications/get.board.application.interface';
import { GetTeamApplicationInterface } from 'src/modules/teams/interfaces/applications/get.team.application.interface';
import { GetUserServiceInterface } from 'src/modules/users/interfaces/services/get.user.service.interface';
import { StatisticsAuthUserUseCaseInterface } from '../interfaces/applications/statistics.auth.use-case.interface';
import { GetTeamUserServiceInterface } from 'src/modules/teamUsers/interfaces/services/get.team.user.service.interface';

@Injectable()
export default class StatisticsAuthUserUseCase implements StatisticsAuthUserUseCaseInterface {
constructor(
@Inject(User.TYPES.services.GetUserService)
private getUserService: GetUserServiceInterface,
@Inject(Teams.TYPES.applications.GetTeamApplication)
private getTeamsService: GetTeamApplicationInterface,
@Inject(TeamUsers.TYPES.services.GetTeamUserService)
private getTeamUserService: GetTeamUserServiceInterface,
@Inject(Boards.TYPES.applications.GetBoardApplication)
private getBoardService: GetBoardApplicationInterface
) {}

public async execute(userId: string) {
const [usersCount, teamsCount, boardsCount] = await Promise.all([
this.getUserService.countUsers(),
this.getTeamsService.countTeams(userId),
this.getTeamUserService.countTeamsOfUser(userId),
this.getBoardService.countBoards(userId)
]);

Expand Down
2 changes: 2 additions & 0 deletions backend/src/modules/auth/auth.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,13 @@ import AuthController from './controller/auth.controller';
import JwtStrategy from './strategy/jwt.strategy';
import LocalStrategy from './strategy/local.strategy';
import JwtRefreshTokenStrategy from './strategy/refresh.strategy';
import TeamUsersModule from 'src/modules/teamUsers/teamusers.module';

@Module({
imports: [
UsersModule,
TeamsModule,
TeamUsersModule,
JwtRegister,
BoardsModule,
PassportModule,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { getTeamUserService, teamUserRepository } from '../../teamUsers/teamusers.providers';
import { ConfigService } from '@nestjs/config';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { JwtService } from '@nestjs/jwt';
Expand All @@ -13,14 +14,9 @@ import {
boardUserRepository,
createBoardUserService,
getBoardUserService
} from 'src/modules/boardusers/boardusers.providers';
} from 'src/modules/boardUsers/boardusers.providers';
import SocketGateway from 'src/modules/socket/gateway/socket.gateway';
import {
getTeamService,
teamRepository,
teamUserRepository,
updateTeamService
} from 'src/modules/teams/providers';
import { getTeamService, teamRepository } from 'src/modules/teams/providers';
import { TYPES } from 'src/modules/users/interfaces/types';
import GetUserService from 'src/modules/users/services/get.user.service';
import {
Expand Down Expand Up @@ -59,15 +55,15 @@ describe('The AuthenticationService', () => {
getTeamService,
userRepository,
teamRepository,
teamUserRepository,
updateTeamService,
getBoardService,
createBoardUserService,
getTokenAuthService,
boardUserRepository,
boardRepository,
updateUserService,
getBoardUserService,
getTeamUserService,
teamUserRepository,
resetPasswordRepository,
{
provide: ConfigService,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { BoardUserRepository } from '../boardusers/repositories/board-user.repository';
import CreateBoardUserService from '../boardusers/services/create.board.user.service';
import { BoardUserRepository } from './repositories/board-user.repository';
import CreateBoardUserService from './services/create.board.user.service';
import { TYPES } from './interfaces/types';
import DeleteBoardUserService from './services/delete.board.user.service';
import GetBoardUserService from './services/get.board.user.service';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsArray, IsOptional } from 'class-validator';
import BoardUserDto from 'src/modules/boards/dto/board.user.dto';
import BoardUserDto from 'src/modules/boardUsers/dto/board.user.dto';

export default class UpdateBoardUserDto {
@ApiProperty({ description: 'List of users to add on board' })
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ObjectId } from 'mongoose';
import { BaseInterfaceRepository } from 'src/libs/repositories/interfaces/base.repository.interface';
import BoardUserDto from 'src/modules/boards/dto/board.user.dto';
import BoardUserDto from 'src/modules/boardUsers/dto/board.user.dto';
import Board from 'src/modules/boards/entities/board.schema';
import BoardUser from 'src/modules/boards/entities/board.user.schema';
import BoardUser from 'src/modules/boardUsers/entities/board.user.schema';

export interface BoardUserRepositoryInterface extends BaseInterfaceRepository<BoardUser> {
getAllBoardsIdsOfUser(userId: string): Promise<BoardUser[]>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import BoardUser from 'src/modules/boards/entities/board.user.schema';
import BoardUserDto from '../../../boards/dto/board.user.dto';
import BoardUser from 'src/modules/boardUsers/entities/board.user.schema';
import BoardUserDto from '../../dto/board.user.dto';

export interface CreateBoardUserServiceInterface {
saveBoardUsers(newUsers: BoardUserDto[], newBoardId?: string): Promise<BoardUser[]>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { SessionInterface } from './../../../../libs/transactions/session.interface';
import { SessionInterface } from '../../../../libs/transactions/session.interface';
import { ObjectId } from 'mongoose';
import Board from 'src/modules/boards/entities/board.schema';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import BoardUser from 'src/modules/boards/entities/board.user.schema';
import BoardUser from 'src/modules/boardUsers/entities/board.user.schema';

export interface GetBoardUserServiceInterface {
getAllBoardsOfUser(userId: string): Promise<BoardUser[]>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { SessionInterface } from 'src/libs/transactions/session.interface';
import BoardUser from 'src/modules/boards/entities/board.user.schema';
import BoardUser from 'src/modules/boardUsers/entities/board.user.schema';

export interface UpdateBoardUserServiceInterface extends SessionInterface {
updateBoardUserRole(boardId: string, userId: string, role: string): Promise<BoardUser>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import { InjectModel } from '@nestjs/mongoose';
import { Model, ObjectId } from 'mongoose';
import { BoardRoles } from 'src/libs/enum/board.roles';
import { MongoGenericRepository } from 'src/libs/repositories/mongo/mongo-generic.repository';
import BoardUserDto from 'src/modules/boards/dto/board.user.dto';
import BoardUserDto from 'src/modules/boardUsers/dto/board.user.dto';
import Board from 'src/modules/boards/entities/board.schema';
import BoardUser, { BoardUserDocument } from 'src/modules/boards/entities/board.user.schema';
import BoardUser, { BoardUserDocument } from 'src/modules/boardUsers/entities/board.user.schema';
import { BoardUserRepositoryInterface } from '../interfaces/repositories/board-user.repository.interface';

@Injectable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { BadRequestException, Inject, Injectable } from '@nestjs/common';
import { BoardRoles } from 'src/libs/enum/board.roles';
import { BOARD_USER_EXISTS, INSERT_FAILED } from 'src/libs/exceptions/messages';
import { CreateBoardUserServiceInterface } from '../interfaces/services/create.board.user.service.interface';
import BoardUserDto from '../../boards/dto/board.user.dto';
import BoardUserDto from '../dto/board.user.dto';
import { BoardUserRepositoryInterface } from '../interfaces/repositories/board-user.repository.interface';
import { TYPES } from '../interfaces/types';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { DeleteBoardUserServiceInterface } from './../interfaces/services/delete.board.user.service.interface';
import { DeleteBoardUserServiceInterface } from '../interfaces/services/delete.board.user.service.interface';
import { Inject, Injectable } from '@nestjs/common';
import { BoardUserRepositoryInterface } from '../interfaces/repositories/board-user.repository.interface';
import { TYPES } from '../interfaces/types';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BoardUserRepositoryInterface } from 'src/modules/boardusers/interfaces/repositories/board-user.repository.interface';
import { GetBoardUserServiceInterface } from './../interfaces/services/get.board.user.service.interface';
import { BoardUserRepositoryInterface } from 'src/modules/boardUsers/interfaces/repositories/board-user.repository.interface';
import { GetBoardUserServiceInterface } from '../interfaces/services/get.board.user.service.interface';
import { Inject, Injectable } from '@nestjs/common';
import { TYPES } from '../interfaces/types';
import BoardUser from 'src/modules/boards/entities/board.user.schema';
import BoardUser from 'src/modules/boardUsers/entities/board.user.schema';

@Injectable()
export default class GetBoardUserService implements GetBoardUserServiceInterface {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { BoardUserRepositoryInterface } from '../interfaces/repositories/board-user.repository.interface';
import { TYPES } from '../interfaces/types';
import { UpdateBoardUserServiceInterface } from '../interfaces/services/update.board.user.service.interface';
import BoardUser from 'src/modules/boards/entities/board.user.schema';
import BoardUser from 'src/modules/boardUsers/entities/board.user.schema';

@Injectable()
export default class UpdateBoardUserService implements UpdateBoardUserServiceInterface {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { UpdateBoardDto } from '../dto/update-board.dto';
import { UpdateBoardApplicationInterface } from '../interfaces/applications/update.board.application.interface';
import { UpdateBoardServiceInterface } from '../interfaces/services/update.board.service.interface';
import { TYPES } from '../interfaces/types';
import UpdateBoardUserDto from '../dto/update-board-user.dto';
import UpdateBoardUserDto from '../../boardUsers/dto/update-board-user.dto';
import { BoardPhaseDto } from 'src/libs/dto/board-phase.dto';

@Injectable()
Expand Down
4 changes: 3 additions & 1 deletion backend/src/modules/boards/boards.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,14 @@ import {
} from './boards.providers';
import BoardsController from './controller/boards.controller';
import { JwtRegister } from 'src/infrastructure/config/jwt.register';
import BoardUsersModule from '../boardusers/boardusers.module';
import BoardUsersModule from '../boardUsers/boardusers.module';
import TeamUsersModule from 'src/modules/teamUsers/teamusers.module';

@Module({
imports: [
UsersModule,
forwardRef(() => TeamsModule),
TeamUsersModule,
SchedulesModule,
CommunicationModule,
CardsModule,
Expand Down
2 changes: 1 addition & 1 deletion backend/src/modules/boards/controller/boards.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ import BoardDto from '../dto/board.dto';
import { UpdateBoardDto } from '../dto/update-board.dto';
import { TYPES } from '../interfaces/types';
import { BoardUserGuard } from 'src/libs/guards/boardRoles.guard';
import UpdateBoardUserDto from '../dto/update-board-user.dto';
import UpdateBoardUserDto from '../../boardUsers/dto/update-board-user.dto';
import { BoardPhaseDto } from 'src/libs/dto/board-phase.dto';
import { BoardPhases } from 'src/libs/enum/board.phases';
import { GetBoardApplicationInterface } from '../interfaces/applications/get.board.application.interface';
Expand Down
2 changes: 1 addition & 1 deletion backend/src/modules/boards/dto/board.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
ValidateNested
} from 'class-validator';
import { CheckUniqueUsers } from 'src/libs/validators/check-unique-users';
import BoardUserDto from './board.user.dto';
import BoardUserDto from '../../boardUsers/dto/board.user.dto';
import ColumnDto from '../../columns/dto/column.dto';
import { BoardPhases } from 'src/libs/enum/board.phases';

Expand Down
2 changes: 1 addition & 1 deletion backend/src/modules/boards/dto/createBoard.dto.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import BoardDto from 'src/modules/boards/dto/board.dto';
import BoardUserDto from 'src/modules/boards/dto/board.user.dto';
import BoardUserDto from 'src/modules/boardUsers/dto/board.user.dto';
import { TeamDto } from '../../communication/dto/team.dto';

export interface CreateBoardDto {
Expand Down
Loading

0 comments on commit 42a368d

Please sign in to comment.