Initial commit

This commit is contained in:
2025-10-11 17:02:49 +02:00
commit 92056f073f
243 changed files with 27536 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use App\Models\Footer;
class FooterController extends Controller
{
public function index(): JsonResponse
{
$footer = Footer::first();
$links = $footer ? $footer->links : [];
return response()->json([
'status' => 'success',
'data' => $links
]);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Homepage;
use Illuminate\Http\JsonResponse;
class HomepageController extends Controller
{
public function index(): JsonResponse
{
$data = Homepage::first();
return response()->json([
'status' => 'success',
'data' => [
'photo' => $data->photo ? '/storage/' . $data->photo : null,
'photo_mobile' => $data->photo_mobile ? '/storage/' . $data->photo_mobile : null,
'photo_menu' => $data->photo_menu ? '/storage/' . $data->photo_menu : null,
'title' => $data->title,
'body' => $data->body,
'address' => $data->address,
'delivery' => $data->delivery,
'opening_hours' => $data->opening_hours,
'widget_link' => $data->widget_link
]
]);
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use App\Models\Link;
class LinkController extends Controller
{
public function index(): JsonResponse
{
$link = Link::first();
$links = $link ? $link->links : [];
return response()->json([
'status' => 'success',
'data' => $links
]);
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use App\Models\NavigationLink;
class NavigationController extends Controller
{
public function index(): JsonResponse
{
$navigation = NavigationLink::orderBy('sort_order', 'asc')->get();
return response()->json([
'status' => 'success',
'data' => $navigation
]);
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use App\Models\Photo;
class PhotoController extends Controller
{
public function index(): JsonResponse
{
$photos = Photo::orderBy('sort_order', 'asc')->get();
$photosWithPaths = $photos->map(function ($photo) {
$data = $photo->toArray();
$data['photo'] = $photo->photo ? '/storage/' . $photo->photo : null;
return $data;
});
return response()->json([
'status' => 'success',
'data' => $photosWithPaths
]);
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use App\Models\Product;
use App\Models\Ingredient;
class ProductController extends Controller
{
public function index(): JsonResponse
{
$products = Product::all();
$ingredients = Ingredient::all()->keyBy('id');
$productsWithIngredients = $products->map(function ($product) use ($ingredients) {
$productData = $product->toArray();
if (isset($productData['products']) && is_array($productData['products'])) {
$productData['products'] = collect($productData['products'])->map(function ($item) use ($ingredients) {
if (isset($item['data']['ingredients'])) {
$item['data']['ingredients'] = collect($item['data']['ingredients'])
->map(fn($id) => $ingredients->get($id))
->filter()
->values()
->toArray();
}
return $item;
})->toArray();
}
return $productData;
});
return response()->json([
'status' => 'success',
'data' => $productsWithIngredients
]);
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use App\Models\Promotion;
class PromotionController extends Controller
{
public function index(): JsonResponse
{
$promotions = Promotion::orderBy('sort_order', 'asc')->get();
return response()->json([
'status' => 'success',
'data' => $promotions
]);
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use App\Models\Size;
class SizeController extends Controller
{
public function index(): JsonResponse
{
$size = Size::first();
if (!$size) {
return response()->json([
'status' => 'error',
'message' => 'Size configuration not found'
], 404);
}
return response()->json([
'status' => 'success',
'data' => [
'small' => [
'description' => $size->small,
'photo' => $size->small_photo ? '/storage/' . $size->small_photo : null,
],
'medium' => [
'description' => $size->medium,
'photo' => $size->medium_photo ? '/storage/' . $size->medium_photo : null,
],
'large' => [
'description' => $size->large,
'photo' => $size->large_photo ? '/storage/' . $size->large_photo : null,
],
]
]);
}
}

View File

@@ -0,0 +1,8 @@
<?php
namespace App\Http\Controllers;
abstract class Controller
{
//
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Inspiring;
use Illuminate\Http\Request;
use Inertia\Middleware;
use Tighten\Ziggy\Ziggy;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that's loaded on the first page visit.
*
* @see https://inertiajs.com/server-side-setup#root-template
*
* @var string
*/
protected $rootView = 'app';
/**
* Determines the current asset version.
*
* @see https://inertiajs.com/asset-versioning
*/
public function version(Request $request): ?string
{
return parent::version($request);
}
/**
* Define the props that are shared by default.
*
* @see https://inertiajs.com/shared-data
*
* @return array<string, mixed>
*/
public function share(Request $request): array
{
[$message, $author] = str(Inspiring::quotes()->random())->explode('-');
return [
...parent::share($request),
'name' => config('app.name'),
'ziggy' => fn (): array => [
...(new Ziggy)->toArray(),
'location' => $request->url(),
],
'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
];
}
}