This commit is contained in:
2025-07-12 01:44:39 +03:00
parent 0c2ba52a15
commit 83fc389755
3 changed files with 150 additions and 9 deletions
+6 -2
View File
@@ -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;
+143 -6
View File
@@ -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
View File
@@ -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');