Skip to content

Commit

Permalink
Merge pull request #93 from Front-znad-zatoki/backend/#84-delete-orde…
Browse files Browse the repository at this point in the history
…r-dependencies

Backend/#84 delete order dependencies
  • Loading branch information
paula0403 authored Mar 14, 2021
2 parents af81ff2 + cd3893c commit cf2377b
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 109 deletions.
46 changes: 35 additions & 11 deletions api/order/Order.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import mongoose from 'mongoose';
import Screening from '../screening/Screening.js';
import Seat from '../seat/Seat.js';
import Ticket from '../ticket/Ticket.js';
import validateEmail from '../utils/validateEmail.js';

Expand All @@ -10,7 +9,6 @@ const orderSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
ref: 'User',
// required: true,
},
email: {
type: String,
Expand All @@ -31,8 +29,7 @@ const orderSchema = new Schema({
},
],

// TODO: prepare enum for that field
// TODO: add tickets array here?
// TODO: prepare enum for status field
});

orderSchema.methods.createOrdersDependencies = async function createOrdersDependencies(
Expand All @@ -59,14 +56,41 @@ orderSchema.methods.createOrdersDependencies = async function createOrdersDepend
};

orderSchema.post('save', (doc) => {
// console.log(doc);
console.log('post save');
console.log('post save', doc);
});

orderSchema.post('remove', { query: true, document: true }, (doc) => {
console.log(doc.tickets);
// TODO: add tickets delete logic
console.log('post remove');
});
orderSchema.post(
'remove',
{ query: true, document: true },
async (doc) => {
try {
const [ticketsToRemove, screeningToUpdate] = doc.tickets.reduce(
(acc, cur) => {
acc[0].push(cur.id);
if (!acc[1].includes(cur.screening)) {
acc[1].push(cur.screening);
}
return acc;
},
[[], []],
);
await Ticket.deleteMany({
_id: {
$in: ticketsToRemove,
},
});

await Screening.findByIdAndUpdate(screeningToUpdate[0], {
$pull: {
tickets: {
$in: ticketsToRemove,
},
},
});
} catch (err) {
console.log(err);
}
},
);

export default mongoose.model('Order', orderSchema);
4 changes: 2 additions & 2 deletions api/ticket/Ticket.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ const { Schema } = mongoose;

const ticketSchema = new Schema({
screening: {
type: Schema.Types.ObjectId,
type: mongoose.Schema.Types.ObjectId,
ref: 'Screening',
required: true,
},
order: {
type: Schema.Types.ObjectId,
type: mongoose.Schema.Types.ObjectId,
ref: 'Order',
required: true,
},
Expand Down
141 changes: 45 additions & 96 deletions api/user/userOrdersRoute.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,61 +69,54 @@ router.get(
// @desc Delete order
// @access Private
// TODO: check after orders merged, connect with orders
router.delete(
'/',
authMiddleware,
check('orderId', 'Something wrong with the order').notEmpty(),
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
router.delete('/:id', authMiddleware, async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}

try {
const order = await Order.findById(req.body.orderId)
.populate()
.exec();
if (!order) return res.status(404).send('Order not found');
const user = await User.findByIdAndUpdate(req.user.id, {
$pull: {
orders: {
_id: req.body.orderId,
},
try {
const order = await Order.findById(req.params.id)
.populate('tickets')
.exec();
if (!order) return res.status(404).send('Order not found');
const user = await User.findByIdAndUpdate(req.user.id, {
$pull: {
orders: {
_id: req.params.id,
},
}).select('orders email');
const userOrders = user.orders;
if (
!userOrders.some(
(orderItem) => orderItem.id === req.body.orderId,
)
) {
return res.status(404).send('Order not found');
}
if (!user) return res.status(404).send('User not found');
await user.save();
await order.remove();

const emailOptions = getMailOptions(
user.email,
'Order Deleted',
`Your order number: ${order.id} was successfully deleted`,
);
transporter.sendMail(emailOptions, (error, info) => {
if (error) {
console.log(error);
} else {
console.log(`Email sent: ${info.response}`);
}
});
res.status(200).json({
deletedOrder: order,
isAuthenticated: true,
});
} catch (err) {
res.status(500).send('Server Error');
},
}).select('orders email');
const userOrders = user.orders;
if (
!userOrders.some((orderItem) => orderItem.id === req.params.id)
) {
return res.status(404).send('Order not found');
}
},
);
if (!user) return res.status(404).send('User not found');
await user.save();
await order.remove();

const emailOptions = getMailOptions(
user.email,
'Order Deleted',
`Your order number: ${order.id} was successfully deleted`,
);
transporter.sendMail(emailOptions, (error, info) => {
if (error) {
console.log(error);
} else {
console.log(`Email sent: ${info.response}`);
}
});
res.status(200).json({
deletedOrder: order,
isAuthenticated: true,
});
} catch (err) {
res.status(500).send('Server Error');
}
});

// @route POST api/users/me/orders/
// @desc Add new order
Expand Down Expand Up @@ -253,48 +246,4 @@ router.post(
},
);

// @route PUT api/users/me/orders/
// @desc Update order
// @access Private
router.put('/', authMiddleware, async (req, res) => {
// const errors = validationResult(req);
// if (!errors.isEmpty()) {
// return res.status(400).json({ errors: errors.array() });
// }
// TODO: add validation
try {
const user = await User.findById(req.user.id).select('-password');
if (!user) return res.status(404).send('User not found');

const order = await Order.findById(req.body.orderId);
if (!order) return res.status(404).send('Order not found');

const userOrders = user.orders;
if (
!userOrders.some(
(orderItem) => orderItem.id === req.body.orderId,
)
) {
return res.status(404).send('Order not found');
}

if (req.body.tickets) {
order.tickets = req.body.tickets;
}
if (req.body.status) {
order.status = req.body.status;
}

await order.save();
res.status(200).json({
message: 'Order updated successfully',
order: order,
isAuthenticated: true,
});
} catch (err) {
console.error(err.message);
res.status(500).send('Server Error');
}
});

export default router;

0 comments on commit cf2377b

Please sign in to comment.