MongoDB CRUD Coding Challenge
USING BOOKS & AUTHORS DATA

Prerequisites
Nodejs installed
Local MongoDB installed
Clone the repo
Run
npm installWrite codes inside services folder (
dao.service.ts,get.author.ts,get.book.ts)Run
tscRun the test scripts to validate the solution using the following commands:
npm run test-authorto run the authors.test.js tests.npm run test-bookto run the books.test.js tests.npm run fetch-bookto run the fetchBook.test.js tests.npm run fetch-authorto run the fetchAuthor.test.js tests.
GITHUB LINK - https://github.com/Krius2023/mongodb-crud-challenge/tree/main
Description
Functions
Create the list of functions
createRecord(model, type): Creates a new record based on the type (book or author).updateRecord(bookId, updates): Updates a book record with the provided updates.deleteRecord(bookId): Deletes a book record.getAuthor(authorId): Retrieves an author's details, including books count and book information.getBook(bookId): Retrieves a book's details, including author information, books count, and other books by the author.
createRecord
Input:
model: The data to be saved.type: The type of record to create (book or author).
Logic:
If type is
"book":Check if an author record exists with the requested authorId. If not, throw an error
"Author not found".Check if a book record already exists with the same title and authorId. If so, throw an error
"Book already exists".If no error, save the book record and update the booksCount in the respective author record.
If type is
"author":Check if an author record already exists with the same name. If so, throw an error
"Author name already exists".If no error, save the author record.
updateRecord
Input:
bookId: The ID of the book record to update.An object with fields to update (
title/authorId).
Logic:
If authorId is updated:
- Check if an author record exists with the updating authorId. If not, throw an error
"Author not found".
- Check if an author record exists with the updating authorId. If not, throw an error
Update the book record and update the
booksCountin the respective old and new author records.
deleteRecord
Input:
bookId: The ID of the book record to delete.
Logic:
- Delete the book record and update the
booksCountin the respective author records.
- Delete the book record and update the
getAuthor
Input:
authorId: The ID of the author record to retrieve.
Response:
Object to have authorDetails and booksByAuthor.
authorDetails: An object with the
authorId,nameandbooksCount.booksByAuthor: An array of book objects with
_id,title, andaddedOndate.
getBook
Input:
bookId: The ID of the book record to retrieve.
Response:
Object to have
bookDetails,authorDetails,otherBooksByAuthorbookDetails: An object with the book's title, authorId, and addedOn date.authorDetails: An object with the author's _id, name, and booksCount.otherBooksByAuthor: An array of book objects with _id and title.
Photo by Lukas: https://www.pexels.com/photo/person-encoding-in-laptop-574071/


