Skip to content

Commit

Permalink
fix: unmerge, avoid requesting on success, handle erros (#836)
Browse files Browse the repository at this point in the history
  • Loading branch information
nunocaseiro authored Jan 10, 2023
1 parent 191f7c3 commit 8a8489b
Show file tree
Hide file tree
Showing 29 changed files with 278 additions and 739 deletions.
44 changes: 2 additions & 42 deletions backend/src/modules/boards/services/get.board.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { QueryType } from '../interfaces/findQuery';
import { GetBoardServiceInterface } from '../interfaces/services/get.board.service.interface';
import Board, { BoardDocument } from '../schemas/board.schema';
import BoardUser, { BoardUserDocument } from '../schemas/board.user.schema';
import { BoardDataPopulate } from '../utils/populate-board';

@Injectable()
export default class GetBoardServiceImpl implements GetBoardServiceInterface {
Expand Down Expand Up @@ -377,48 +378,7 @@ export default class GetBoardServiceImpl implements GetBoardServiceInterface {
private async getBoardData(boardId: string) {
const board = await this.boardModel
.findById(boardId)
.populate({
path: 'users',
select: 'user role -board votesCount',
populate: { path: 'user', select: 'firstName email lastName _id' }
})
.populate({
path: 'team',
select: 'name users -_id',
populate: {
path: 'users',
select: 'user role',
populate: { path: 'user', select: 'firstName lastName email joinedAt' }
}
})
.populate({
path: 'columns.cards.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.comments.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.items.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.items.comments.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'createdBy',
select: '_id firstName lastName isSAdmin joinedAt'
})
.populate({
path: 'dividedBoards',
select: '-__v -createdAt -id',
populate: {
path: 'users',
select: 'role user'
}
})
.populate(BoardDataPopulate)
.lean({ virtuals: true })
.exec();

Expand Down
46 changes: 46 additions & 0 deletions backend/src/modules/boards/utils/populate-board.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { PopulateOptions } from 'mongoose';

export const BoardDataPopulate: PopulateOptions[] = [
{
path: 'users',
select: 'user role -board votesCount',
populate: { path: 'user', select: 'firstName email lastName _id' }
},
{
path: 'team',
select: 'name users -_id',
populate: {
path: 'users',
select: 'user role',
populate: { path: 'user', select: 'firstName lastName email joinedAt' }
}
},
{
path: 'columns.cards.createdBy',
select: '_id firstName lastName'
},
{
path: 'columns.cards.comments.createdBy',
select: '_id firstName lastName'
},
{
path: 'columns.cards.items.createdBy',
select: '_id firstName lastName'
},
{
path: 'columns.cards.items.comments.createdBy',
select: '_id firstName lastName'
},
{
path: 'createdBy',
select: '_id firstName lastName isSAdmin joinedAt'
},
{
path: 'dividedBoards',
select: '-__v -createdAt -id',
populate: {
path: 'users',
select: 'role user'
}
}
];
7 changes: 5 additions & 2 deletions backend/src/modules/cards/services/create.card.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import isEmpty from 'src/libs/utils/isEmpty';
import Board, { BoardDocument } from 'src/modules/boards/schemas/board.schema';
import { BoardDataPopulate } from 'src/modules/boards/utils/populate-board';
import CardDto from '../dto/card.dto';
import { CreateCardService } from '../interfaces/services/create.card.service.interface';
import { pushCardIntoPosition } from '../shared/push.card';
Expand All @@ -11,7 +12,7 @@ import { pushCardIntoPosition } from '../shared/push.card';
export default class CreateCardServiceImpl implements CreateCardService {
constructor(@InjectModel(Board.name) private boardModel: Model<BoardDocument>) {}

create(boardId: string, userId: string, card: CardDto, colIdToAdd: string) {
async create(boardId: string, userId: string, card: CardDto, colIdToAdd: string) {
card.createdBy = userId;

if (isEmpty(card.items)) {
Expand All @@ -26,6 +27,8 @@ export default class CreateCardServiceImpl implements CreateCardService {
card.items[0].createdBy = userId;
}

return pushCardIntoPosition(boardId, colIdToAdd, 0, card, this.boardModel);
const board = await pushCardIntoPosition(boardId, colIdToAdd, 0, card, this.boardModel);

return board.populate(BoardDataPopulate);
}
}
87 changes: 3 additions & 84 deletions backend/src/modules/cards/services/delete.card.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { InjectModel } from '@nestjs/mongoose';
import { LeanDocument, Model, ObjectId } from 'mongoose';
import { UPDATE_FAILED } from 'src/libs/exceptions/messages';
import Board, { BoardDocument } from 'src/modules/boards/schemas/board.schema';
import { BoardDataPopulate } from 'src/modules/boards/utils/populate-board';
import { CommentDocument } from 'src/modules/comments/schemas/comment.schema';
import User from 'src/modules/users/entities/user.schema';
import { DeleteVoteServiceInterface } from 'src/modules/votes/interfaces/services/delete.vote.service.interface';
Expand Down Expand Up @@ -92,48 +93,7 @@ export default class DeleteCardServiceImpl implements DeleteCardService {
},
{ new: true }
)
.populate({
path: 'users',
select: 'user role -board votesCount',
populate: { path: 'user', select: 'firstName email lastName _id' }
})
.populate({
path: 'team',
select: 'name users -_id',
populate: {
path: 'users',
select: 'user role',
populate: { path: 'user', select: 'firstName lastName email joinedAt' }
}
})
.populate({
path: 'columns.cards.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.comments.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.items.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.items.comments.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'createdBy',
select: '_id firstName lastName isSAdmin joinedAt'
})
.populate({
path: 'dividedBoards',
select: '-__v -createdAt -id',
populate: {
path: 'users',
select: 'role user'
}
})
.populate(BoardDataPopulate)
.lean()
.exec();

Expand Down Expand Up @@ -219,48 +179,7 @@ export default class DeleteCardServiceImpl implements DeleteCardService {
},
{ arrayFilters: [{ 'card._id': cardId }], new: true }
)
.populate({
path: 'users',
select: 'user role -board votesCount',
populate: { path: 'user', select: 'firstName email lastName _id' }
})
.populate({
path: 'team',
select: 'name users -_id',
populate: {
path: 'users',
select: 'user role',
populate: { path: 'user', select: 'firstName lastName email joinedAt' }
}
})
.populate({
path: 'columns.cards.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.comments.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.items.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.items.comments.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'createdBy',
select: '_id firstName lastName isSAdmin joinedAt'
})
.populate({
path: 'dividedBoards',
select: '-__v -createdAt -id',
populate: {
path: 'users',
select: 'role user'
}
})
.populate(BoardDataPopulate)
.lean()
.exec();

Expand Down
82 changes: 20 additions & 62 deletions backend/src/modules/cards/services/merge.card.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { CARD_NOT_FOUND, CARD_NOT_REMOVED, UPDATE_FAILED } from 'src/libs/exceptions/messages';
import Board, { BoardDocument } from 'src/modules/boards/schemas/board.schema';
import { BoardDataPopulate } from 'src/modules/boards/utils/populate-board';
import { GetCardService } from '../interfaces/services/get.card.service.interface';
import { MergeCardService } from '../interfaces/services/merge.card.service.interface';
import { TYPES } from '../interfaces/types';
Expand Down Expand Up @@ -41,73 +42,30 @@ export class MergeCardServiceImpl implements MergeCardService {

const newComments = cardGroup.comments.concat(comments);

const setResult = await this.boardModel
.findOneAndUpdate(
{
_id: boardId,
'columns.cards._id': cardId
},
{
$set: {
'columns.$[].cards.$[c].items': newItems,
'columns.$[].cards.$[c].votes': newVotes,
'columns.$[].cards.$[c].comments': newComments
}
},
{
arrayFilters: [{ 'c._id': cardId }],
new: true
const setResult = await this.boardModel.findOneAndUpdate(
{
_id: boardId,
'columns.cards._id': cardId
},
{
$set: {
'columns.$[].cards.$[c].items': newItems,
'columns.$[].cards.$[c].votes': newVotes,
'columns.$[].cards.$[c].comments': newComments
}
)
.populate({
path: 'users',
select: 'user role -board votesCount',
populate: { path: 'user', select: 'firstName email lastName _id' }
})
.populate({
path: 'team',
select: 'name users -_id',
populate: {
path: 'users',
select: 'user role',
populate: { path: 'user', select: 'firstName lastName email joinedAt' }
}
})
.populate({
path: 'columns.cards.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.comments.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.items.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'columns.cards.items.comments.createdBy',
select: '_id firstName lastName'
})
.populate({
path: 'createdBy',
select: '_id firstName lastName isSAdmin joinedAt'
})
.populate({
path: 'dividedBoards',
select: '-__v -createdAt -id',
populate: {
path: 'users',
select: 'role user'
}
})
.lean()
.session(session);
},
{
arrayFilters: [{ 'c._id': cardId }],
new: true,
session
}
);

if (!setResult) throw Error(UPDATE_FAILED);
await session.commitTransaction();
await session.endSession();

return setResult;
return setResult.populate(BoardDataPopulate);
} catch (e) {
await session.abortTransaction();
} finally {
Expand Down
Loading

0 comments on commit 8a8489b

Please sign in to comment.