CCCPaste

HackerRankQ3

import connectDatabase from "../config/database.js";
import { ObjectId } from "mongodb";

const db = await connectDatabase();
const collection = db.collection("bookings");

export const createBooking = async (req, res) => {
  try {
    const bookingData = req.body;

    // Convert the owner string to ObjectId 
    bookingData.ownerId = new ObjectId(bookingData.ownerId);
    bookingData.apartmentId = new ObjectId(bookingData.apartmentId);

    const checkInDate = new Date(bookingData.checkIn);
    const checkOutDate = new Date(bookingData.checkOut);

    const overlappingBooking = await collection.findOne({
      apartmentId: bookingData.apartmentId,
      $or: [
        {
          checkIn: { $lt: checkOutDate },
          checkOut: { $gt: checkInDate }
        }
      ]
    });

    if (overlappingBooking) {
	const start = overlappingBooking.checkIn.toISOString();
      	const end = overlappingBooking.checkOut.toISOString();
	return res.status(405).json({ error : `This apartment is already booked from ${start} to ${end}` });
    }

    const result = await collection.insertOne(bookingData);
    res.status(201).json(result);
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: "Server error" });
  }
};