Overview
The AdminController is the primary administrative controller handling CRUD operations for users, menu items, reservations, tables, chefs, and orders.
Location: app/Http/Controllers/AdminController.php
Route Prefix: /admin
Middleware: auth, role:admin
User Management
user()
Display all users in the system.
Route: GET /admin/users
Route Name: admin.users
Implementation:
public function user()
{
$users = User::all();
return view("admin.users", compact("users"));
}
Collection of all User models
createUser()
Create a new user in the system.
Route: POST /admin/users
Route Name: admin.users.store
Implementation:
public function createUser(Request $request)
{
User::create([
'name' => $request->name,
'email' => $request->email,
'usertype' => $request->usertype,
'password' => Hash::make($request->password),
]);
return redirect()->route('admin.user')->with('success', 'Usuario creado exitosamente.');
}
Request Parameters:
User type/role (admin, chef, mesero, user)
User’s password (will be hashed)
updateUser()
Update an existing user’s information.
Route: POST /admin/users/{id}
Route Name: admin.users.update
Implementation:
public function updateUser(Request $request, $id)
{
$user = User::findOrFail($id);
$user->fill($request->only('name', 'email', 'usertype'));
if ($request->password) {
$user->password = Hash::make($request->password);
}
$user->save();
return redirect()->route('admin.user')->with('success', 'Usuario actualizado correctamente.');
}
Parameters:
New password (optional - only updates if provided)
deleteuser()
Delete a user from the system.
Route: DELETE /admin/users/{id}
Route Name: admin.users.delete
Implementation:
public function deleteuser($id)
{
User::findOrFail($id)->delete();
return redirect()->back()->with('success', 'Usuario eliminado correctamente.');
}
Display all food menu items with categories.
Route: GET /admin/foodmenu
Route Name: admin.foodmenu
Implementation:
public function foodmenu()
{
$foods = Food::all();
$categories = Category::all();
return view("admin.foodmenu", compact('foods', 'categories'));
}
Collection of all Food models
Collection of all Category models
uploadfood()
Create a new food menu item.
Route: POST /admin/foodmenu
Route Name: admin.foodmenu.store
Implementation:
public function uploadfood(Request $request)
{
$food = $this->saveFoodData(new Food(), $request);
return redirect()->route('foodmenu')->with('success', 'Menú agregado con éxito.');
}
protected function saveFoodData(Food $food, Request $request)
{
if ($request->hasFile('image')) {
$image = $request->file('image');
$food->image = time() . '.' . $image->getClientOriginalExtension();
$image->move('foodimage', $food->image);
}
$food->fill($request->only([
'title', 'price', 'description', 'ingredients', 'proteins', 'calories', 'size', 'category_id'
]));
$food->save();
return $food;
}
Request Parameters:
Protein content information
updateview()
Show the edit form for a food item.
Route: GET /admin/foodmenu/{id}/edit
Route Name: admin.foodmenu.edit
Implementation:
public function updateview($id)
{
$food = Food::findOrFail($id);
$categories = Category::all();
return view("admin.updateview", compact('food', 'categories'));
}
update()
Update an existing food menu item.
Route: POST /admin/foodmenu/{id}
Route Name: admin.foodmenu.update
Implementation:
public function update(Request $request, $id)
{
$food = Food::findOrFail($id);
$this->saveFoodData($food, $request);
return redirect()->route('foodmenu')->with('success', 'Menú actualizado con éxito.');
}
Delete a food menu item.
Route: DELETE /admin/foodmenu/{id}
Route Name: admin.foodmenu.delete
Implementation:
public function deletemenu($id)
{
Food::findOrFail($id)->delete();
return redirect()->back()->with('success', 'Menú eliminado correctamente.');
}
Reservation Management
reservation()
Create a new reservation.
Implementation:
public function reservation(Request $request)
{
Reservation::create($request->only('name', 'email', 'phone', 'guest', 'date', 'time', 'message'));
return redirect()->back()->with('success', 'Reservación creada correctamente.');
}
Request Parameters:
Special requests or notes
viewreservation()
Display all reservations with available tables.
Route: GET /admin/reservations
Route Name: admin.reservations
Implementation:
public function viewreservation()
{
$reservations = Reservation::with('table')->get();
$tables = Table::where('status', 'disponible')->get();
return view('admin.adminreservation', compact('reservations', 'tables'));
}
assignTable()
Assign a table to a reservation. Validates that guest count matches table seats.
Route: POST /admin/reservations/{reservationId}/assign-table
Route Name: admin.reservations.assign
Implementation:
public function assignTable(Request $request, $reservationId)
{
$reservation = Reservation::findOrFail($reservationId);
$table = Table::findOrFail($request->table_id);
if ($reservation->guest == $table->seats) {
$reservation->table_id = $table->id;
$reservation->save();
$table->status = 'reservada';
$table->save();
return response()->json([
'success' => true,
'table_name' => $table->name,
'user_name' => $reservation->name,
]);
}
return response()->json([
'success' => false,
'message' => 'El número de invitados no coincide con los asientos de la mesa.',
]);
}
Request:
ID of the table to assign
JSON Response (Success):
{
"success": true,
"table_name": "Mesa 5",
"user_name": "John Doe"
}
JSON Response (Error):
{
"success": false,
"message": "El número de invitados no coincide con los asientos de la mesa."
}
Table Management
viewTables()
Display all tables.
Route: GET /admin/tables
Route Name: admin.tables
Implementation:
public function viewTables()
{
$tables = Table::all();
return view('admin.adminmesas', compact('tables'));
}
storeTable()
Create a new table.
Route: POST /admin/tables
Route Name: admin.tables.store
Implementation:
public function storeTable(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'number' => 'required|integer|unique:tables,number',
'type' => 'required|string',
'seats' => 'required|integer',
'status' => 'required|string',
]);
Table::create($request->all());
return redirect()->route('adminmesas')->with('success', 'Mesa agregada correctamente.');
}
Validation Rules:
Table name (max 255 characters)
Table type (e.g., interior, exterior, VIP)
updateTable()
Update an existing table.
Route: PUT /admin/tables/{id}
Route Name: admin.tables.update
Implementation:
public function updateTable(Request $request, $id)
{
$request->validate([
'name' => 'required|string|max:255',
'number' => 'required|integer|unique:tables,number,' . $id,
'type' => 'required|string',
'seats' => 'required|integer',
'status' => 'required|string|in:available,occupied,reservada',
]);
$table = Table::findOrFail($id);
$table->fill($request->only('name', 'number', 'type', 'seats', 'status'));
$table->save();
return redirect()->route('adminmesas')->with('success', 'Mesa actualizada correctamente.');
}
Status Values:
available - Table is available
occupied - Table is currently in use
reservada - Table is reserved
deleteTable()
Delete a table.
Route: DELETE /admin/tables/{id}
Route Name: admin.tables.delete
Implementation:
public function deleteTable($id)
{
Table::findOrFail($id)->delete();
return redirect()->route('adminmesas')->with('success', 'Mesa eliminada correctamente.');
}
Chef Management
viewchef()
Display all chefs.
Route: GET /admin/chefs
Route Name: admin.chefs
Implementation:
public function viewchef()
{
$foodchefs = Foodchef::all();
$chefs = Chef::all();
return view("admin.adminchef", compact('foodchefs','chefs'));
}
uploadchef()
Create a new chef profile.
Route: POST /admin/chefs
Route Name: admin.chefs.store
Implementation:
public function uploadchef(Request $request)
{
$this->saveChefData(new Foodchef(), $request);
return redirect()->back()->with('success', 'Chef agregado correctamente.');
}
protected function saveChefData($chef, Request $request)
{
if ($request->hasFile('image')) {
$image = $request->file('image');
$imagename = time() . '.' . $image->getClientOriginalExtension();
$image->move('chefimage', $imagename);
$chef->image = $imagename;
}
$chef->fill($request->only('name','speciality'));
$chef->save();
return $chef;
}
updateChef()
Update an existing chef profile.
Route: PUT /admin/chefs/{id}
Route Name: admin.chefs.update
Implementation:
public function updateChef(Request $request, $id)
{
$chef = Chef::findOrFail($id);
if ($request->hasFile('image')) {
$chef->image = $request->file('image')->store('chefs', 'public');
}
$chef->fill($request->only('first_name','last_name','specialty','description','area'));
$chef->save();
return redirect()->back()->with('success', 'Perfil actualizado correctamente.');
}
Request Parameters:
Work area (preparacion, cocinar, servir, etc.)
deleteChef()
Delete a chef.
Route: DELETE /admin/chefs/{id}
Route Name: admin.chefs.delete
Implementation:
public function deleteChef($id)
{
$chef = Chef::find($id);
if ($chef) {
$chef->delete();
return redirect()->back()->with('success', 'Chef eliminado correctamente.');
}
return redirect()->back()->with('error', 'Chef no encontrado.');
}
Order Management
orders()
Display all orders.
Route: GET /admin/orders
Route Name: admin.orders
Implementation:
public function orders()
{
$orders = Order::all();
return view('admin.orders', compact('orders'));
}
search()
Search orders by customer name.
Route: GET /admin/orders/search
Route Name: admin.orders.search
Implementation:
public function search(Request $request)
{
$orders = Order::where('name','LIKE','%'.$request->search.'%')->get();
return view('admin.orders', compact('orders'));
}
Search term to filter orders by customer name