diff --git a/app/Http/Controllers/Api/ArticleApiController.php b/app/Http/Controllers/Api/ArticleApiController.php new file mode 100644 index 0000000..7ce7cab --- /dev/null +++ b/app/Http/Controllers/Api/ArticleApiController.php @@ -0,0 +1,39 @@ +latest('id') + ->paginate(12); + + return response()->json([ + 'data' => ArticleResource::collection($articles), + 'meta' => [ + 'current_page' => $articles->currentPage(), + 'last_page' => $articles->lastPage(), + 'per_page' => $articles->perPage(), + 'total' => $articles->total(), + ], + ]); + } + + public function show(string $slug): JsonResponse + { + $article = WebsiteArticle::with(['user:id,username,look', 'comments.user:id,username,look']) + ->where('slug', $slug) + ->firstOrFail(); + + return response()->json(['data' => new ArticleResource($article)]); + } +} diff --git a/app/Http/Controllers/Api/ContentApiController.php b/app/Http/Controllers/Api/ContentApiController.php new file mode 100644 index 0000000..81e53e5 --- /dev/null +++ b/app/Http/Controllers/Api/ContentApiController.php @@ -0,0 +1,80 @@ + WebsiteSetting::all()->pluck('value', 'key')); + + return response()->json(['data' => $settings]); + } + + public function staff(): JsonResponse + { + return response()->json(['data' => $this->staffService->fetchStaffPositions()]); + } + + public function teams(): JsonResponse + { + $teams = Guild::with('members')->latest('id')->paginate(12); + + return response()->json([ + 'data' => $teams->items(), + 'meta' => [ + 'current_page' => $teams->currentPage(), + 'last_page' => $teams->lastPage(), + 'per_page' => $teams->perPage(), + 'total' => $teams->total(), + ], + ]); + } + + public function rareValues(Request $request): JsonResponse + { + $query = CatalogItem::query(); + + if ($categoryId = $request->query('category')) { + $query->where('page_id', $categoryId); + } + + $items = $query->with('itemBase')->latest('id')->paginate(24); + + return response()->json([ + 'data' => $items->items(), + 'meta' => [ + 'current_page' => $items->currentPage(), + 'last_page' => $items->lastPage(), + 'per_page' => $items->perPage(), + 'total' => $items->total(), + ], + ]); + } + + public function rareValuesCategories(): JsonResponse + { + $categories = CatalogPage::where('catalog_name', '!=', '') + ->where('visible', 1) + ->orderBy('order_number') + ->get(['id', 'catalog_name', 'icon']); + + return response()->json(['data' => $categories]); + } +} diff --git a/app/Http/Controllers/Api/FurniEditorController.php b/app/Http/Controllers/Api/FurniEditorController.php index 92a9009..0b73f15 100755 --- a/app/Http/Controllers/Api/FurniEditorController.php +++ b/app/Http/Controllers/Api/FurniEditorController.php @@ -1,12 +1,16 @@ Auth::id(), ]); - return response()->json(['error' => "{$action} mislukt"], 500); + return response()->json(['error' => "{$action} failed"], 500); } - private function formatItemData(\stdClass $item): array + private function formatItemData(ItemBase $item): array { return [ 'id' => $item->id, @@ -59,17 +63,17 @@ class FurniEditorController extends Controller ]; } - private function formatCatalogItemData(\stdClass $r): array + private function formatCatalogItemData(CatalogItem $item): array { return [ - 'id' => $r->id, - 'catalogName' => $r->catalog_name, - 'costCredits' => $r->cost_credits, - 'costPoints' => $r->cost_points, - 'pointsType' => $r->points_type, - 'pageId' => $r->page_id, - 'pageName' => $r->page_id - ? DB::table('catalog_pages')->where('id', $r->page_id)->value('caption') ?? '' + 'id' => $item->id, + 'catalogName' => $item->catalog_name, + 'costCredits' => $item->cost_credits, + 'costPoints' => $item->cost_points, + 'pointsType' => $item->points_type, + 'pageId' => $item->page_id, + 'pageName' => $item->page_id + ? CatalogPage::where('id', $item->page_id)->value('caption') ?? '' : '', ]; } @@ -84,7 +88,7 @@ class FurniEditorController extends Controller $page = max(1, (int) $request->input('page', 1)); $limit = min(50, max(1, (int) $request->input('limit', 20))); - $query = DB::table('items_base'); + $query = ItemBase::query(); if ($q !== '' && $q !== '0') { $query->where(function ($w) use ($q) { @@ -105,7 +109,7 @@ class FurniEditorController extends Controller ->skip(($page - 1) * $limit) ->take($limit) ->get() - ->map(fn ($r) => [ + ->map(fn (ItemBase $r) => [ 'id' => $r->id, 'spriteId' => $r->sprite_id, 'itemName' => $r->item_name, @@ -128,7 +132,7 @@ class FurniEditorController extends Controller 'page' => $page, ]); } catch (\Exception $e) { - return $this->handleApiError('Zoeken', $e); + return $this->handleApiError('Search', $e); } } @@ -142,15 +146,14 @@ class FurniEditorController extends Controller return response()->json(['error' => 'Missing id'], 400); } - $item = DB::table('items_base')->where('id', $id)->first(); + $item = ItemBase::where('id', $id)->first(); if (! $item) { return response()->json(['error' => 'Item not found'], 404); } - $catalog = DB::table('catalog_items') - ->whereRaw('FIND_IN_SET(?, item_ids)', [$id]) + $catalog = CatalogItem::whereRaw('FIND_IN_SET(?, item_ids)', [$id]) ->get() - ->map(fn ($r) => $this->formatCatalogItemData($r)); + ->map(fn (CatalogItem $r) => $this->formatCatalogItemData($r)); return response()->json([ 'item' => array_merge($this->formatItemData($item), [ @@ -161,7 +164,7 @@ class FurniEditorController extends Controller 'furniDataEntry' => null, ]); } catch (\Exception $e) { - return $this->handleApiError('Item laden', $e); + return $this->handleApiError('Load item', $e); } } @@ -182,7 +185,7 @@ class FurniEditorController extends Controller return response()->json(['error' => 'No fields to update'], 400); } - DB::table('items_base')->where('id', $id)->update($update); + ItemBase::where('id', $id)->update($update); Log::info('[Audit] FurniEditor update', [ 'user_id' => Auth::id(), @@ -192,7 +195,7 @@ class FurniEditorController extends Controller return response()->json(['success' => true]); } catch (\Exception $e) { - return $this->handleApiError('Actie', $e); + return $this->handleApiError('Update', $e); } } @@ -203,7 +206,7 @@ class FurniEditorController extends Controller try { $data = $request->json()->all(); - $id = DB::table('items_base')->insertGetId($this->buildInsertData($data)); + $id = ItemBase::insertGetId($this->buildInsertData($data)); Log::info('[Audit] FurniEditor create', [ 'user_id' => Auth::id(), @@ -212,7 +215,7 @@ class FurniEditorController extends Controller return response()->json(['id' => $id]); } catch (\Exception $e) { - return $this->handleApiError('Actie', $e); + return $this->handleApiError('Create', $e); } } @@ -226,7 +229,7 @@ class FurniEditorController extends Controller return response()->json(['error' => 'Missing id'], 400); } - DB::table('items_base')->where('id', $id)->delete(); + ItemBase::where('id', $id)->delete(); Log::warning('[Audit] FurniEditor delete', [ 'user_id' => Auth::id(), @@ -235,7 +238,7 @@ class FurniEditorController extends Controller return response()->json(['success' => true]); } catch (\Exception $e) { - return $this->handleApiError('Actie', $e); + return $this->handleApiError('Delete', $e); } } @@ -244,7 +247,7 @@ class FurniEditorController extends Controller $this->checkAdmin(); try { - $rows = DB::table('items_base') + $rows = ItemBase::query() ->select('interaction_type') ->groupBy('interaction_type') ->orderBy('interaction_type') @@ -252,7 +255,7 @@ class FurniEditorController extends Controller return response()->json(['interactions' => $rows]); } catch (\Exception $e) { - return $this->handleApiError('Actie', $e); + return $this->handleApiError('Interactions', $e); } } @@ -266,14 +269,14 @@ class FurniEditorController extends Controller return response()->json(['error' => 'Missing spriteId'], 400); } - $item = DB::table('items_base')->where('sprite_id', $spriteId)->first(); + $item = ItemBase::where('sprite_id', $spriteId)->first(); if (! $item) { return response()->json(['error' => 'Item not found'], 404); } return response()->json(['id' => $item->id]); } catch (\Exception $e) { - return $this->handleApiError('Actie', $e); + return $this->handleApiError('By sprite', $e); } } diff --git a/app/Http/Controllers/Api/HelpApiController.php b/app/Http/Controllers/Api/HelpApiController.php new file mode 100644 index 0000000..9c026fe --- /dev/null +++ b/app/Http/Controllers/Api/HelpApiController.php @@ -0,0 +1,77 @@ +when($request->user(), fn ($q) => $q->where('user_id', $request->user()->id)) + ->latest() + ->paginate(10); + + return response()->json([ + 'data' => HelpTicketResource::collection($tickets), + 'meta' => [ + 'current_page' => $tickets->currentPage(), + 'last_page' => $tickets->lastPage(), + 'total' => $tickets->total(), + ], + ]); + } + + public function show(string $id): JsonResponse + { + $ticket = WebsiteHelpCenterTicket::with(['user:id,username,look', 'replies.user:id,username,look']) + ->where('id', $id) + ->firstOrFail(); + + return response()->json(['data' => new HelpTicketResource($ticket)]); + } + + public function create(HelpTicketRequest $request): JsonResponse + { + $validated = $request->validated(); + + $ticket = WebsiteHelpCenterTicket::create([ + 'user_id' => $request->user()->id, + 'subject' => $validated['subject'], + 'category' => $validated['category'], + 'status' => 'open', + ]); + + $ticket->replies()->create([ + 'user_id' => $request->user()->id, + 'message' => $validated['message'], + ]); + + return response()->json(['data' => new HelpTicketResource($ticket)], 201); + } + + public function reply(HelpTicketReplyRequest $request, string $id): JsonResponse + { + $ticket = WebsiteHelpCenterTicket::where('id', $id) + ->where('user_id', $request->user()->id) + ->firstOrFail(); + + $validated = $request->validated(); + + $reply = $ticket->replies()->create([ + 'user_id' => $request->user()->id, + 'message' => $validated['message'], + ]); + + return response()->json(['data' => $reply->load('user:id,username,look')], 201); + } +} diff --git a/app/Http/Controllers/Api/HotelApiController.php b/app/Http/Controllers/Api/HotelApiController.php deleted file mode 100755 index 57790ce..0000000 --- a/app/Http/Controllers/Api/HotelApiController.php +++ /dev/null @@ -1,342 +0,0 @@ -userApiService->fetchUser($username, ['username', 'motto', 'look']); - - return response()->json([ - 'data' => $user, - ]); - } - - public function onlineUsers(): JsonResponse - { - $users = $this->userApiService->onlineUsers(['username', 'motto', 'look'], true); - - return response()->json([ - 'data' => $users, - ]); - } - - public function onlineUserCount(): JsonResponse - { - $count = $this->userApiService->onlineUserCount(); - - return response()->json([ - 'data' => [ - 'onlineCount' => $count, - ], - ]); - } - - public function articles(): JsonResponse - { - $articles = WebsiteArticle::with(['user:id,username,look']) - ->latest('id') - ->paginate(12); - - return response()->json([ - 'data' => ArticleResource::collection($articles), - 'meta' => [ - 'current_page' => $articles->currentPage(), - 'last_page' => $articles->lastPage(), - 'per_page' => $articles->perPage(), - 'total' => $articles->total(), - ], - ]); - } - - public function article(string $slug): JsonResponse - { - $article = WebsiteArticle::with(['user:id,username,look', 'comments.user:id,username,look']) - ->where('slug', $slug) - ->firstOrFail(); - - return response()->json([ - 'data' => new ArticleResource($article), - ]); - } - - public function photos(): JsonResponse - { - $photos = CameraWeb::query() - ->where('visible', true) - ->latest('id') - ->paginate(12); - - return response()->json([ - 'data' => PhotoResource::collection($photos), - 'meta' => [ - 'current_page' => $photos->currentPage(), - 'last_page' => $photos->lastPage(), - 'per_page' => $photos->perPage(), - 'total' => $photos->total(), - ], - ]); - } - - public function staff(): JsonResponse - { - $employees = $this->staffService->fetchStaffPositions(); - - return response()->json([ - 'data' => $employees, - ]); - } - - public function shopPackages(Request $request): JsonResponse - { - $packages = WebsiteShopArticle::latest('id')->paginate(12); - - return response()->json([ - 'data' => ShopPackageResource::collection($packages), - 'meta' => [ - 'current_page' => $packages->currentPage(), - 'last_page' => $packages->lastPage(), - 'per_page' => $packages->perPage(), - 'total' => $packages->total(), - ], - ]); - } - - public function shopCategories(): JsonResponse - { - return response()->json([ - 'data' => ['furniture', 'badges', 'ranks'], - ]); - } - - public function teams(): JsonResponse - { - $teams = Guild::with('members') - ->latest('id') - ->paginate(12); - - return response()->json([ - 'data' => $teams->items(), - 'meta' => [ - 'current_page' => $teams->currentPage(), - 'last_page' => $teams->lastPage(), - 'per_page' => $teams->perPage(), - 'total' => $teams->total(), - ], - ]); - } - - public function leaderboard(Request $request): JsonResponse - { - $type = $request->query('type', 'credits'); - $limit = (int) $request->query('limit', 100); - - $validTypes = ['credits', 'pixels']; - if (! in_array($type, $validTypes)) { - $type = 'credits'; - } - - $users = User::orderByDesc($type) - ->limit($limit) - ->get(['id', 'username', 'look', 'motto', 'credits', 'pixels']); - - return response()->json([ - 'data' => LeaderboardUserResource::collection($users), - 'type' => $type, - ]); - } - - public function rareValues(Request $request): JsonResponse - { - $categoryId = $request->query('category'); - - $query = CatalogItem::query(); - - if ($categoryId) { - $query->where('page_id', $categoryId); - } - - $items = $query->with('itemBase') - ->latest('id') - ->paginate(24); - - return response()->json([ - 'data' => $items->items(), - 'meta' => [ - 'current_page' => $items->currentPage(), - 'last_page' => $items->lastPage(), - 'per_page' => $items->perPage(), - 'total' => $items->total(), - ], - ]); - } - - public function rareValuesCategories(): JsonResponse - { - $categories = CatalogPage::where('catalog_name', '!=', '') - ->where('visible', 1) - ->orderBy('order_number') - ->get(['id', 'catalog_name', 'icon']); - - return response()->json([ - 'data' => $categories, - ]); - } - - public function settings(): JsonResponse - { - $settings = Cache::remember('api_all_settings', 60, fn () => WebsiteSetting::all()->pluck('value', 'key')); - - return response()->json([ - 'data' => $settings, - ]); - } - - public function userProfile(string $username): JsonResponse - { - $user = User::where('username', $username) - ->first(); - - if (! $user) { - return response()->json(['data' => null], 404); - } - - return response()->json([ - 'data' => [ - 'id' => $user->id, - 'username' => $user->username, - 'look' => $user->look, - 'motto' => $user->motto, - 'account_created' => $user->account_created, - 'online' => false, - ], - ]); - } - - public function helpTickets(Request $request): JsonResponse - { - $tickets = WebsiteHelpCenterTicket::with('user:id,username,look') - ->when($request->user(), fn ($q) => $q->where('user_id', $request->user()->id)) - ->latest() - ->paginate(10); - - return response()->json([ - 'data' => HelpTicketResource::collection($tickets), - 'meta' => [ - 'current_page' => $tickets->currentPage(), - 'last_page' => $tickets->lastPage(), - 'total' => $tickets->total(), - ], - ]); - } - - public function helpTicket(string $id): JsonResponse - { - $ticket = WebsiteHelpCenterTicket::with(['user:id,username,look', 'replies.user:id,username,look']) - ->where('id', $id) - ->firstOrFail(); - - return response()->json(['data' => new HelpTicketResource($ticket)]); - } - - public function helpTicketCreate(HelpTicketRequest $request): JsonResponse - { - $validated = $request->validated(); - - $ticket = WebsiteHelpCenterTicket::create([ - 'user_id' => $request->user()->id, - 'subject' => $validated['subject'], - 'category' => $validated['category'], - 'status' => 'open', - ]); - - $ticket->replies()->create([ - 'user_id' => $request->user()->id, - 'message' => $validated['message'], - ]); - - return response()->json(['data' => new HelpTicketResource($ticket)], 201); - } - - public function helpTicketReply(HelpTicketReplyRequest $request, string $id): JsonResponse - { - $ticket = WebsiteHelpCenterTicket::where('id', $id) - ->where('user_id', $request->user()->id) - ->firstOrFail(); - - $validated = $request->validated(); - - $reply = $ticket->replies()->create([ - 'user_id' => $request->user()->id, - 'message' => $validated['message'], - ]); - - return response()->json(['data' => $reply->load('user:id,username,look')], 201); - } - - public function uploadPhoto(PhotoUploadRequest $request): JsonResponse - { - $path = $request->file('image')->store('photos', 'public'); - - $photo = CameraWeb::create([ - 'user_id' => $request->user()->id, - 'image' => '/storage/' . $path, - 'visible' => true, - ]); - - return response()->json(['data' => new PhotoResource($photo)], 201); - } - - public function purchasePackage(Request $request, int $packageId): JsonResponse - { - $package = WebsiteShopArticle::findOrFail($packageId); - - $user = $request->user(); - - if ($package->give_rank && $user->rank >= $package->give_rank) { - return response()->json(['error' => 'You already have this or a higher rank'], 400); - } - - $cost = $package->costs; - - if ($user->credits < $cost) { - return response()->json(['error' => 'Not enough credits'], 400); - } - - $user->decrement('credits', $cost); - - return response()->json(['success' => true, 'message' => 'Purchase successful']); - } -} diff --git a/app/Http/Controllers/Api/MediaApiController.php b/app/Http/Controllers/Api/MediaApiController.php new file mode 100644 index 0000000..6be1021 --- /dev/null +++ b/app/Http/Controllers/Api/MediaApiController.php @@ -0,0 +1,45 @@ +where('visible', true) + ->latest('id') + ->paginate(12); + + return response()->json([ + 'data' => PhotoResource::collection($photos), + 'meta' => [ + 'current_page' => $photos->currentPage(), + 'last_page' => $photos->lastPage(), + 'per_page' => $photos->perPage(), + 'total' => $photos->total(), + ], + ]); + } + + public function upload(PhotoUploadRequest $request): JsonResponse + { + $path = $request->file('image')->store('photos', 'public'); + + $photo = CameraWeb::create([ + 'user_id' => $request->user()->id, + 'image' => '/storage/' . $path, + 'visible' => true, + ]); + + return response()->json(['data' => new PhotoResource($photo)], 201); + } +} diff --git a/app/Http/Controllers/Api/ShopApiController.php b/app/Http/Controllers/Api/ShopApiController.php new file mode 100644 index 0000000..31cd071 --- /dev/null +++ b/app/Http/Controllers/Api/ShopApiController.php @@ -0,0 +1,55 @@ +paginate(12); + + return response()->json([ + 'data' => ShopPackageResource::collection($packages), + 'meta' => [ + 'current_page' => $packages->currentPage(), + 'last_page' => $packages->lastPage(), + 'per_page' => $packages->perPage(), + 'total' => $packages->total(), + ], + ]); + } + + public function categories(): JsonResponse + { + return response()->json([ + 'data' => ['furniture', 'badges', 'ranks'], + ]); + } + + public function purchase(Request $request, int $packageId): JsonResponse + { + $package = WebsiteShopArticle::findOrFail($packageId); + + $user = $request->user(); + + if ($package->give_rank && $user->rank >= $package->give_rank) { + return response()->json(['error' => 'You already have this or a higher rank'], 400); + } + + if ($user->credits < $package->costs) { + return response()->json(['error' => 'Not enough credits'], 400); + } + + $user->decrement('credits', $package->costs); + + return response()->json(['success' => true, 'message' => 'Purchase successful']); + } +} diff --git a/app/Http/Controllers/Api/UserApiController.php b/app/Http/Controllers/Api/UserApiController.php new file mode 100644 index 0000000..3dd8728 --- /dev/null +++ b/app/Http/Controllers/Api/UserApiController.php @@ -0,0 +1,79 @@ +userApiService->fetchUser($username, ['username', 'motto', 'look']); + + return response()->json(['data' => $user]); + } + + public function userProfile(string $username): JsonResponse + { + $user = User::where('username', $username)->first(); + + if (! $user) { + return response()->json(['data' => null], 404); + } + + return response()->json([ + 'data' => [ + 'id' => $user->id, + 'username' => $user->username, + 'look' => $user->look, + 'motto' => $user->motto, + 'account_created' => $user->account_created, + 'online' => false, + ], + ]); + } + + public function onlineUsers(): JsonResponse + { + $users = $this->userApiService->onlineUsers(['username', 'motto', 'look'], true); + + return response()->json(['data' => $users]); + } + + public function onlineUserCount(): JsonResponse + { + return response()->json([ + 'data' => ['onlineCount' => $this->userApiService->onlineUserCount()], + ]); + } + + public function leaderboard(Request $request): JsonResponse + { + $type = $request->query('type', 'credits'); + $limit = (int) $request->query('limit', 100); + + if (! in_array($type, ['credits', 'pixels'])) { + $type = 'credits'; + } + + $users = User::orderByDesc($type) + ->limit($limit) + ->get(['id', 'username', 'look', 'motto', 'credits', 'pixels']); + + return response()->json([ + 'data' => LeaderboardUserResource::collection($users), + 'type' => $type, + ]); + } +} diff --git a/routes/api.php b/routes/api.php index 9cf011f..8ef39cd 100755 --- a/routes/api.php +++ b/routes/api.php @@ -1,7 +1,12 @@ group(function () { Route::get('/home', [AuthController::class, 'home']); // User Profile -Route::get('/user/{username}', [HotelApiController::class, 'fetchUser'])->middleware('throttle:120,1'); -Route::get('/profile/{username}', [HotelApiController::class, 'userProfile']); +Route::get('/user/{username}', [UserApiController::class, 'fetchUser'])->middleware('throttle:120,1'); +Route::get('/profile/{username}', [UserApiController::class, 'userProfile']); // Online Users -Route::get('/online-users', [HotelApiController::class, 'onlineUsers'])->middleware('throttle:120,1'); -Route::get('/online-count', [HotelApiController::class, 'onlineUserCount'])->middleware('throttle:120,1')->name('api.online-count'); +Route::get('/online-users', [UserApiController::class, 'onlineUsers'])->middleware('throttle:120,1'); +Route::get('/online-count', [UserApiController::class, 'onlineUserCount'])->middleware('throttle:120,1')->name('api.online-count'); // Articles -Route::get('/articles', [HotelApiController::class, 'articles']); -Route::get('/articles/{slug}', [HotelApiController::class, 'article']); +Route::get('/articles', [ArticleApiController::class, 'index']); +Route::get('/articles/{slug}', [ArticleApiController::class, 'show']); Route::post('/articles/{slug}/comment', [AuthController::class, 'articleComment'])->middleware('auth:sanctum'); // Photos -Route::get('/photos', [HotelApiController::class, 'photos']); +Route::get('/photos', [MediaApiController::class, 'photos']); // Staff -Route::get('/staff', [HotelApiController::class, 'staff']); +Route::get('/staff', [ContentApiController::class, 'staff']); // Shop -Route::get('/shop/packages', [HotelApiController::class, 'shopPackages']); -Route::get('/shop/categories', [HotelApiController::class, 'shopCategories']); +Route::get('/shop/packages', [ShopApiController::class, 'packages']); +Route::get('/shop/categories', [ShopApiController::class, 'categories']); // Teams / Guilds -Route::get('/teams', [HotelApiController::class, 'teams']); +Route::get('/teams', [ContentApiController::class, 'teams']); // Leaderboard -Route::get('/leaderboard', [HotelApiController::class, 'leaderboard']); +Route::get('/leaderboard', [UserApiController::class, 'leaderboard']); // Rare Values -Route::get('/rare-values', [HotelApiController::class, 'rareValues']); -Route::get('/rare-values/categories', [HotelApiController::class, 'rareValuesCategories']); +Route::get('/rare-values', [ContentApiController::class, 'rareValues']); +Route::get('/rare-values/categories', [ContentApiController::class, 'rareValuesCategories']); // Settings -Route::get('/settings', [HotelApiController::class, 'settings']); +Route::get('/settings', [ContentApiController::class, 'settings']); // Radio API Route::get('/radio/current-dj', [RadioController::class, 'currentDJ'])->middleware('throttle:100,1')->name('api.radio.current-dj'); @@ -97,16 +102,16 @@ Route::get('/radio/points/user', [RadioListenerPointController::class, 'userPoin Route::get('/radio/points/stats', [RadioListenerPointController::class, 'stats'])->middleware('throttle:150,1'); // Help Center Tickets -Route::get('/help/tickets', [HotelApiController::class, 'helpTickets'])->middleware('auth:sanctum'); -Route::get('/help/tickets/{id}', [HotelApiController::class, 'helpTicket'])->middleware('auth:sanctum'); -Route::post('/help/tickets', [HotelApiController::class, 'helpTicketCreate'])->middleware('auth:sanctum'); -Route::post('/help/tickets/{id}/reply', [HotelApiController::class, 'helpTicketReply'])->middleware('auth:sanctum'); +Route::get('/help/tickets', [HelpApiController::class, 'tickets'])->middleware('auth:sanctum'); +Route::get('/help/tickets/{id}', [HelpApiController::class, 'show'])->middleware('auth:sanctum'); +Route::post('/help/tickets', [HelpApiController::class, 'create'])->middleware('auth:sanctum'); +Route::post('/help/tickets/{id}/reply', [HelpApiController::class, 'reply'])->middleware('auth:sanctum'); // Photo Upload -Route::post('/photos/upload', [HotelApiController::class, 'uploadPhoto'])->middleware('auth:sanctum'); +Route::post('/photos/upload', [MediaApiController::class, 'upload'])->middleware('auth:sanctum'); // Shop Purchase -Route::post('/shop/packages/{packageId}/purchase', [HotelApiController::class, 'purchasePackage'])->middleware('auth:sanctum'); +Route::post('/shop/packages/{packageId}/purchase', [ShopApiController::class, 'purchase'])->middleware('auth:sanctum'); // Protected Radio API (requires API key) Route::prefix('radio')->middleware(['radio.api', 'throttle:radio'])->group(function () { @@ -121,7 +126,7 @@ Route::prefix('radio')->middleware(['radio.api', 'throttle:radio'])->group(funct Route::get('/verify', function () { return response()->json([ 'valid' => true, - 'message' => 'API key is geldig', + 'message' => 'API key is valid', ]); })->name('api.radio.v2.verify'); });