[x] Create a new Django app representing the main app of the project.
[x] Create a model representing a manga to capture metadata. At a minimum it would need: url, name, years. You can add anything else you will need as you implement the code.
[x] Create a view that receives an url from the user as a query parameter (we don't need a form here, we'll just query the url for the view with ?url= to send the url)
[x] The view will return a json to the user containing the field "message" in case of success or "error" in case of error.
If the url is received successully, a celery task is started and the task id is returned to the user as a response message. If there's a problem with the url, the user will receive the error in the response json.
Make sure to set status codes for the reponse (200 or 400).
[ ] Implement a celery task that scrapes the page at the url submitted by the user. Save metadata about the submitted manga and save images (it probably makes sense to have another model for the images).
If during the implementation subparts of manga can be extracted (like chapters or episodes) I think it makes sense to have a model for these as well.
I think the final model will have the tables:
manga
chapters (that will have foreign keys to manga)
images (that will have foreign keys to chapters)
After metadata and images are successfully saved, trigger another celery task that will create the manga files (described as next objective). Save the manga file in the manga chapter model.
[ ] Implement another celery task that will create a manga file for a chapter after all the images have been downloaded for that chapter.
The file format for a comic book file is .cbz and I think we can use this tool to convert a folder of images to .cbz: https://pypi.org/project/ftcbz/
Then we can convert the .cbz file to an ebook format like .epub using this tool: https://pypi.org/project/reCBZ/
You'll have to decide if it's worth the effort to try to import these in python or if you rather used them as command line tools.
[ ] Create another endpoint (view) where the user can send a task id as query parameter and they will receive the status of the task. If the status is completed, the user will also receive metadata about the downloaded manga.
[ ] Create an endpoint where the user can interact with all mangas in the system like so:
on the root of the endpoint the user will receive data about all mangas in the system
if the user specifies a manga id as a url parameter (no query parameter), they will receive the data for that specific manga or an error if the id does not exist
if the users sends a ?search query parameter, return data about all the mangas matching the search (you can search whatever you want; at a minimum the search will happen on the name of the manga case insensitive)
[ ] IF the users sends an url for a manga that's already in the system, don't create a task for it but just return the metadata to the user.
[ ] Implement a django management command that will list all of the mangas in the system as detailed as possible. We should be able to see what task created a specific manga, what was the date when it was created, the name, chapters with number and names.