diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..571c522 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,196 @@ +# 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)