feat(admin): add dashboard, analytics and user controllers
This commit is contained in:
1 parent
1346766a73
commit
d63bbcb29a
3 files changed
+81
No files matched your search
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Bazaar\Controllers\Admin;
|
||||||
|
|
||||||
|
use Bazaar\Controllers\Controller;
|
||||||
|
use Bazaar\Core\Response;
|
||||||
|
|
||||||
|
final class AnalyticsController extends Controller
|
||||||
|
{
|
||||||
|
public function index(): Response
|
||||||
|
{
|
||||||
|
return $this->view('admin.analytics', [
|
||||||
|
'salesByDay' => $this->ctx->analytics->salesByDay(14),
|
||||||
|
'topProducts' => $this->ctx->analytics->topProducts(5),
|
||||||
|
'averageOrderCents' => $this->ctx->analytics->averageOrderValueCents(),
|
||||||
|
'unitsSold' => $this->ctx->analytics->unitsSold(),
|
||||||
|
'couponUsage' => $this->ctx->analytics->couponUsage(),
|
||||||
|
'revenueCents' => $this->ctx->orders->revenueCents(),
|
||||||
|
'lowStock' => $this->ctx->products->lowStock(5),
|
||||||
|
], 'admin.layout');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Bazaar\Controllers\Admin;
|
||||||
|
|
||||||
|
use Bazaar\Controllers\Controller;
|
||||||
|
use Bazaar\Core\Response;
|
||||||
|
|
||||||
|
final class DashboardController extends Controller
|
||||||
|
{
|
||||||
|
public function index(): Response
|
||||||
|
{
|
||||||
|
return $this->view('admin.dashboard', [
|
||||||
|
'productCount' => $this->ctx->products->count(),
|
||||||
|
'pendingCount' => $this->ctx->orders->countByStatus('pending'),
|
||||||
|
'paidCount' => $this->ctx->orders->countByStatus('paid'),
|
||||||
|
'fulfilledCount' => $this->ctx->orders->countByStatus('fulfilled'),
|
||||||
|
'orderCount' => $this->ctx->orders->count(),
|
||||||
|
'revenueCents' => $this->ctx->orders->revenueCents(),
|
||||||
|
'lowStock' => $this->ctx->products->lowStock(5),
|
||||||
|
'recentOrders' => $this->ctx->orders->recent(6),
|
||||||
|
], 'admin.layout');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Bazaar\Controllers\Admin;
|
||||||
|
|
||||||
|
use Bazaar\Controllers\Controller;
|
||||||
|
use Bazaar\Core\Response;
|
||||||
|
use Bazaar\Support\Role;
|
||||||
|
|
||||||
|
final class UserController extends Controller
|
||||||
|
{
|
||||||
|
public function index(): Response
|
||||||
|
{
|
||||||
|
return $this->view('admin.users.index', [
|
||||||
|
'users' => $this->ctx->users->all(),
|
||||||
|
'roles' => Role::all(),
|
||||||
|
], 'admin.layout');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateRole(string $id): Response
|
||||||
|
{
|
||||||
|
$userId = (int) $id;
|
||||||
|
$role = (string) $this->ctx->request->input('role', Role::customer);
|
||||||
|
if (!in_array($role, Role::all(), true)) {
|
||||||
|
return $this->redirect('/admin/users');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($userId === (int) $this->ctx->auth->id()) {
|
||||||
|
$this->ctx->session->flash('error', 'You cannot change your own role.');
|
||||||
|
return $this->redirect('/admin/users');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->ctx->users->setRole($userId, $role);
|
||||||
|
$this->ctx->session->flash('success', 'Role updated.');
|
||||||
|
return $this->redirect('/admin/users');
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user