# eindopdracht in dit document staat overal pokémon verkeerd geschreven als pokemon om alle broncode ascii-vriendelijk te houden. combinatie readme en kladblok tijdens ontwikkeling ## gebruikte libraries - versies moeten nog gedocumenteerd worden - er wordt er vanuit gegaan dat deze libraries als systeemheaders/systeemlibraries (globaal) geïnstalleerd zijn - [nlohmann/json](https://github.com/nlohmann/json) voor json (de)serializen - [cpr](https://github.com/libcpr/cpr) voor https requests - [libzip](https://libzip.org/) voor zip bestanden maken - [csv2](https://github.com/p-ranav/csv2) voor csv bestanden parsen ## functionaliteit (pseudocode) ``` parse_cli_arguments() init_update_cache() case cli_argument.count 0: // no arguments (interactive mode) while 1: id = input_text("card id?: ") list = filter_card_list(id) if list.count > 1: card = choose_single_card() else: card = list[0] display_card_with_value_info(card) 1, 2: // input csv with optional output json (semi-interactive mode) ids = parse_csv() cards = [] for id in ids: card = get_card_by_id(id) display_card(card) cards += card; if cli_argument.count == 2: export_cards_as_zip(cli_argument[0]) else if input_yn("export? [Y/n]: "): output_filename = input_text("export filename?: ") export_cards_as_zip(output_filename) ``` ## cache formaat (voorbeeld) ``` cache/ date index swshp-SWSH001/ info.json card.png card_hires.png complete swshp-SWSH002/ info.json card.png card_hires.png complete swshp-SWSH..../ ``` - `date` bevat een unix timestamp wanneer de cache voor het laatst geupdate is (gebruikt om te checken of de cache stale is) (misschien overbodig) - de mappen direct onder de cache map zijn de volledige id's van de pokemon - `index` bevat op losse regels de namen van de mappen met pokemon info - `info.json` bevat voor elke kaart de json api response voor die kaart - `complete` is een leeg bestand die bijhoudt of een kaart 'compleet' is. dit houdt in dat alle bestanden in een kaartmap compleet gedownload zijn, geschreven zijn en de bestanden weer netjes gesloten zijn. de cache wordt bij initialisatie gevuld met de `swshp` set aan kaarten (wordt opgevraagd aan de API). wanneer een kaart gezocht wordt die niet bekend is bij de Pokedex klasse zal deze automatisch terugvallen op de API om tussen alle kaarten te zoeken. als de API de kaart wel kan vinden zal deze automatisch geindexeerd worden in `index` en de bijbehorende bestanden zullen in een losse map gedownload worden. ## zip formaat (voorbeeld) ``` output.zip/ cards.csv swshp-SWSH001.png swshp-SWSH002.png swshp-SWSH.... ``` - `cat cards.csv`: ``` id,value swshp-SWSH001,3.00 swshp-SWSH002,2.59 swshp-SWSH.... ``` (punt voor decimale punt inplaats van komma) - de kaart foto's zijn de -hires variant ## klassen (wip) - PokemonCard - PokemonTCGAPIClient - CacheManager - DownloadManager - ZipExport