* docs: migrate from mkdocs to mdbook - Rename old mkdocs docs/ to old-docs/ for reference - Set up new docs/ with mdbook (book.toml + src/ tree) - Mirror full nav structure from mkdocs.yml into SUMMARY.md - Add Justfile-docs with docs-serve, docs-build, docs-check, docs-install recipes - Import Justfile-docs from root Justfile - Rewrite .github/workflows/docs.yml: build step uses taiki-e/install-action to install mdbook, split into separate build + deploy jobs, PR builds run the check step too * ci(docs): pin actions to SHAs, install mdbook via release binary * ci(docs): install mdbook from apt instead of curling a release binary * dev: replace mkdocs python stack with mdbook in dev image * ci(docs): apt only works on Debian; restore release binary install for Ubuntu CI * docs: fix duplicate file entries in SUMMARY.md * docs: remove docs-install recipe * docs: remove site-url from book.toml to fix asset loading * dev: install mdbook from upstream release binary, not Debian apt The Debian package (0.4.x+ds) strips bundled font assets, leaving the built site without fonts/fonts.css. Use the upstream tarball (same as CI) so the theme is complete. Handles x86_64 and aarch64. * docs: vendor mdbook tarballs in dev/mdbook/, install from there Dockerfile.dev uses COPY + tar to install the right arch at build time. CI extracts the x86_64 tarball directly from the checkout. No network access required for either — and no stripped-fonts Debian package. * fix: unwritten
1.2 KiB
Updating Goals
If a user has goals set, we need to update their progress on those goals as a result of this import.
Getting Relevant Goals
In V1 of Tachi, we fetched all goals for a user, and recalculated all of them.
This was fine for users with some goals, but for users with lots of goals, it quickly became a huge performance boon.
To avoid that, Tachi V2 fetches only the "relevant" goals as a result of the import. This is calculated as follows:
-
Single Goals are matched if their chartID is inside the set of chartIDs affected.
-
Multi Goals are matched if their data contains any chartIDs that were affected.
-
Folder goals are matched if the folder contains any charts inside the set of chartIDs affected.
Processing Goals
For every goal matched, we iterate over it and evaluate
it using EvaluateGoalForUser.
We then need to convert the returns of that function into the expected goal format for ImportDocuments.
That means we have to compare the old UserGoal's progress with the newly returned one.
If nothing has changed, we return undefined. If something
has changed, we return a bwrite key that contains a
MongoDB bulk-write operation to update the UserGoal, and the expected import format of goalID, old, new.