# Changelog ## 1.1.0: Deduped sets, custom checkboxes and database upgrade ### Database - Sets - Deduplicating rebrickable sets (unique) and bricktracker sets (can be n bricktracker sets for one rebrickable set) ### Docs - Removed extra `
` to accomodate Gitea Markdown - Add an organized DOCS.md documentation page - Database upgrade/migration - Checkboxes ### Code - Admin - Split the views before admin because an unmanageable monster view - Checkboxes - Customizable checkboxes for set (amount and names, displayed on the grid or not) - Replaced the 3 original routes to update the status with a generic route to accomodate any custom status - Instructions - Base instructions on RebrickableSet (the generic one) rather than BrickSet (the specific one) - Refine set number detection in file name by making sure each first items is an integer - Python - Make stricter function definition with no "arg_or_keyword" parameters - Records - Consolidate the select() -> not None or Exception -> ingest() process duplicated in every child class - SQL - Forward-only migration mechanism - Check for database too far in version - Inject the database version in the file when downloading it - Quote all indentifiers as best practice - Allow insert query to be overriden - Allow insert query to force not being deferred even if not committed - Allow select query to push context in BrickRecord and BrickRecordList - Make SQL record counters failsafe as they are used in the admin and it should always work - Remove BrickSQL.initialize() as it is replaced by upgrade() - Sets - Now that it is deduplicated, adding the same set more than once will not pull it fully from the Rebrickable API (minifigures and parts) - Make RebrickableSet extend BrickRecord since it is now an item in database - Make BrickSet extend RebrickableSet now that RebrickableSet is a proper database item ### UI - Checkboxes - Possibility to hide the checkbox in the grid ("Sets") but sill have all them in the set details - Management - Database - Migration tool - Javascript - Generic BrickChanger class to handle quick modification through a JSON request with a visual feedback indicator - Simplify the way javascript scripts are loaded and instantiated - Set grid - Filter by checkboxes and NOT checkboxes - Tables - Fix table search looking inside links pills - Wishlist - Add Rebrickable link badge for sets (@matthew) ## 1.0.0: New Year revamp ### Code - Authentication - Basic authentication mechanism with ONE password to protect admin and writes - CSV - Remove dependencies to numpy and panda for simpler built-in csv - Code - Refactored the Python code - Modularity (more functions, splitting files) - Type hinting whenever possible - Flake8 linter - Retained most of the original behaviour (with its quirks) - Colors - Remove dependency on color.csv - Configuration - Moved all the hard-coded parameters into configuration variables - Most of the variables are configuration through environment variables - Force instruction, sets, etc path to be relative to static - Docker - Added an entrypoint to grab PORT / HOST from the environment if set - Remove the need to seed the container with files (*.csv, nil files) - Flask - Fix improper socketio.run(app.run()) call which lead to hard crash on ^C - Make use of url_for to create URLs - Use blueprints to implement routes - Move views into their own files - Split GET and POST methods into two different routes for clarity - Images - Add an option to use remote images from the Rebrickable CDN rather than downloading everything locally - Handle nil.png and nil_mf.jpg as true images in /static/sets/ so that they are downloaded whenever necessary when importing a se with missing images - Instructions - Scan the files once for the whole app, and re-use the data - Refresh the instructions from the admin - More lenient set number detection - Update when uploading a new one - Basic file management - Logs - Added log lines for change actions (add, check, missing, delete) so that the server is not silent when DEBUG=false - Minifigures - Added a variable to control default ordering - Part(s) - Added a variable to control default ordering of listing - Retired sets - Open the themes once for the whole app, and re-use the data - Do not hard fail if themes.csv is missing, simply display the IDs - Light management: resync, download - Set(s) - Reworked the set checkboxes with a dedicated route per status - Switch from homemade ID generator to proven UUID4 for sets ID - Does not interfere with previously created sets - Do not rely on sets.csv to check if the set exists - When adding, commit the set to database only once everything has been processed - Added a bulk add page - Keep spare parts when importing - Added a variable to control default ordering of listing - Socket - Make use of socket.io rooms to avoid broadcasting messages to all clients - SQLite - Do not hard fail if the database is not present or not initialized - Open the database once for the context, and re-use the connection - Move queries to .sql files and load them as Jinja templates - Use named arguments rather than sets for SQLite queries - Allow execute() to be deferred to the commit() call to avoid locking the database for long period while importing (locked while downloading images) - Themes - Open the themes once for the whole app, and re-use the data - Do not hard fail if themes.csv is missing, simply display the IDs - Light management: resync, download ### UI - Admin - Initialize the database from the web interface - Reset the database - Delete the database - Download the database - Import the database - Display the configuration variables - Many things - Accordions - Added a flag to make the accordion items independent - Branding: - Add a brick as a logo (CC0 image from: https://iconduck.com/icons/71631/brick) - Global - Redesign of the whole app - Sticky menu bar on top of the page - Execution time and SQL stats for fun - Libraries - Switch from Bulma to Bootstrap, arbitrarily :D - Use of baguettebox for images (https://github.com/feimosi/baguetteBox.js) - Use of tinysort to sort and filter the grid (https://github.com/Sjeiti/TinySort) - Use of sortable for set card tables (https://github.com/tofsjonas/sortable) - Use of simple-datatables for big tables (https://github.com/fiduswriter/simple-datatables) - Minifigures - Added a detail view for a minifigure - Display which sets are using a minifigure - Display which sets are missing a minifigure - Parts - Added a detail view for a part - Display which sets are using a part - Display which sets are missing a part - Templates - Use a common base template - Use HTML fragments/macros for repeted or parametrics items - a 404 page for wrong URLs - an error page for expected error messages - an exception page for unexpected error messages - Set add - Two-tiered (with override) import where you see what you will import before importing it - Add a visual indicator that the socket is connected - Set card - Badges to display info like theme, year, parts, etc - Set image on top of the card, filling the space - Trick to have a blurry background image fill the void in the card - Save missing parts on input change rather than by clicking - Visual feedback of success - Parts and minifigure in accordions - Instructions file list - Set grid - 4-2-1 card distribution depending on screen size - Display the index with no set added, rather than redirecting - Keep last sort in a cookie, and trigger it on page load (can be cleared)