* added chef hat
* removed unnecessary log
* modified recipe and recipe timeline event schema
changed timeline event "message" -> "event_message"
added "last made" timestamp to recipe
* added "I made this" dialog to recipe action menu
* added missing field and re-ran code-gen
* moved dialog out of context menu and refactored
removed references in action menu and context menu
refactored dialog to be triggered by a button instead
added route to update recipe last made timestamp
added visual for last made timestamp to recipe header and title
* added sorting by last made
* switched event type to comment
* replaced alter column with pydantic alias
* added tests for event message alias
* added recipe_timeline_events table to db
* added schema and routes for recipe timeline events
* added missing mixin and fixed update schema
* added tests
* adjusted migration revision tree
* updated alembic revision test
* added initial timeline event for new recipes
* added additional tests
* added event bus support
* renamed event_dt to timestamp
* add timeline_events to ignore list
* run code-gen
* use new test routes implementation
* use doc string syntax
* moved event type enum from db to schema
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
This PR does too many things :(
1. Major refactoring of the dev/scripts and dev/code-generation folders.
Primarily this was removing duplicate code and cleaning up some poorly written code snippets as well as making them more idempotent so then can be re-run over and over again but still maintain the same results. This is working on my machine, but I've been having problems in CI and comparing diffs so running generators in CI will have to wait.
2. Re-Implement using the generated api routes for testing
This was a _huge_ refactor that touched damn near every test file but now we have auto-generated typed routes with inline hints and it's used for nearly every test excluding a few that use classes for better parameterization. This should greatly reduce errors when writing new tests.
3. Minor Perf improvements for the All Recipes endpoint
A. Removed redundant loops
B. Uses orjson to do the encoding directly and returns a byte response instead of relying on the default
jsonable_encoder.
4. Fix some TS type errors that cropped up for seemingly no reason half way through the PR.
See this issue https://github.com/phillipdupuis/pydantic-to-typescript/issues/28
Basically, the generated TS type is not-correct since Pydantic will automatically fill in null fields. The resulting TS type is generated with a ? to indicate it can be null even though we _know_ that i can't be.
* added api extras to other tables
genericized api extras model from recipes
added extras column to ingredient foods
added extras column to shopping lists
added extras column to shopping list items
* updated alembic version test
* made mypy happy
* added TODO on test that does nothing
* added extras tests for lists, items, and foods
* added docs for new extras
* modified alembic versions to eliminate branching
* docs: fix typos
* typos: fix typos found by `codespell` across the codebase
* docs: fix `macOS` spelling
* docs: fix `authentification` terminology
"Authentification" is not a thing.
* docs: fix `localhost` typo in example link
* typos: fix in-code typos
These are potentially higher risk, but no other mentions of these typos
show up in the codebase.
* initial public explorer API endpoint
* public API endpoint
* cleanup recipe page
* wip: init explorer page
* use public URLs for shared recipes
* refactor private share tokens to use shared page
* refactored event dispatching
added EventDocumentType and EventOperation to Event
added event listeners to bulk recipe changes
overhauled shopping list item events to be more useful
modified shopping list item repo to return more information
* added internal documentation for event types
* renamed message_types.py to event_types.py
* added unique event id and fixed instantiation
* generalized event listeners and publishers
moved apprise publisher to new apprise event listener
fixed duplicate message bug with apprise publisher
* added JWT field for user-specified integration id
* removed obselete test notification route
* tuned up existing notification tests
* added dependency to get integration_id from jwt
* added base crud controller to facilitate events
* simplified event publishing
* temporarily fixed test notification
* add data-types required for login security
* implement user lockout checking at login
* cleanup legacy patterns
* expose passwords in test_user
* test user lockout after bad attempts
* test user service
* bump alembic version
* save increment to database
* add locked_at to datetime transformer on import
* do proper test cleanup
* implement scheduled task
* spelling
* document env variables
* implement context manager for session
* use context manager
* implement reset script
* cleanup generator
* run generator
* implement API endpoint for resetting locked users
* add button to reset all locked users
* add info when account is locked
* use ignore instead of expect-error
rewrite get_all routes to use a pagination pattern to allow for better implementations of search, filter, and sorting on the frontend or by any client without fetching all the data. Additionally we added a CI check for running the Nuxt built to confirm that no TS errors were present. Finally, I had to remove the header support for the Shopping lists as the browser caching based off last_updated header was not allowing it to read recent updates due to how we're handling the updated_at property in the database with nested fields. This will have to be looked at in the future to reimplement. I'm unsure how many other routes have a similar issue.
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fixed type error
* exposed created/updated timestamps to shopping list schema
* added custom route to mix in "last-modified" header when available in CRUD routes
* mixed in MealieCrudRoute to APIRouters
* added HEAD route for shopping lists/list-items
* replaced default serializer with FastAPI's
* fix type errors on event bus
* webhooks fields required for new implementation
* db migration
* wip: webhook query + tests and stub function
* ignore type checker error
* type and method cleanup
* datetime and time utc validator
* update testing code for utc scheduled time
* fix file cmp function call
* update version_number
* add support for translating "time" objects when restoring backup
* bump recipe-scrapers
* use specific import syntax
* generate frontend types
* utilize names exports
* use utc times
* add task to scheduler
* implement new scheduler functionality
* stub for type annotation
* implement meal-plan data getter
* add experimental banner
* Fixed incorrect generic deleted notification text
* Added custom "event_source" header for json notifs
* Added internal reference data to event notifs
* Added event listeners to shopping list items
* Fixed type issues
* moved JSON event source k:v pairs to message body
* added hook for all supported custom endpoints
fixed bug that excluded non-custom notification types
* created event_source class to replace loosely-typed dict
* fixed silent error when dispatching a null task
* moved url updates to static function
* added unit tests for event_source url manipulation
* removed array from event bus (it's unsupported)
* add 'use-abbreviation' db column
* type generation
* add view and edit elements
* check for use_abbreviation to display
* fix: alembic version check
* test: add use_abbreviation prop tests
refactored signup flow for entire registration process. Utilized seed data option for optional seeding of Foods, Units, and Labels. Localized registration page.
* feat: import original keywords as tags
* remove cached env
* Update frontend api types
* fix: Issues with previous tag scraping implementation
* Update category handling in backend
* Update backend tests to include group_id
* Correct type check
* Update create-url interface
* Improve tag cleaner list support
* remove builtin name shadowing
* update type annotations
* test include tags scraper
* implement scaper context for optional data
* readd cache venv
* use continue instead of break
* remove test callback
Co-authored-by: Miroito <alban.vachette@gmail.com>
* migration: add public, tags, and tools
* generate frontend types
* add help icon
* start replacement for tool-tag-category selector
* add help icon utility
* use generator types
* add support for cookbook features
* add UI elements for cookbook features
* fix tests
* fix type error
* fix disable button
* add backend env for restricting registration
* update state management
* add allow_signup to app info
* move allow_signup to backend only
* cleanup docker-compose
* potential darkmode fix
* fix missing variable
* add banner on login page
* use random bools for tests
* fix initial state bug
* fix state reset
* Added validators for users and recipes
provide a simple get api, allowing to test for existence of
- user by username
- recipe by slug
- group by name (not tested yet)
* updated formatting
* Use group_id+slug for recipes, use ValidationRespone
* Fixed Flake8 errors and warnings
* add missing field for TestUser init
* test-case for #1011
* revert regressions for #1011
* update cache key on new image
* lint
* fix#1012
* typing
* random_recipe fixture
* remove delete button when no listeners are present
* spacing
* update copy to match settings value
* update to GUIDs
* fix cookbook id relationships
* update webhook keys
* cleanup naming and attribute orders
* remove old database tables
* fix meal-plan images
* remove dashbaord and events api
* use recipe-id instead of id
* cleanup documentation assets
* cleanup docs for v1 beta-release
* add depends_on for docker-compose
* use docker volumes for examples
* move caddy to frontend container
* update naming
* refactor tests to use shared structure
* shorten names
* add tools test case
* refactor to support multi-tenant
* set group_id on creation
* initial refactor for multitenant tags/cats
* spelling
* additional test case for same valued resources
* fix recipe update tests
* apply indexes to foreign keys
* fix performance regressions
* handle unknown exception
* utility decorator for function debugging
* migrate recipe_id to UUID
* GUID for recipes
* remove unused import
* move image functions into package
* move utilities to packages dir
* update import
* linter
* image image and asset routes
* update assets and images to use UUIDs
* fix migration base
* image asset test coverage
* use ids for categories and tag crud functions
* refactor recipe organizer test suite to reduce duplication
* add uuid serlization utility
* organizer base router
* slug routes testing and fixes
* fix postgres error
* adopt UUIDs
* move tags, categories, and tools under "organizers" umbrella
* update composite label
* generate ts types
* fix import error
* update frontend types
* fix type errors
* fix postgres errors
* fix#978
* add null check for title validation
* add note in docs on multi-tenancy
* cleanup oversized buttons
* add get all by category function to reciep repos
* fix shopping-list can_merge logic
* use randomized data for testing
* add random getter to repository for meal-planner
* add stub route for random meals
* cleanup global namespace
* add rules database type
* fix type
* add plan rules schema
* test plan rules methods
* add mealplan rules controller
* add new repository
* update frontend types
* formatting
* fix regression
* update autogenerated types
* add api class for mealplan rules
* add tests and fix bugs
* fix data returns
* proof of concept rules editor
* add tag support
* remove old group categories
* add tag support
* implement random by rules api
* change snack to sides
* remove incorrect typing
* split repo for custom methods
* fix query and use and_ clause
* use repo function
* remove old test
* update changelog
* generate types
* use generated types
* ui updates
* init button link for common styles
* add links
* setup label views
* add delete confirmation
* reset when not saved
* link label to foods and auto set when adding to shopping list
* generate types
* use inheritence to manage exception handling
* fix schema generation and add test for open_api generation
* add header to api docs
* move list consilidation to service
* split list and list items controller
* shopping list/list item tests - PARTIAL
* enable recipe add/remove in shopping lists
* generate types
* linting
* init global utility components
* update types and add list item api
* fix import cycle and database error
* add container and border classes
* new recipe list component
* fix tests
* breakout item editor
* refactor item editor
* update bulk actions
* update input / color contrast
* type generation
* refactor controller dependencies
* include food/unit editor
* remove console.logs
* fix and update type generation
* fix incorrect type for column
* fix postgres error
* fix delete by variable
* auto remove refs
* fix typo
* fix group page
* setup group notification for backend
* update type generators
* script to auto-generate schema exports
* setup frontend CRUD interface
* remove old notifications UI
* drop old events api
* add test functionality
* update naming for fields
* add event dispatcher functionality
* bump to python 3.10
* bump python version
* purge old event code
* use-async apprise
* set mealie logo as image
* unify styles for buttons rows
* add links to banners
* add default assets for user profile
* add recipe avatar
* change user_id to UUID
* add profile image upload
* setup image cache keys
* cleanup tests and add image tests
* purge user data on delete
* new user repository tests
* add user_id validator for int -> UUID conversion
* delete depreciated route
* force set content type
* refactor tests to use temp directory
* validate parent exists before createing
* set user_id to correct type
* update instruction id
* reset primary key on migration
* feat: ✨ support for lockable recipes
* feat(backend): ✨ check user can update before updating recipe
* test(backend): ✅ add recipe lock tests
* feat(frontend): ✨ disabled lock action when not owner
* test(backend): ✅ test non-owner can't lock recipe
* hide quantity on zero value
* fix(backend): 🐛 temp/partial fix for recipes with same name. WIP
* feat(frontend): ✨ add back support for assets
* feat(backend): ✨ add back support for assets
* feat(frontend): ✨ add support for recipe tools
* feat(backend): ✨ add support for recipe tools
* feat(frontend): ✨ add onHand support for recipe toosl
* feat(backend): ✨ add onHand support for backend
* refactor(frontend): ♻️ move items to recipe folder and break apart types
* feat(frontend): ✨ add support for recipe comments
* feat(backend): ✨ Add support for recipe comments
* fix(backend): 💥 disable comments import
* fix(frontend): 🐛 fix rendering issue with titles when moving steps
* add tools to changelog
* fix type errors
Co-authored-by: hay-kot <hay-kot@pm.me>