progress
This commit is contained in:
@@ -29,10 +29,14 @@ class ReviewController extends Controller
|
|||||||
{
|
{
|
||||||
$validated = $request->validate([
|
$validated = $request->validate([
|
||||||
'content' => 'required|string|min:10|max:1000',
|
'content' => 'required|string|min:10|max:1000',
|
||||||
'recommended' => 'required|boolean',
|
'recommended' => 'sometimes|nullable|boolean',
|
||||||
'rating' => 'required|integer|between:1,10',
|
'rating' => 'required|between:1,10',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if (!isset($validated['recommended'])) {
|
||||||
|
$validated['recommended'] = false;
|
||||||
|
}
|
||||||
|
|
||||||
$review = new Review($validated);
|
$review = new Review($validated);
|
||||||
$review->user_id = Auth::id();
|
$review->user_id = Auth::id();
|
||||||
$review->game_id = $game->id;
|
$review->game_id = $game->id;
|
||||||
|
|||||||
@@ -41,14 +41,116 @@
|
|||||||
background: linear-gradient(var(--background), var(--background)) padding-box,
|
background: linear-gradient(var(--background), var(--background)) padding-box,
|
||||||
linear-gradient(90deg, var(--primary), var(--accent)) border-box;
|
linear-gradient(90deg, var(--primary), var(--accent)) border-box;
|
||||||
}
|
}
|
||||||
|
.navbar {
|
||||||
|
background-color: rgba(18, 18, 18, 0.95);
|
||||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
}
|
||||||
|
.navbar-brand {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.nav-link {
|
||||||
|
color: var(--text);
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
.nav-link:hover, .nav-link.active {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
.btn-gradient {
|
||||||
|
background: linear-gradient(90deg, var(--primary), var(--accent));
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 0.5rem 1.25rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
.btn-gradient:hover {
|
||||||
|
opacity: 0.9;
|
||||||
|
transform: translateY(-1px);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.btn-outline-light {
|
||||||
|
border-color: rgba(255, 255, 255, 0.3);
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
.btn-outline-light:hover {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
border-color: var(--accent);
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
.dropdown-menu {
|
||||||
|
background-color: #1a1a1a;
|
||||||
|
border: 1px solid #333;
|
||||||
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
.dropdown-item {
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
.dropdown-item:hover {
|
||||||
|
background-color: #2a2a2a;
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
.dropdown-divider {
|
||||||
|
border-top: 1px solid #333;
|
||||||
|
}
|
||||||
|
.form-control.bg-dark {
|
||||||
|
background-color: rgba(30, 30, 30, 0.8);
|
||||||
|
border: 1px solid #333;
|
||||||
|
color: var(--text);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
.form-control.bg-dark:focus {
|
||||||
|
background-color: rgba(40, 40, 40, 0.9);
|
||||||
|
border-color: var(--accent);
|
||||||
|
box-shadow: 0 0 0 0.25rem rgba(0, 201, 255, 0.25);
|
||||||
|
}
|
||||||
|
.input-group {
|
||||||
|
width: 250px;
|
||||||
|
}
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.input-group {
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 991.98px) {
|
||||||
|
.navbar-collapse {
|
||||||
|
background-color: rgba(25, 25, 25, 0.97);
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
.form-control.bg-dark {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.input-group {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.navbar-toggler {
|
||||||
|
border-color: rgba(255, 255, 255, 0.3);
|
||||||
|
color: var(--text);
|
||||||
|
}
|
||||||
|
.navbar-toggler:focus {
|
||||||
|
box-shadow: 0 0 0 0.25rem rgba(0, 201, 255, 0.25);
|
||||||
|
}
|
||||||
|
.navbar-toggler-icon {
|
||||||
|
filter: invert(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@stack('styles')
|
@stack('styles')
|
||||||
</head>
|
</head>
|
||||||
<body class="font-sans antialiased">
|
<body class="font-sans antialiased">
|
||||||
<div class="min-h-screen bg-gray-100 dark:bg-gray-900">
|
<div class="min-h-screen bg-gray-100 dark:bg-gray-900">
|
||||||
<nav class="navbar navbar-expand-lg">
|
<nav class="navbar navbar-expand-lg sticky-top">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a class="navbar-brand text-2xl fw-bold gradient-text" href="/">ClearGame</a>
|
<a class="navbar-brand gradient-text" href="/">
|
||||||
|
<i class="fas fa-gamepad me-2"></i>ClearGame
|
||||||
|
</a>
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
@@ -59,17 +161,52 @@
|
|||||||
<i class="fas fa-gamepad me-1"></i> Games
|
<i class="fas fa-gamepad me-1"></i> Games
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@auth
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link {{ request()->routeIs('lists.*') ? 'active' : '' }}" href="{{ route('lists.index') }}">
|
||||||
|
<i class="fas fa-list me-1"></i> My Lists
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link {{ request()->routeIs('profile') || request()->routeIs('profile.edit') || request()->routeIs('profile.reviews') ? 'active' : '' }}" href="{{ route('profile') }}">
|
||||||
|
<i class="fas fa-user-circle me-1"></i> My Profile
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
@endauth
|
||||||
</ul>
|
</ul>
|
||||||
<div class="d-flex">
|
|
||||||
|
<form action="{{ route('games.index') }}" method="GET" class="d-flex me-3">
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" name="search" class="form-control bg-dark text-light border-dark" placeholder="Search games..." aria-label="Search" value="{{ request('search') }}">
|
||||||
|
<button class="btn btn-outline-light" type="submit">
|
||||||
|
<i class="fas fa-search"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="d-flex align-items-center">
|
||||||
@auth
|
@auth
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button class="btn btn-outline-gradient dropdown-toggle" type="button" data-bs-toggle="dropdown">
|
<button class="btn btn-outline-light dropdown-toggle" type="button" data-bs-toggle="dropdown">
|
||||||
<i class="fas fa-user me-1"></i> {{ Auth::user()->name }}
|
<i class="fas fa-user me-1"></i> {{ Auth::user()->name }}
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu dropdown-menu-end">
|
<ul class="dropdown-menu dropdown-menu-end">
|
||||||
<li>
|
<li>
|
||||||
<a href="">My lists</a>
|
<a href="{{ route('profile') }}" class="dropdown-item">
|
||||||
|
<i class="fas fa-user-circle me-1"></i> Profile
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ route('lists.index') }}" class="dropdown-item">
|
||||||
|
<i class="fas fa-list me-1"></i> My Lists
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ route('profile.reviews') }}" class="dropdown-item">
|
||||||
|
<i class="fas fa-star me-1"></i> My Reviews
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li><hr class="dropdown-divider"></li>
|
||||||
<li>
|
<li>
|
||||||
<form method="POST" action="{{ route('logout') }}">
|
<form method="POST" action="{{ route('logout') }}">
|
||||||
@csrf
|
@csrf
|
||||||
@@ -81,7 +218,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<a href="{{ route('login') }}" class="text-gray-300 text-decoration-none me-3">
|
<a href="{{ route('login') }}" class="btn btn-outline-light me-2">
|
||||||
<i class="fas fa-sign-in-alt me-1"></i> Login
|
<i class="fas fa-sign-in-alt me-1"></i> Login
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ route('register') }}" class="btn btn-gradient">
|
<a href="{{ route('register') }}" class="btn btn-gradient">
|
||||||
|
|||||||
+1
-1
@@ -26,8 +26,8 @@ Route::middleware('auth')->group(function () {
|
|||||||
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
||||||
|
|
||||||
// Review routes
|
// Review routes
|
||||||
|
Route::post('/games/{game:slug}/reviews/store', [ReviewController::class, 'store'])->name('games.reviews.store');
|
||||||
Route::get('/games/{game:slug}/reviews/create', [ReviewController::class, 'create'])->name('games.reviews.create');
|
Route::get('/games/{game:slug}/reviews/create', [ReviewController::class, 'create'])->name('games.reviews.create');
|
||||||
Route::post('/games/{game:slug}/reviews', [ReviewController::class, 'store'])->name('games.reviews.store');
|
|
||||||
Route::get('/reviews/{review}', [ReviewController::class, 'show'])->name('reviews.show');
|
Route::get('/reviews/{review}', [ReviewController::class, 'show'])->name('reviews.show');
|
||||||
Route::get('/reviews/{review}/edit', [ReviewController::class, 'edit'])->name('reviews.edit');
|
Route::get('/reviews/{review}/edit', [ReviewController::class, 'edit'])->name('reviews.edit');
|
||||||
Route::put('/reviews/{review}', [ReviewController::class, 'update'])->name('reviews.update');
|
Route::put('/reviews/{review}', [ReviewController::class, 'update'])->name('reviews.update');
|
||||||
|
|||||||
Reference in New Issue
Block a user