Create a Command Line Interface (CLI) application in Node.js that allows users to manage a movie catalog. The application will incorporate concepts such as object-oriented programming, prototypes, arrays, ES6 features, async programming, HTTP requests using the Fetch API, file handling, and module usage.
Display Movie Catalog: Read movie data from a JSON file and display a list of movies in the catalog.
Add New Movie: Allow users to add new movies to the catalog by providing details such as title, director, release year, and genre. The movie data should be stored in the JSON file.
Update Movie Details: Enable users to edit the details of a specific movie by selecting the movie from the catalog and updating its properties like title, director, release year, and genre.
Delete Movie: Allow users to remove a movie from the catalog by selecting the movie and deleting it from the JSON file.
Search and Filter: Implement search functionality that allows users to search for movies by title, director, or genre. Additionally, provide options for filtering the movie catalog based on specific criteria like genre or release year.
Fetch Movie Data: Utilize the Fetch API to make HTTP requests to a movie database API (such as OMDB API) to fetch additional movies from the API and store it in the JSON file.
Modules: Structure the project using modules to separate concerns and improve maintainability. Create separate modules for file handling, movie management, API requests, and user interaction.
Async Programming: Implement asynchronous operations using Promises or async/await to handle file read/write operations and API requests.