From f5c13460cd8abdf9799b5e2c4eef62a82c4a493b Mon Sep 17 00:00:00 2001 From: David Ross Date: Mon, 16 Sep 2024 21:17:02 +0100 Subject: [PATCH] Docs added --- docs/Manga_simple.drawio.png | Bin 0 -> 75960 bytes docs/walk-through.md | 18 ++++ docs/web-app.md | 158 +++++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 docs/Manga_simple.drawio.png create mode 100644 docs/walk-through.md create mode 100644 docs/web-app.md diff --git a/docs/Manga_simple.drawio.png b/docs/Manga_simple.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..ec561a7564d011826514b8dd33143a558901d256 GIT binary patch literal 75960 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 z

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ⓈA-^J&h2q{YIb*)cB-axmQyjTc+Y+rCZEg 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 literal 0 HcmV?d00001 diff --git a/docs/walk-through.md b/docs/walk-through.md new file mode 100644 index 0000000..de9b684 --- /dev/null +++ b/docs/walk-through.md @@ -0,0 +1,18 @@ +# Walk Through + +Allow one to search and download Mangas from from some providers (site parser) and to optionally upload them to a cloud storage service (DropBox, MegaUpload etc.) + + +Uses argparse to parse the search term to the search menu: +- given a specific site parser, we: + - search and scrape the contents using bs4 + - return the results in a consistent format so they can be consumed by the menu +- it constructs an ASCII like menu to select the manga and volume(s) of interest +- upon selection we parse the results back to the parser with the manga and volume +- parser then downloads the volumes locally using a processing pool +- upload all files downloaded to a given file hosting site + + +The interface for each manga site class (site parsers) and uploaders use the adapter pattern, this allows one to easily add a new site by ensuring the same interface is used across all. + +# Scaling diff --git a/docs/web-app.md b/docs/web-app.md new file mode 100644 index 0000000..c684056 --- /dev/null +++ b/docs/web-app.md @@ -0,0 +1,158 @@ +# Web App + +Two versions here, one without user/relational data. + +![Simple System Design](./Manga_simple.drawio.png) + +## Simple + +### Endpoints + +#### Search Mangas + +Request: + +``` +GET /v1/search?query=dragon&sources=mangaka,mangafast + +query: STR +sources: LIST[STR] +``` + +Response: + +```json +[ + { + 'title': 'dragonball', + 'latest_volume': 98, + 'source': 'mangaka', + }, + ... +] +``` + +#### Download Mangas + +Request: + +``` +GET /v1/download?manga=dragonball&volumes=1,2,78&source=mangafast + +manga: STR +volumes: LIST[INTS] +source: STR +``` + +- Response: + +Using pre-signed S3 URLS allows us to keep the S3 bucket private and time limit the URLs access + +```json +[ + { + 'title': 'dragonball', + 'volume': 98, + 's3_url': OR null, + }, + ... +] +``` + +### Database + +As we have no relational data we can just store the information in a NoSQL database. + +#### MongoDB + +One database, one collection (`mangas`) with all documents: + +```json + { + 'title': 'dragonball', + 'volume': 98, + 's3_url': OR null, + } +``` + +## Less Simple + +Storing user data and relational data is required if we want to show users their specific manga + +### (More) Endpoints + +#### Sign Up + +- Request: + +``` +POST /v1/register + +{ + 'username': 'user', + 'password': 'pass', +} +``` + +Save password hashes to DB + +- Response: + +```json +{ + "success": true, + "message": "successfully registered" +} +``` + +#### Token + +Token can be given in `Authorization` header + +``` +POST /v1/login + +{ + 'username': 'user', + 'password': 'pass', +} +``` + +- Response: + +```json +{ + 'token': +} +``` + +### Database + +#### Postgres + +If we want to associate users with their mangas + +| id | username | password | +| --- | ---------- | --------------- | +| 1 | david.ross | \ | +| 2 | james.guy | \ | + +The manga volume is an FK to manga table + +| id | volume | manga | download_url | +| --- | ------ | ----- | ------------ | +| 1 | 98 | 2 | \ | +| 2 | 89 | 1 | \ | + +| id | manga | name | +| --- | ----- | ---------- | +| 1 | 1 | dragonball | +| 2 | 2 | bleach | + +Mapping table FK to user table and FK to volume table: + +| user_id | volume_id | +| ------- | --------- | +| 1 | 1 | +| 1 | 2 | +| 2 | 2 |