Skip to content

Commit d12132e

Browse files
committed
Add public namespace
1 parent f20737f commit d12132e

File tree

5 files changed

+95
-5
lines changed

5 files changed

+95
-5
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ This repository only contains the API server, if you are looking for easy to use
2424
</p>
2525

2626
## Features
27-
- [Includes over 300 cocktail recipes with detailed information](https://github.com/bar-assistant/data)
28-
- Includes over 150 base ingredients with categories
27+
- [Includes over 500 cocktail recipes with detailed information](https://github.com/bar-assistant/data)
28+
- Includes over 250 base ingredients with categories
2929
- Add and manage multiple bars and bar members
3030
- Fine-grained user control with user roles
3131
- Endpoints for managing and filtering ingredients and cocktails
@@ -39,6 +39,7 @@ This repository only contains the API server, if you are looking for easy to use
3939
- Support for glass types, utensils, tags, ingredient categories and more
4040
- Cocktail recipe importing via URL, JSON, YAML or custom collections
4141
- Support for cocktail ratings
42+
- Support for cocktail variations
4243
- Create user-specific cocktail collections for easy referencing and sharing
4344
- Support for cocktail and ingredient notes
4445
- Supports sharing recipes by public links, custom recipe images and printing
@@ -48,6 +49,7 @@ This repository only contains the API server, if you are looking for easy to use
4849
- Data export support in various formats
4950
- Support for multiple ingredient prices
5051
- Automatic cocktail price calculation based on ingredients
52+
- SSO Support
5153

5254
## Container images
5355

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Kami\Cocktail\Http\Controllers\Public;
6+
7+
use Kami\Cocktail\Http\Controllers\Controller;
8+
9+
class BarController extends Controller
10+
{
11+
public function show(string $barSlug, string $id): null
12+
{
13+
return null;
14+
}
15+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Kami\Cocktail\Http\Controllers\Public;
6+
7+
use Kami\Cocktail\Models\Cocktail;
8+
use Kami\Cocktail\Http\Controllers\Controller;
9+
use Kami\Cocktail\Http\Resources\ExploreCocktailResource;
10+
11+
class CocktailController extends Controller
12+
{
13+
/**
14+
* @return array<string>
15+
*/
16+
public function index(string $barSlug): array
17+
{
18+
return [$barSlug];
19+
}
20+
21+
public function show(string $barSlug, string $id): ExploreCocktailResource
22+
{
23+
$cocktail = Cocktail::where('public_id', $id)->firstOrFail()->load('ingredients.ingredient');
24+
25+
return new ExploreCocktailResource($cocktail);
26+
}
27+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Kami\Cocktail\Http\Controllers\Public;
6+
7+
use Kami\Cocktail\Models\Menu;
8+
use Kami\Cocktail\Http\Controllers\Controller;
9+
use Kami\Cocktail\Http\Resources\MenuPublicResource;
10+
11+
class MenuController extends Controller
12+
{
13+
public function show(string $barSlug): MenuPublicResource
14+
{
15+
$menu = Menu::select('menus.*')
16+
->where(['slug' => $barSlug])
17+
->where('menus.is_enabled', true)
18+
->join('bars', 'bars.id', '=', 'menus.bar_id')
19+
->join('menu_cocktails', 'menu_cocktails.menu_id', '=', 'menus.id')
20+
->orderBy('menu_cocktails.sort', 'asc')
21+
->with(
22+
'bar.images',
23+
'menuCocktails.cocktail.ingredients.ingredient',
24+
'menuCocktails.cocktail.images',
25+
'menuCocktails.cocktail.bar.shelfIngredients',
26+
'menuIngredients.ingredient.ancestors',
27+
'menuIngredients.ingredient.images',
28+
'menuIngredients.ingredient.bar.shelfIngredients',
29+
)
30+
->firstOrFail();
31+
32+
return new MenuPublicResource($menu);
33+
}
34+
}

routes/api.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
declare(strict_types=1);
44

55
use Illuminate\Support\Facades\Route;
6+
use Kami\Cocktail\Http\Controllers\Public;
67
use Kami\Cocktail\Http\Controllers\BarController;
78
use Kami\Cocktail\Http\Controllers\PATController;
89
use Kami\Cocktail\Http\Controllers\TagController;
@@ -47,6 +48,8 @@
4748
*/
4849

4950
$apiMiddleware = ['auth:sanctum'];
51+
52+
// Add middleware for email verification if configured
5053
if (config('bar-assistant.mail_require_confirmation') === true) {
5154
$apiMiddleware[] = 'verified';
5255
}
@@ -68,9 +71,10 @@
6871
});
6972

7073
Route::prefix('images')->group(function () {
71-
Route::get('/{id}/thumb', [ImageController::class, 'thumb'])->name('images.thumb'); // TODO: Move this to auth middleware
74+
Route::get('/{id}/thumb', [ImageController::class, 'thumb'])->name('images.thumb');
7275
});
7376

77+
// Deprecated routes
7478
Route::prefix('explore')->group(function () {
7579
Route::get('/cocktails/{ulid}', [ExploreController::class, 'cocktail']);
7680
Route::get('/menus/{barSlug}', [MenuController::class, 'show']);
@@ -80,6 +84,16 @@
8084
Route::get('/{id}/download', [ExportController::class, 'download'])->name('exports.download');
8185
});
8286

87+
Route::post('/billing/webhook', WebhookController::class);
88+
89+
Route::prefix('public')->group(function () {
90+
Route::get('/{barSlug}', [Public\BarController::class, 'show']);
91+
Route::get('/{barSlug}/cocktails', [Public\CocktailController::class, 'index']);
92+
Route::get('/{barSlug}/cocktails/{id}', [Public\CocktailController::class, 'show']);
93+
Route::get('/{barSlug}/menu', [Public\MenuController::class, 'show']);
94+
});
95+
96+
// Private API routes
8397
Route::middleware($apiMiddleware)->group(function () {
8498
Route::post('/auth/logout', [AuthController::class, 'logout'])->name('auth.logout')->middleware(['ability:*']);
8599
Route::post('password-check', [AuthController::class, 'passwordCheck'])->middleware(['ability:*']);
@@ -282,8 +296,6 @@
282296
});
283297
});
284298

285-
Route::post('/billing/webhook', WebhookController::class);
286-
287299
Route::fallback(function () {
288300
return response()->json([
289301
'type' => 'api_error',

0 commit comments

Comments
 (0)