Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: team user module #1260

Merged
merged 15 commits into from
Mar 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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