- Added cocktail prices
- Added
/cocktails/{id}/prices
endpoint - Show all calculated prices per price category
- Automatically converts units to calculate the price if possible
- Added
- Added
/menu/export
endpoint- Exports menu as CSV
- Added
/bars/{id}/cocktails
endpoint, showing bar shelf cocktails BasicCocktail
schema now includesshort_ingredients
property- TODO: Add shelf, prices export
- Fixed missing substitute ingredient unit conversion in exports
- Fixed missing max amount when importing from export
- Added bar shelf
- Each bar now has its own shelf which can be viewed by every bar member
- Currently members with Admin and Moderator roles can manage bar shelf
- Bar shelf will be initially populated with all ingredients that current bar owner has in his shelf
- Added GET
/bars/{id}/ingredients
endpoint - Added POST
/bars/{id}/ingredients/batch-store
endpoint - Added POST
/bars/{id}/ingredients/batch-delete
endpoint - Added filtering by
bar_shelf
attribute to/ingredients
and/cocktails
endpoints - Added sorting by
missing_bar_ingredients
attribute to/cocktails
endpoint - Added
total_bar_shelf_cocktails
to/stats
endpoint - Added bar shelf status attributes to
Ingredient
andCocktail
response schemas
- You can now add images to Bar resource
- Allows to upload custom bar logo, for example
- Fallback to "EUR" for unknown currencies in menu (fixes migration issues from v3)
- Added validation to endpoints that manage user and bar shelf
- Check for shelf ingredients before adding them to the shelf
- Fix for missing directories in docker entrypoint
- Fix export id generation
- Added prod target to docker image
- Fixed wrong endpoint name
- Fixed a bug where the bar import command checked the wrong filepath
- Fixed a bug where cocktails with substitutes + any other filter were not being filtered correctly
This is a new major release. Here's a quick summary of the more interesting changes:
- Docker image is now run as an unprivileged user by default. This has various implications, so please check the migration guide for more info
- Improved API endpoint naming and structure
- Added public Bar Assistant JSON schema specification for cocktail recipes
- Data exporting is now available in multiple formats
- Minimal PHP version is now 8.3
- Removed
imagick
PHP extension - New extensions required:
ffi
- Removed importing cocktails from collections
- Removed importing data from Bar Assistant v2
- List all cocktails and ingredients endpoints don't have default includes anymore
- Refer to OpenAPI documentation for a list of available includes
- Shelf
- Moved
/shelf/ingredients
to/users/{id}/ingredients
- Changed response schema, now returns
IngredientBasic
- Supports pagination
- Changed response schema, now returns
- Moved
/shelf/cocktails
to/users/{id}/cocktails
- Changed response schema, now returns
CocktailBasic
- Supports pagination
- Changed response schema, now returns
- Moved
/shelf/cocktails/favorites
to/users/{id}/cocktails/favorites
- Changed response schema, now returns
CocktailBasic
- Supports pagination
- Changed response schema, now returns
- Moved
- Removed
cocktails
property fromIngredient
schema- Use
/ingredients/{id}/cocktails
endpoint instead - Supports pagination
- Use
- Moved
/ingredients/recommend
to/users/{id}/ingredients/recommend
- Grouped
/login
,/logout
,/register
,/forgot-password
,/reset-password
and/verify/{id}/{hash}
endpoints into/auth
- Shopping list
- Moved
/shopping-list
to/users/{id}/shopping-list
- Updated
ShoppingList
schema
- Updated
- Moved
- Collections
- Removed PUT
/collections/{id}/cocktails/{cocktailId}
endpoint - Removed
/collections/{id}/share
endpoint - Removed DELETE
/collections/{id}/cocktails/{cocktailId}
endpoint - Removed PUT
/collections/{id}/cocktails/{cocktailId}
endpoint - Changed POST
/collections/{id}/cocktails
endpoint to PUT/collections/{id}/cocktails
- Moved GET
/collections/shared
to GET/bars/{id}/collections
- Removed PUT
- Ratings
- Moved
/ratings/cocktails/{id}
to/cocktails/{id}/ratings
- Changed POST ratings response status code to 201
- Moved
- Menu
- Changed
price
attribute in menu request fromstring
tointeger
- Changed
- Exports
- Added POST
/exports/{id}/download
endpoint- Used to generate a download link for an export
- Added GET
/exports/{id}/download
endpoint- Now requires a token and an expiration date
- Authorization is not required anymore
- Used to download an export
- Added POST
- Import
- Importing now requires a valid JSON schema
- Removed
save
parameter from/import/cocktail
endpoint
- Removed
main_image_id
from cocktail model- Use
images.sort
instead
- Use
- Removed
main_image_id
from ingredient model- Use
images.sort
instead
- Use
- Stats
- Moved
/stats
to/bars/{id}/stats
- Moved
- Introduced
Bar-Assistant-Bar-Id
header to specify bar id- Used for all endpoints that require bar id
- You can still send
bar_id
query parameter when needed, but it is considered deprecated
- Added
/ingredients/{id}/cocktails
endpoint, lists all cocktails that use this ingredient- Includes cocktails that use this ingredient as a substitute
- Added
/ingredients/{id}/substitutes
endpoint, lists all ingredients that are used as a substitute for this ingredient in cocktail recipes - Introduced new export recipe schema
- Added
quantity
to shopping list ingredients - Images are now converted to WebP format before saving to disk
- Added
/images
endpoint, this endpoint is used to list all user uploaded images - Bar search tokens are now saved in database
- Added
/import/scrape
endpoint- This endpoint is used to extract recipe data from a website
- Result is a JSON schema that can be imported via
/import/cocktail
endpoint - Images in response are now base64 encoded. This allows more flexibility in image handling for the clients
- Added
used_as_substitute_for
andcan_be_substituted_with
to ingredient response
- Recommended ingredients now take complex ingredients into consideration
- Image processing moved from Imagick to Vips
- This now requires
libvips
to be installed on the server- You can install it via
apt-get install -y --no-install-recommends libvips42
- You can install it via
- This now requires
ffi
PHP extension to be installed, and some .ini tweaks
- This now requires
- Meilisearch client API keys are now generated via artisan command
- All dates in responses are now in ISO 8601 format
- You can now update slug of existing bar
- Fix missing base data in recipes export
- Updated the way OpenAPI specification is generated
- Now generated directly from the code
- Should improve sync between docs and implementation
- Updated docs rendering
- Improved complex ingredient matching
- Fixed wrong matching cocktails when parent ingredient tracking is enabled
- Added price categories
- Categorize prices by currency and name
- Added ingredient prices
- Add price per unit
- Assign price categories
- Added
json+ld
cocktail share type
- Added
intl
PHP extension to docker images
- Fix glass volume not nullable #301
- Added support for complex ingredients
- Complex ingredient is ingredient that contains other ingredients
- If you have all ingredients that are a part of complex ingredient, that complex ingredient will be automatically matched in your shelf
- For example: If you have a "Lemon", you should also match "Lemon juice"
- Ingredients now include
in_shelf
,in_shelf_as_substitute
,in_shelf_as_complex_ingredient
attributes to show how are they matched in your shelf
- Added ingredient bar ownership validation when adding complex and cocktail ingredients
- Punchdrink scraper now scrapes "Editors note" part of the recipe and includes it into description
- Upgraded framework to Laravel 11
- Added
bar:merge-ingredients
command- Used for merging multiple ingredients into one
- Improved ImbibeMagazine scraper, now supports recipes in "older" format
- Optimized ingredients list endpoint DB queries
- Optimized similar cocktails list endpoint DB queries
- [Internal] Moved to Laravel Pint for code style
- [Internal] Imagick extension is now used int tests
- [Internal] Tests are now run in parallel in CI
- Fixed a crash when importing ingredients from array without sort attribute
- Added bar settings
- Currently supports
default_units
anddefault_lang
- Currently supports
- You can change units used in collection CSV, markdown and text share by passing query string
units
with one of the following units:ml
,cl
,oz
- CocktailIngredient schema now includes converted and formatted values for:
ml
,cl
,oz
- Added
volume
toGlass
schema - Added
volume_units
toGlass
schema
- Updated cocktail text share format
- Added more logging to docker runtime
- Add POST
bars/{id}/transfer
endpoint- This is used to transfer bar ownership to another user
- Updated the way permissions are handled in when bar assistant container starts.
- This should improve startup/restart time after the initial setup
- Allow scraping and ratings in demo environment
- Hide tokens in demo environment
- Fix fatal error while importing unknown JSON format as a collection
- Fix missing unique IDs for resources with same name when creating exports
- Target master branch
- Fix fatal error while importing unknwon JSON format as a collection
- Fix missing unique IDs for resources with same name when creating exports
- Added
volume_ml
property to cocktail schema- Shows approximate total drink volume
- Added
alcohol_units
property to cocktail schema- Shows approximate drink alcohol units
- Added
calories
property to cocktail schema- Shows approximate drink calories
- Added "KindredCocktails" scraper
- ABV calculation now supports all standard units
- "CocktailParty" scraper now correctly shows source ingredient string
- Bar export files now correctly get cleaned when deleting a bar
- Fixed recipes failing to import when ingredients were missing a category
- "CocktailParty" scraper now correctly parses units
- Other minor scraping fixes
- Added
/exports
endpoints- With this endpoint you can now manage recipe exporting for specific bars
- Added
specific_ingredients
cocktails filter- This will show recipes that always contain specific ingredients
- Added
public_id
andslug
to public menu cocktail response
- Fixed "CocktailParty" scraper
- Added POST
/cocktails/{id}/copy
endpoint - Added POST
/password-check
endpoint
- Updated and consolidated cocktail recipe share structure
- Cocktails now sync thumbnail URL to search engine
- Fixed search sometimes not correctly showing all results, for example, searching for
army
would not showarmy & navy
- Added
/tokens
endpoint- You can create and manage custom Personal Access Tokens
- Current available token abilities are
cocktails.read
,cocktails.write
,ingredients.read
andingredients.write
- Tokens can have expiration date
- You can now pass optional
token_name
when requesting a new token vialogin
endpoint
- Added
slug
column tobars
table - Added a simple bar menu
- Added POST and GET
/menu
endpoints - Added GET
/explore/menus/{barSlug}
public endpoint - This is a simple menu implementation, more features are coming in future
- Added POST and GET
- When exporting and importing recipe data, timestamps are also imported
- Added
favorite_tags
to stats endpoint - Added
--type
option to recipes export- Suports
yml
(default) andjson
- Suports
- Optimized cocktail shelf query when parent ingredient tracking is on
- Searching by name now also searches slug
- Fixed missing substitute ingredient data on default recipe data import
- Fixed missing parent ingredient data on default recipe data import
- Fixed missing ingredient note data on default recipe data import
- Added
missing_ingredients
cocktails filter - Added
use_parent_as_substitute
setting to bar memberships- With this you can toggle using parent ingredient of a specific ingredient as a substitute in your shelf
- Before, this was available via experimental
PARENT_INGREDIENT_SUBSTITUTE
env variable
- Added
csv
export to cocktail collections - Added
/ingredients/recommend
endpoint- This provides recommendations regarding the additional ingredients that may be added to your shelf to expand potential new cocktail recipes.
- Removed
PARENT_INGREDIENT_SUBSTITUTE
env variable - Update login error message depending on mail confirmation config
- Update min log level to "warning"
- Updated cocktail markdown export format
- JSON export format is now the same as exported YAML recipes
- Bar Assistant now has a new cloud offering and homepage: barassistant.app
- Added
total_bar_members
count - You can now edit existing image
- Added missing ingredient created and updated timestamps
- Correctly cleanup user images after deleting a user via cli
- Add missing endpoints to docs
- Account deleted mail not getting sent correctly
- Send transactional email about password change
- Send transactional email about account deletion
- Bars can now have different statuses:
active
- Active bar, default valuedeactivated
- Deactivated bar, no one can access itprovisioning
- Bar is currently getting populated with data. Usually set at the start of bar setup and removed after all data has been imported.
- Added new endpoints
- POST
/bars/{id}/status
- To update bar status
- POST
- Images now get resized up to 1400px height max
- Update email styling
- Added
bcmath
extension - Added CORS headers to images
- Importing cocktails now use the same authorization policy as cocktail creation
- You can now exclude cocktails by specific ingredients #230
- Added
filter[ignore_ingredients]=3,7,9
filter tococktails
endpoint
- Added
- Added
cron
to docker image and enabled Laravel task scheduler
- Added support for Meilisearch v1.5
- Default login tokens now expire after 7 days
- Improved scraping support for Liquor.com
- Updated base docker image used as base
- Removed algolia package
- Removed searchable
date
attribute fromcocktails
index - Removed searchable
origin
attribute fromingredients
index
- Fixed typos in OpenAPI spec
- Bars can only be deleted by a bar owner (user that created the bar)
- Add missing mail confirmation when creating a user via
users
endpoint
- You can now send emails from Bar Assistant if you have the correct settings
- To configure SMTP, set the following ENV variables:
MAIL_HOST=
MAIL_PORT=
MAIL_ENCRYPTION=
MAIL_USERNAME=
MAIL_PASSWORD=
- To request other drivers that Laravel supports, open a new github issue
- To configure SMTP, set the following ENV variables:
- Added POST
/forgot-password
endpoint- You can use this endpoint to request a password change email
- You must set the reset URL by setting
MAIL_RESET_URL
env variable- For example:
MAIL_RESET_URL="https://bar.local/reset-password?token=[token]"
- For example:
- Added POST
/reset-password
endpoint- You can use this endpoint to reset the password with confirmation key from the email
- Added
MAIL_REQUIRE_CONFIRMATION
env variable, (false
by default)- If you enable this, users will have to verify their accounts via link in a email before authenticating
- You must set the confirmation URL by setting
MAIL_CONFIRM_URL
env variable- For example:
MAIL_CONFIRM_URL="https://bar.local/confirmation/[id]/[hash]"
- For example:
- Added GET
/verify/{id}/{hash}
endpoint
- More information about email settings will be added to docs
- Enabled sqlite WAL mode
- From now, passwords can't be shorter than 5 chars
- Improved tag matching, tags are now matched by their lowercase name, and duplicates are ignored
- Removed some properties from a public cocktail endpoint response:
main_image_id
,images.file_path
,images.id
.
- Added utensils to exported recipes
- Fixed cocktail utensil migration from v2
- Updated base bar cocktails and ingredients
- Now includes data from https://github.com/bar-assistant/data
- Added
php artisan bar:export-recipes {barId}
command- This will export all recipes from a bar in a .yml format, similar to repository mentioned above
- Added
php artisan bar:import-recipes {filename}
command- This will import recipe data exported via upper method
- Added
php artisan bar:delete-user {email}
command- This will completely delete user and all his data, including cocktails, bars and ingredients he created.
- Command
php artisan bar:export-zip
is now deprecated and will be removed in future versions- You can only import data from the same version of Bar Assistant that your exported data from
- Command
php artisan bar:import-zip
is now deprecated and will be removed in future versions- Passwords and emails are not included by default when exporting data
- Users that delete their account will now be "soft" deleted
- All their user data will be anonymized
- All bar memberships and related data will be deleted
- Invisible
chars are now removed when importing data from scrapers - Fix some auth errors when updating images
- Fix joining wrong columns on bar export leading to import errors #218
- Added
bar:export-zip
command- You can use this command to export all the data from specific bars
- For example:
php artisan bar:export 5 7 9
will export all data from bars with id: 5, 7, 9
- Added
bar:import-zip
command - Now you can share your collections with other bar members
- Added
/collections/shared
endpoint - Added
is_bar_shared
property to collection request
- Added
- Fix cocktail share endpoint not working if ingredient does not have category
- Added missing properties to public recipe (ingredient note and substitute amounts)
- Fixed role not updating on user save
- Joining a bar will default to "Guest" role instead of "General"
- Bar Assistant now supports multiple bars.
- With this change a lot of endpoints now require to have bar reference, this comes in a form of
bar_id
query parameter - Please refer to the new schema specification to see what endpoints now require
bar_id
query parameter
- With this change a lot of endpoints now require to have bar reference, this comes in a form of
- This update also changed a lot database table schemas, so I advise you to create a backup of your data before you update to v3
- Users can be invited or join with invite code to specific bars
- Users can have one of the following roles in a bar:
- Guest
- Rate and favorite cocktails
- Create personal collections
- General
- Everything as "Guest"
- Can add cocktails and ingredients
- Moderator
- Everything as "General"
- Can not modify bar
- Can not change user roles
- Admin
- Everything as "Moderator"
- Full access to all bar actions
- Guest
- Updated a lot of schemas, refer to openapi specification to see the changes
- Token response is now wrapped with
data
object like the rest of the endpoints endpoint - Removed POST
shelf/ingredients
endpoint - Removed POST
shelf/ingredients/{ingredientId}
endpoint- Upgrade guide: Use
shelf/ingredients/batch-store
endpoint
- Upgrade guide: Use
- Removed DELETE
shelf/ingredients/{ingredientId}
endpoint- Upgrade guide: Use
shelf/ingredients/batch-delete
endpoint
- Upgrade guide: Use
- Removed
notes
property fromCocktail
schema- Upgrade guide: Use
notes/
endpoint to get users notes
- Upgrade guide: Use
- Removed
glasses/find
endpoint- Upgrade guide: Use
glasses/
endpoint withfilter[name]
query string
- Upgrade guide: Use
- Removed GET
/images
endpoint - Removed
bar:make-admin
command - Removed
bar:open
command - Removed
bar:refresh-user-search-keys
command - Removed
bar:import-zip
command - Removed
bar:export-zip
command - Removed
bar:scrape
command - Renamed
/user
endpoint to/profile
- Renamed
user_id
filter oncocktails
endpoint tocreated_user_id
- Renamed
user_id
filter oningredients
endpoint tocreated_user_id
- Ingredient category is not required anymore when adding an ingredient
- Added
bars/
endpoint - Added GET
notes/
endpoint - Stats now have users top 5 favorite ingredients, calculated from favorite cocktails
- Importing cocktails from collection now has actions on how to handle duplicates
- Added
bar:backup {barId}
command - Cocktail ingredient now supports variable amounts, you can add max amount with
amount_max
attribute - Cocktail ingredient now can have a note attached
- Cocktail substitutes now have the following attributes:
ingredient_id
,amount
,amount_max
,units
- Added options on how to handle duplicated recipes when importing collection
- Duplicates are matched by recipe name
- Possible actions:
- Do nothing
- Overwrite duplicated
- Skip duplicates
- Added
average_rating_min
filter tococktails
endpoint - Added
average_rating_max
filter tococktails
endpoint
- Default database filename changed to
database.ba3.sqlite
- Optimized base images of cocktails and ingredients
- Cocktail and ingredient images are now categorized in folders by bar id
- Merged all migrations to a single one
- Meilisearch API keys are now generating tenant tokens
- Changed the way slugs are generated, they now include bar id
- Changed what attributes are searchable
- Removed from
cocktails
index:garnish
,image_hash
,main_image_id
,user_id
,glass
,average_rating
,main_ingredient_name
,calculated_abv
,method
,has_public_link
- Added to
cocktails
index:bar_id
- Removed from
ingredients
index:strength_abv
,color
- Added to
ingredients
index:bar_id
- Removed from
- Added export options for version 3:
php artisan bar:export-zip --version3
- Fixed migrations missing on first start
- Fixed notes staying after cocktail delete
- Fixed missing env variable
- Fixed null mapping of cocktail substitutes when importing from collection
- Fixed failing migrations due to meilisearch syncing #158
- Fixed missing utensil info on GET cocktail endpoint
- Fixed missing ratings
- Added
markdown
type to share endpoint - Added
/collections/{id}/share
endpoint- You can share your collection as JSON, YAML
- Added
/shopping-list/share
endpoint #124- You can share shopping list as markdown
- Added
utensils
#127- You can attach required utensils for cocktail recipes
- Added
/ingredients/{id}/extra
#133- This will show you how many cocktails you can make if you add ingredient to shelf
- Added next and prev cocktail actions #149
- Added new scrapers
- Steve The Bartender
- Property
ingredients
onCocktail
schema is now only shown if you include it withinclude=ingredients
query string - Property
short_ingredients
onCocktail
schema removed - Property
tags
onCocktail
schema is now array of objects - Property
ingredient_category_id
onIngredient
schema removed - Improved website recipe scraping
- Added new scrapers
- CocktailsDistilled
- Added
total_collections
toStatsResponse
schema - Added new sort to
ingredients
endpoint:total_cocktails
- Removed
user_id
fromCocktail
schema - Removed
main_ingredient_name
fromCocktail
schema
- Property
short_ingredients
onCocktail
schema will be removed in next release - Property
tags
onCocktail
schema will be changed to array of objects in next release, currentlycocktail_tags
- Property
ingredient_category_id
onIngredient
schema will be changed to array of objects in next release, currentlycocktail_tags
- Property
ingredients
onCocktail
schema will be only shown if you are including the relationship via query parameter in the next release
- Fixed typo for
include
query param in specification #147 - Importing recipes via API calls will correctly set cocktail author
- Improved recipe instructions parsing for default parser
- Added cocktails count to
tag
,glass
andcocktail_method
resources - Added
abv_min
,abv_max
,user_rating_min
,user_rating_max
andmain_ingredient_id
cocktail query filters - Added
main_ingredients
ingredient query filter - Added
shelf_ingredients
cocktail query filter- This will return all cocktails you can make with the given ingredients
- This allows you to create on-the-fly custom shelf cocktails
- Added POST
/collections/{id}/cocktails
endpoint- This endpoint allows you to add multiple cocktails to collection with single call
- Added
cocktails
request property toCollectionRequest
schema- This allows you to add cocktails when creating new collection
- Added
include
query option tococktails
endpoint- This is used to toggle extra available data when fetching cocktails
- ABV is now saved in the cocktails table with the cocktail #139
- Default results per page on
cocktails
resource increased to 25
- Property
user_id
onCocktail
schema will be removed in next release, useuser.id
property instead - Property
main_ingredient_name
onCocktail
schema will be removed in next release
- Fixed boolean query filters not correctly filtering the results
- Fixed slugs with only numbers fetching by
id
column first instead ofslug
#140 - Added missing cache clearing after importing data from zip file
- Fixed missing eager load of
user
relation when fetching cocktails - Fixed old cocktail ingredients not having correct ingredient sorting
- Fixed image extension detection sometimes falling back to jpg for no good reason
- Improved schema scraping, and added new scrapers for
- CocktailParty
- LiberAndCo
- DiffordsGuide
- TheCocktailDB
- Added
user_name
to cocktail response - Added filters to
/collections
endpoint - Added
missing_ingredients
sort to cocktails endpoint- This will sort by number of user's missing ingredients #137
- Added
/cocktails/{id}/similar
endpoint to show similar cocktails #40
- Added support for Meilisearch v1.2
- Added
/import/cocktail
endpoint- Supports importing cocktails in YAML and JSON formats
- Supports importing cocktails from URLs that are supported by built in scrapers
- Added
/cocktail/{id}/share
endpoint- Supports sharing cocktails in JSON, YAML, XML and plain text format
- Disabled foreign key checks when importing data from zip file #117
- Minimum supported Meilisearch version is 1.1
- Upgrade guide: If you are using docker bump meilisearch version to 1.1. You can safely delete Meilisearch container and it's volume, Bar Assistant will sync data when you restart the Bar Assistant container
- Changed query parameters for
/cocktails
endpoint- Upgrade guide: Refer to API spec to see new parameters
- Changed query parameters for
/ingredients
endpoint- Upgrade guide: Refer to API spec to see new parameters
- Removed
/cocktails/user-favorites
endpoint- Upgrade guide: Available via
/cocktails?filter[favorites]=true
- Upgrade guide: Available via
- Updated
/cocktails/user-shelf
to return only cocktail ids and moved to/shelf/cocktails
- Upgrade guide: Old response schema available via
/cocktails?filter[on_shelf]=true
- Upgrade guide: Old response schema available via
- Removed
/ingredients/find
endpoint- Upgrade guide: Available via
/ingredients?filter[name_exact]=whiskey
- Upgrade guide: Available via
- Removed
/cocktails/random
endpoint - Updated
/shelf
endpoints to make more sense- Moved GET
/cocktails/user-shelf
endpoint to GET/shelf/cocktails
- Moved GET
/shelf
endpoint to GET/shelf/ingredients
- Moved POST
/shelf
endpoint to POST/shelf/ingredients
- Moved POST
/ingredients/{ingredientId}
endpoint to POST/shelf/ingredients/{ingredientId}
- Moved DELETE
/ingredients/{ingredientId}
endpoint to DELETE/shelf/ingredients/{ingredientId}
- Moved GET
- Moved PUT
/images/{id}
endpoint to POST/images/{id}
- You can now use this method as a pseudo PATCH operation on image resource
- You can now update the image file
- Removed
site_search_index
indexing- Upgrade guide: If possible migrate to federated/multi-index search
- Redis is now mandatory dependency
- Upgrade guide: Setup redis with
REDIS_HOST
,REDIS_PASSWORD
,REDIS_PORT
env variables
- Upgrade guide: Setup redis with
- Removed
bar:dump-search
command- Upgrade guide: Follow migration/upgrade guide for your selected search driver
- Removed
id
fromCocktailIngredient
schema - Updated
UserIngredient
schema - Updated
Ingredient
schema- Moved
parent_ingredient_id
toparent_ingredient
object, accessible viaparent_ingredient.id
- Moved
- Removed
DISABLE_LOGIN
env variable
- Meilisearch is no longer mandatory dependency for API to work
- Added support for all default Laravel Scout drivers, meaning:
- You can now use Algolia as your search engine
- You can now use database as your search engine
- Added
DISABLE_LOGIN
environment variable- This will remove the need to authenticate with token to access the api
- Added GET
/images
endpoint ImageRequest
schema now supportsimage_url
parameter to upload image from URL- Added
MAX_USER_BARS
env variable, defaults to 50- This limits how many bars can a single user create
- Fixed openapi swagger docs url
- Enabled xdebug in local development dockerfile
- Replaced default image processor GD with Imagick
- Fix missing array key error on public pages
- Fix cocktail ingredient units and amount display
- Added notes endpoint
- Currently only supported for
cocktails
resource
- Currently only supported for
- Added cocktail collections endpoint
- Added new ENV variable:
PARENT_INGREDIENT_SUBSTITUTE
- This will take in account parent ingredients when querying what cocktails you can make #95
- Added
total_shelf_ingredients
to stats endpoint
- Optimized some SQL queries
- Now running on PHP 8.2
- Added support for Meilisearch v1.1
- Added
on_shelf
filter to ingredients list
- Added image placeholder hash with ThumbHash algorithm
- Moved default zip export path to
storage/bar-assistant/
- Added
public_id
to cocktail schema response - Added endpoint for removing public link
- Ignore null passwords when updating profile
- Increase production upload body size
- Added
sort
attribute to image resource
- When editing cocktail with new images, Bar Assistant will now add new images instead of overwriting the existing ones
- Increased web server upload file size in docker development environment
- Application version now automatically tagged with github ref
- Fix importing cocktails from the CLI #83
This update includes a big change to docker image configuration:
- Now using PHP-fpm and Nginx
- New volume mapping:
/var/www/cocktails/storage/bar-assistant
- Improved error logging
- Updated Meilisearch to stable version (1.0)
As such you should follow the migration guide available here.
- Fix type cast issue when adding ingredients to cocktail #77
- Updated framework to Laravel 10
- Updated docker image configuration
- Added support for Meilisearch 1.0
- Fix max total hits limit for search indexes
- Added
/find
endpoint to search resource by name- Added to cocktails and ingredients endpoint
- Added
parent_ingredient_id
to ingredient response
- Updated packages, including security fix for
symfony/http-kernel
- Updated import and export commands
- Set method for existing cocktails without method
- This syncs stock cocktail data with existing data
- Fix permission bug introduced by copying app files in docker
- Added cocktail ABV, calculated from cocktail ingredients
- Added cocktail methods
- Added command to refresh meilisearch user API keys
- Recipe scraping
- Added
/scrape/cocktail
endpoint - BA will now try to parse JSON+LD schema and microdata if no specific site parser exists
- Support for TheDrinkBlog
- Added
- Added automatic dev docker images building
- Fix some scraper issues
- Fix Imbibe scraper issue with instructions counter
- Updated order of some base cocktail ingredients
- Added zip extension to dockerfile
Some of this features are available but still need documenting and testing
- Added experimental features like exporting and import recipes between BA instances
- Added
/cocktails/{id}/make-public
method- This will create a publicly accessible cocktail data at
/explore/cocktails/{ulid}
- This will create a publicly accessible cocktail data at
- Added
/stats
endpoint - Added
order_by
query parameter to/cocktails
endpoint - Added
limit
query parameter to/cocktails/user-shelf
endpoint - Added
limit
query parameter to/ingredients
endpoint - Added
created_at
attribute to cocktail response schema
- Updating tags now reflects changes in cocktail index
- Increased cocktail thumbnail size to 400x400
- Updated ingredients index
- Added
strength_abv
,color
,origin
- Added
This update includes changes to authorization. Users can now be admins and have elevated privilages. Since this is a new change you will not have any admins in your instance if you are not starting from a fresh install. To make yourself admin you need to run the following command with the email you are using to login:
$ php artisan bar:make-admin [email protected]
Or in docker/compose:
$ docker compose exec -it bar-assistant php artisan bar:make-admin [email protected]
- Added
users
endpoint to manage users - User can now have admin role
- Added command to convert a single user to admin
- Implemented authorization
- Management of users is allowed only to admins
- Update and delete of glass type allowed only to admins
- Update and delete of ingredient categories allowed only to admins
- All cocktails and ingredients created by the system can only be updated and delete by admin
- Added ingredient parser
- Allows easier extraction of scraped data
- Recipe scraping
- Support for Haus Alpenz
- Sync site search index on docker start
- Added
main_ingredient_name
to cocktail response schema- Ingredients that are first added to cocktail are considered as main ingredient
- Added development docker compose file
- Added
limit
query attribute to cocktail favorites endpoint
- Added
user_id
toimages
table - Add flush index option to
bar:refresh-search
command - Optimized cocktail favorites query
- Added
/tags
endpoint to manage tags - Added cocktail ratings
- Added
/ratings
endpoint to manage ratings - Added average rating attribute to cocktails index
- Added
- Recipe scraping
- Support for Imbibe Magazine
- Support for Eric's Cocktail Guide
- Add
-d
option to dump data without importing
- Add Meilisearch dump index command
- This will help with future Meilisearch updates
- Fix cocktail image overwriting when cocktails have the same name
- Delete user API tokens when changing the password
- Sync cocktails and ingredients with meilisearch after docker restart
- Bump version in openapi spec
- Add
php artisan bar:scrap
command to scrape recipes from the supported websites- Support for TuxedoNo2
- Support for A Couple Cooks
- Add cocktails thumbnail generation endpoint
- Enabled GD extension in docker
- Sort ingredient categories by name
- Sort related cocktails in ingredient resource by name
- Escape ingredient description
- Use
docker-php-extension-installer
for docker image
- Make cocktail
id
attribute filterable in cocktails index - Add
per_page
query parameter to cocktails endpoint (defaults to 15) - Add profile update endpoint
- Search index settings are updated on docker restart
- Sort shelf cocktails by name
- Document missing query parameters in OA specification
- Cover all endpoints with tests
- Add coding style
- Update OpenApi spec and endpoints
- Delete responses now return 204
- Add contract testing
- Update related ingredients
- Add response caching, disabled by default
- Cache docker image steps in GH actions
- Add cascading deletes for some foreign keys
- Use redis for session and cache
- Automatically select some ingredients when running the application for the first time
- Add OpenAPI specification and
/docs
route - Fixed an error response when adding ingredient to the shelf from shopping list
- Updated some endpoints to be more consistent
- Include substitute ingredients when showing a list of shelf cocktails
- Added debugbar
- Remove the need to run
chown
in docker container - Add demo environment support
- Enable opcache in docker image
- Cache route and config in docker image
- Refactor image uploading and handling
- Updates for some base ingredients
- Add more popular cocktails
- Finish cocktail ingredient substitutes endpoints
- Finish glass type endpoints
- Move "Uncategorized" ingredient category to id: 1
- Cocktail save/update methods now save glass type
- Update docker entrypoint with better up/down handling
- Use
laravel/sluggable
package for ingredient and cocktail slug generation - Added currently used Meilisearch host to user endpoint response
- Update Meilisearch cocktail index settings
- Add
user_id
to cocktail index - Implement ingredient varieties feature #6
- Increased API request rate limiting
- Add cocktail ingredient substitutes feature
- Add a new cocktail source list
- Exclude optional cocktail ingredients from shelf cocktail matching
- Implement all ingredient category resource endpoints
- Update postman collection
- Implement more tests
- Add docker build action
- Add glasses
- Update base cocktail db
- Update error handling
- Add logout
- Initial release