feat : indentation
This commit is contained in:
parent
4a29522f49
commit
da3068f95e
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace App\Enums;
|
namespace App\Enums;
|
||||||
|
|
||||||
enum HuntStatus : string
|
enum HuntStatus: string
|
||||||
{
|
{
|
||||||
case DRAFT = 'draft';
|
case DRAFT = 'draft';
|
||||||
case PUBLISHED = 'published';
|
case PUBLISHED = 'published';
|
||||||
|
|
|
||||||
|
|
@ -2,28 +2,27 @@
|
||||||
|
|
||||||
namespace App\Filament\Resources\Hunts;
|
namespace App\Filament\Resources\Hunts;
|
||||||
|
|
||||||
|
use App\Enums\HuntDifficulty;
|
||||||
|
use App\Enums\HuntStatus;
|
||||||
|
use App\Enums\UserRole;
|
||||||
use App\Filament\Resources\Hunts\Pages\CreateHunts;
|
use App\Filament\Resources\Hunts\Pages\CreateHunts;
|
||||||
use App\Filament\Resources\Hunts\Pages\EditHunts;
|
use App\Filament\Resources\Hunts\Pages\EditHunts;
|
||||||
use App\Filament\Resources\Hunts\Pages\ListHunts;
|
use App\Filament\Resources\Hunts\Pages\ListHunts;
|
||||||
use App\Models\Hunts;
|
use App\Models\Hunts;
|
||||||
|
use BackedEnum;
|
||||||
|
use Filament\Actions\BulkActionGroup;
|
||||||
|
use Filament\Actions\DeleteBulkAction;
|
||||||
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Forms;
|
use Filament\Forms;
|
||||||
use Filament\Forms\Form;
|
use Filament\Forms\Components\DateTimePicker;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
use App\Enums\HuntStatus;
|
|
||||||
use Filament\Schemas\Schema;
|
|
||||||
use BackedEnum;
|
|
||||||
use App\Enums\HuntDifficulty;
|
|
||||||
use Filament\Actions\EditAction;
|
|
||||||
use Filament\Actions\DeleteBulkAction;
|
|
||||||
use Filament\Actions\BulkActionGroup;
|
|
||||||
use Filament\Forms\Components\TextInput;
|
|
||||||
use Filament\Forms\Components\Textarea;
|
|
||||||
use Filament\Forms\Components\Select;
|
|
||||||
use Filament\Forms\Components\DateTimePicker;
|
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use App\Enums\UserRole;
|
|
||||||
|
|
||||||
class HuntsResource extends Resource
|
class HuntsResource extends Resource
|
||||||
{
|
{
|
||||||
|
|
@ -37,6 +36,7 @@ class HuntsResource extends Resource
|
||||||
|
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static ?string $model = Hunts::class;
|
protected static ?string $model = Hunts::class;
|
||||||
|
|
||||||
protected static string|BackedEnum|null $navigationIcon = 'heroicon-o-map';
|
protected static string|BackedEnum|null $navigationIcon = 'heroicon-o-map';
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
namespace App\Filament\Resources\Hunts\RelationManagers;
|
namespace App\Filament\Resources\Hunts\RelationManagers;
|
||||||
|
|
||||||
use Filament\Forms;
|
use Filament\Forms;
|
||||||
use Filament\Schemas\Schema;
|
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,17 @@
|
||||||
|
|
||||||
namespace App\Filament\Resources\Hunts\RelationManagers;
|
namespace App\Filament\Resources\Hunts\RelationManagers;
|
||||||
|
|
||||||
use Filament\Forms;
|
use Filament\Actions\BulkActionGroup;
|
||||||
use Filament\Schemas\Schema;
|
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
|
||||||
use Filament\Tables;
|
|
||||||
use Filament\Tables\Table;
|
|
||||||
use Filament\Forms\Components\TextInput;
|
|
||||||
use Filament\Forms\Components\Textarea;
|
|
||||||
use Filament\Actions\CreateAction;
|
use Filament\Actions\CreateAction;
|
||||||
use Filament\Actions\EditAction;
|
|
||||||
use Filament\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Actions\DeleteBulkAction;
|
use Filament\Actions\DeleteBulkAction;
|
||||||
use Filament\Actions\BulkActionGroup;
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Forms\Components\Textarea;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables;
|
||||||
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
class StepsRelationManager extends RelationManager
|
class StepsRelationManager extends RelationManager
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,6 @@ class CreateUser extends CreateRecord
|
||||||
protected function afterCreate(): void
|
protected function afterCreate(): void
|
||||||
{
|
{
|
||||||
$record = $this->getRecord();
|
$record = $this->getRecord();
|
||||||
\Illuminate\Support\Facades\Log::info('Filament CreateUser: User ' . $record->id . ' created. avatar_uri: ' . $record->avatar_uri);
|
\Illuminate\Support\Facades\Log::info('Filament CreateUser: User '.$record->id.' created. avatar_uri: '.$record->avatar_uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,6 @@ class EditUser extends EditRecord
|
||||||
protected function afterSave(): void
|
protected function afterSave(): void
|
||||||
{
|
{
|
||||||
$record = $this->getRecord();
|
$record = $this->getRecord();
|
||||||
\Illuminate\Support\Facades\Log::info('Filament EditUser: User ' . $record->id . ' updated. avatar_uri: ' . $record->avatar_uri);
|
\Illuminate\Support\Facades\Log::info('Filament EditUser: User '.$record->id.' updated. avatar_uri: '.$record->avatar_uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,12 @@
|
||||||
namespace App\Filament\Resources\Users\Schemas;
|
namespace App\Filament\Resources\Users\Schemas;
|
||||||
|
|
||||||
use App\Enums\UserRole;
|
use App\Enums\UserRole;
|
||||||
use Illuminate\Support\Facades\Hash;
|
|
||||||
use Filament\Forms\Components\DateTimePicker;
|
use Filament\Forms\Components\DateTimePicker;
|
||||||
|
use Filament\Forms\Components\FileUpload;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Schemas\Schema;
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Forms\Components\FileUpload;
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
|
||||||
class UserForm
|
class UserForm
|
||||||
{
|
{
|
||||||
|
|
@ -48,7 +48,7 @@ class UserForm
|
||||||
->image()
|
->image()
|
||||||
->avatar()
|
->avatar()
|
||||||
->disk('public')
|
->disk('public')
|
||||||
->directory('avatars')
|
->directory('avatars'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ use Filament\Actions\DeleteBulkAction;
|
||||||
use Filament\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
use Filament\Actions\ForceDeleteBulkAction;
|
use Filament\Actions\ForceDeleteBulkAction;
|
||||||
use Filament\Actions\RestoreBulkAction;
|
use Filament\Actions\RestoreBulkAction;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
|
||||||
use Filament\Tables\Columns\ImageColumn;
|
use Filament\Tables\Columns\ImageColumn;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Filters\TrashedFilter;
|
use Filament\Tables\Filters\TrashedFilter;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ class AuthController extends Controller
|
||||||
$avatar_uri = null;
|
$avatar_uri = null;
|
||||||
|
|
||||||
if ($request->hasFile('avatar')) {
|
if ($request->hasFile('avatar')) {
|
||||||
$filename = \Illuminate\Support\Str::uuid() . '.jpg';
|
$filename = \Illuminate\Support\Str::uuid().'.jpg';
|
||||||
$path = $request->file('avatar')->storeAs('avatars', $filename, 'public');
|
$path = $request->file('avatar')->storeAs('avatars', $filename, 'public');
|
||||||
$avatar_uri = $path;
|
$avatar_uri = $path;
|
||||||
}
|
}
|
||||||
|
|
@ -87,6 +87,7 @@ class AuthController extends Controller
|
||||||
'message' => __('auth.logout_success'),
|
'message' => __('auth.logout_success'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine the token name to use for the access token.
|
* Determine the token name to use for the access token.
|
||||||
*
|
*
|
||||||
|
|
@ -103,7 +104,7 @@ class AuthController extends Controller
|
||||||
{
|
{
|
||||||
$user = $request->user(); // ou $request->user('sanctum')
|
$user = $request->user(); // ou $request->user('sanctum')
|
||||||
|
|
||||||
if (!$user) {
|
if (! $user) {
|
||||||
return response()->json(['message' => 'Unauthenticated.'], 401);
|
return response()->json(['message' => 'Unauthenticated.'], 401);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,6 @@
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\HuntSteps;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class HuntStepsController extends Controller
|
class HuntStepsController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
|
@ -54,7 +51,7 @@ class HuntStepsController extends Controller
|
||||||
// 1. Check participation
|
// 1. Check participation
|
||||||
$participation = $user->participations()->where('hunt_id', $hunt->id)->first();
|
$participation = $user->participations()->where('hunt_id', $hunt->id)->first();
|
||||||
|
|
||||||
if (!$participation) {
|
if (! $participation) {
|
||||||
return response()->json(['message' => 'Not participating in this hunt'], 403);
|
return response()->json(['message' => 'Not participating in this hunt'], 403);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -84,7 +81,7 @@ class HuntStepsController extends Controller
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'success' => false,
|
'success' => false,
|
||||||
'message' => 'You are too far from the target.',
|
'message' => 'You are too far from the target.',
|
||||||
'distance' => round($distance) . 'm'
|
'distance' => round($distance).'m',
|
||||||
], 400);
|
], 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ namespace App\Http\Controllers;
|
||||||
use App\Models\Hunts;
|
use App\Models\Hunts;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
|
|
||||||
class HuntsController extends Controller
|
class HuntsController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -31,7 +30,7 @@ class HuntsController extends Controller
|
||||||
'user_id' => $userId,
|
'user_id' => $userId,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (!$userId) {
|
if (! $userId) {
|
||||||
// Non connecté → aucune hunt "participating"
|
// Non connecté → aucune hunt "participating"
|
||||||
if ($participating === true) {
|
if ($participating === true) {
|
||||||
$query->whereRaw('1 = 0');
|
$query->whereRaw('1 = 0');
|
||||||
|
|
@ -51,8 +50,6 @@ class HuntsController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Filtre active/inactive uniquement si le param est présent
|
// Filtre active/inactive uniquement si le param est présent
|
||||||
if ($request->has('active')) {
|
if ($request->has('active')) {
|
||||||
$now = \Illuminate\Support\Carbon::now();
|
$now = \Illuminate\Support\Carbon::now();
|
||||||
|
|
@ -79,10 +76,11 @@ class HuntsController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
$hunts = $query->paginate(10);
|
$hunts = $query->paginate(10);
|
||||||
|
|
||||||
return response()->json($hunts);
|
return response()->json($hunts);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
Log::error('Error fetching hunts: ' . $e->getMessage());
|
Log::error('Error fetching hunts: '.$e->getMessage());
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'error' => 'Server Error',
|
'error' => 'Server Error',
|
||||||
|
|
@ -91,7 +89,6 @@ class HuntsController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store a newly created resource in storage.
|
* Store a newly created resource in storage.
|
||||||
*/
|
*/
|
||||||
|
|
@ -116,7 +113,7 @@ class HuntsController extends Controller
|
||||||
{
|
{
|
||||||
$hunt = Hunts::with(['steps', 'participants:id,avatar_uri'])->find($id);
|
$hunt = Hunts::with(['steps', 'participants:id,avatar_uri'])->find($id);
|
||||||
|
|
||||||
if (!$hunt) {
|
if (! $hunt) {
|
||||||
return response()->json(['message' => 'Hunt not found'], 404);
|
return response()->json(['message' => 'Hunt not found'], 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -137,8 +134,10 @@ class HuntsController extends Controller
|
||||||
if ($step->step_number == $currentStepNumber) {
|
if ($step->step_number == $currentStepNumber) {
|
||||||
// Show hints but hide location for current step
|
// Show hints but hide location for current step
|
||||||
$step->makeHidden(['latitude', 'longitude', 'radius_m']);
|
$step->makeHidden(['latitude', 'longitude', 'radius_m']);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false; // Hide future steps
|
return false; // Hide future steps
|
||||||
})->values());
|
})->values());
|
||||||
|
|
||||||
|
|
@ -180,7 +179,7 @@ class HuntsController extends Controller
|
||||||
$hunt = Hunts::findOrFail($id);
|
$hunt = Hunts::findOrFail($id);
|
||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
|
|
||||||
if (!$user->participations()->where('hunt_id', $hunt->id)->exists()) {
|
if (! $user->participations()->where('hunt_id', $hunt->id)->exists()) {
|
||||||
return response()->json(['message' => 'Not participating'], 404);
|
return response()->json(['message' => 'Not participating'], 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -196,7 +195,7 @@ class HuntsController extends Controller
|
||||||
{
|
{
|
||||||
$hunt = Hunts::find($id);
|
$hunt = Hunts::find($id);
|
||||||
|
|
||||||
if (!$hunt) {
|
if (! $hunt) {
|
||||||
return response()->json(['message' => 'Hunt not found'], 404);
|
return response()->json(['message' => 'Hunt not found'], 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -214,7 +213,7 @@ class HuntsController extends Controller
|
||||||
{
|
{
|
||||||
$hunt = Hunts::find($id);
|
$hunt = Hunts::find($id);
|
||||||
|
|
||||||
if (!$hunt) {
|
if (! $hunt) {
|
||||||
return response()->json(['message' => 'Hunt not found'], 404);
|
return response()->json(['message' => 'Hunt not found'], 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests\Auth\UpdatePasswordRequest;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use App\Http\Requests\Auth\UpdatePasswordRequest;
|
|
||||||
use Illuminate\Http\JsonResponse;
|
|
||||||
|
|
||||||
class UsersController extends Controller
|
class UsersController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -39,7 +39,7 @@ class UsersController extends Controller
|
||||||
'avatar' => ['required', 'image', 'max:2048'], // 2MB max
|
'avatar' => ['required', 'image', 'max:2048'], // 2MB max
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$filename = \Illuminate\Support\Str::uuid() . '.jpg';
|
$filename = \Illuminate\Support\Str::uuid().'.jpg';
|
||||||
$path = $request->file('avatar')->storeAs('avatars', $filename, 'public');
|
$path = $request->file('avatar')->storeAs('avatars', $filename, 'public');
|
||||||
|
|
||||||
$user->update([
|
$user->update([
|
||||||
|
|
@ -55,7 +55,6 @@ class UsersController extends Controller
|
||||||
/**
|
/**
|
||||||
* @requestMediaType multipart/form-data
|
* @requestMediaType multipart/form-data
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function updateUsername(Request $request)
|
public function updateUsername(Request $request)
|
||||||
{
|
{
|
||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
|
|
@ -77,13 +76,12 @@ class UsersController extends Controller
|
||||||
/**
|
/**
|
||||||
* @requestMediaType multipart/form-data
|
* @requestMediaType multipart/form-data
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function updatePassword(UpdatePasswordRequest $request)
|
public function updatePassword(UpdatePasswordRequest $request)
|
||||||
{
|
{
|
||||||
$data = $request->validated();
|
$data = $request->validated();
|
||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
|
|
||||||
if (!Hash::check($data['old_password'], $user->password)) {
|
if (! Hash::check($data['old_password'], $user->password)) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'The provided password does not match your current password.',
|
'message' => 'The provided password does not match your current password.',
|
||||||
], 422);
|
], 422);
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ class EnsureUserIsAdmin
|
||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!$user ||
|
! $user ||
|
||||||
($user->role !== \App\Enums\UserRole::ADMIN)
|
($user->role !== \App\Enums\UserRole::ADMIN)
|
||||||
) {
|
) {
|
||||||
abort(403, 'Unauthorized action.');
|
abort(403, 'Unauthorized action.');
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ class EnsureUserIsOrga
|
||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!$user ||
|
! $user ||
|
||||||
($user->role !== \App\Enums\UserRole::ORGA && $user->role !== \App\Enums\UserRole::ADMIN)
|
($user->role !== \App\Enums\UserRole::ORGA && $user->role !== \App\Enums\UserRole::ADMIN)
|
||||||
) {
|
) {
|
||||||
abort(403, 'Unauthorized action.');
|
abort(403, 'Unauthorized action.');
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
namespace App\Http\Requests;
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
|
||||||
use Illuminate\Contracts\Validation\Validator;
|
use Illuminate\Contracts\Validation\Validator;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Http\Exceptions\HttpResponseException;
|
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||||
|
|
||||||
class StoreHuntRequest extends FormRequest
|
class StoreHuntRequest extends FormRequest
|
||||||
|
|
@ -44,7 +44,6 @@ class StoreHuntRequest extends FormRequest
|
||||||
/**
|
/**
|
||||||
* Handle a failed validation attempt.
|
* Handle a failed validation attempt.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Contracts\Validation\Validator $validator
|
|
||||||
* @return void
|
* @return void
|
||||||
*
|
*
|
||||||
* @throws \Illuminate\Http\Exceptions\HttpResponseException
|
* @throws \Illuminate\Http\Exceptions\HttpResponseException
|
||||||
|
|
@ -53,7 +52,7 @@ class StoreHuntRequest extends FormRequest
|
||||||
{
|
{
|
||||||
throw new HttpResponseException(response()->json([
|
throw new HttpResponseException(response()->json([
|
||||||
'message' => 'Validation errors',
|
'message' => 'Validation errors',
|
||||||
'errors' => $validator->errors()
|
'errors' => $validator->errors(),
|
||||||
], 422));
|
], 422));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
namespace App\Http\Requests;
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
|
||||||
use Illuminate\Contracts\Validation\Validator;
|
use Illuminate\Contracts\Validation\Validator;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Http\Exceptions\HttpResponseException;
|
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||||
|
|
||||||
class StoreHuntStepRequest extends FormRequest
|
class StoreHuntStepRequest extends FormRequest
|
||||||
|
|
@ -39,7 +39,6 @@ class StoreHuntStepRequest extends FormRequest
|
||||||
/**
|
/**
|
||||||
* Handle a failed validation attempt.
|
* Handle a failed validation attempt.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Contracts\Validation\Validator $validator
|
|
||||||
* @return void
|
* @return void
|
||||||
*
|
*
|
||||||
* @throws \Illuminate\Http\Exceptions\HttpResponseException
|
* @throws \Illuminate\Http\Exceptions\HttpResponseException
|
||||||
|
|
@ -48,7 +47,7 @@ class StoreHuntStepRequest extends FormRequest
|
||||||
{
|
{
|
||||||
throw new HttpResponseException(response()->json([
|
throw new HttpResponseException(response()->json([
|
||||||
'message' => 'Validation errors',
|
'message' => 'Validation errors',
|
||||||
'errors' => $validator->errors()
|
'errors' => $validator->errors(),
|
||||||
], 422));
|
], 422));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
namespace App\Http\Requests;
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
|
||||||
use Illuminate\Contracts\Validation\Validator;
|
use Illuminate\Contracts\Validation\Validator;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Http\Exceptions\HttpResponseException;
|
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
|
@ -50,7 +50,6 @@ class UpdateHuntRequest extends FormRequest
|
||||||
/**
|
/**
|
||||||
* Handle a failed validation attempt.
|
* Handle a failed validation attempt.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Contracts\Validation\Validator $validator
|
|
||||||
* @return void
|
* @return void
|
||||||
*
|
*
|
||||||
* @throws \Illuminate\Http\Exceptions\HttpResponseException
|
* @throws \Illuminate\Http\Exceptions\HttpResponseException
|
||||||
|
|
@ -59,7 +58,7 @@ class UpdateHuntRequest extends FormRequest
|
||||||
{
|
{
|
||||||
throw new HttpResponseException(response()->json([
|
throw new HttpResponseException(response()->json([
|
||||||
'message' => 'Validation errors',
|
'message' => 'Validation errors',
|
||||||
'errors' => $validator->errors()
|
'errors' => $validator->errors(),
|
||||||
], 422));
|
], 422));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||||
class HuntSteps extends Model
|
class HuntSteps extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'hunt_id',
|
'hunt_id',
|
||||||
'step_number',
|
'step_number',
|
||||||
|
|
@ -20,6 +21,7 @@ class HuntSteps extends Model
|
||||||
'radius_m',
|
'radius_m',
|
||||||
'xp',
|
'xp',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'latitude' => 'float',
|
'latitude' => 'float',
|
||||||
'longitude' => 'float',
|
'longitude' => 'float',
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,11 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Enums\HuntDifficulty;
|
||||||
|
use App\Enums\HuntStatus;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use App\Enums\HuntStatus;
|
|
||||||
use App\Enums\HuntDifficulty;
|
|
||||||
class Hunts extends Model
|
class Hunts extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
@ -40,6 +41,7 @@ class Hunts extends Model
|
||||||
'status' => HuntStatus::class,
|
'status' => HuntStatus::class,
|
||||||
'difficulty' => HuntDifficulty::class,
|
'difficulty' => HuntDifficulty::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
public function steps()
|
public function steps()
|
||||||
{
|
{
|
||||||
return $this->hasMany(HuntSteps::class, 'hunt_id');
|
return $this->hasMany(HuntSteps::class, 'hunt_id');
|
||||||
|
|
@ -51,5 +53,4 @@ class Hunts extends Model
|
||||||
->withPivot(['current_step_number', 'status'])
|
->withPivot(['current_step_number', 'status'])
|
||||||
->withTimestamps();
|
->withTimestamps();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,11 @@ namespace App\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use App\Models\User;
|
|
||||||
|
|
||||||
class Level extends Model
|
class Level extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'level_position',
|
'level_position',
|
||||||
'xpThreshold',
|
'xpThreshold',
|
||||||
|
|
|
||||||
|
|
@ -4,22 +4,21 @@ namespace App\Models;
|
||||||
|
|
||||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||||
use App\Enums\UserRole;
|
use App\Enums\UserRole;
|
||||||
|
use Filament\Models\Contracts\FilamentUser;
|
||||||
use Filament\Models\Contracts\HasName;
|
use Filament\Models\Contracts\HasName;
|
||||||
|
use Filament\Panel;
|
||||||
|
use Illuminate\Database\Eloquent\Concerns\HasUuids;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
use Laravel\Sanctum\HasApiTokens;
|
use Laravel\Sanctum\HasApiTokens;
|
||||||
use Illuminate\Database\Eloquent\Concerns\HasUuids;
|
|
||||||
|
|
||||||
use Filament\Models\Contracts\FilamentUser;
|
class User extends Authenticatable implements FilamentUser, HasName
|
||||||
use Filament\Panel;
|
|
||||||
|
|
||||||
class User extends Authenticatable implements HasName, FilamentUser
|
|
||||||
{
|
{
|
||||||
/** @use HasFactory<\Database\Factories\UserFactory> */
|
/** @use HasFactory<\Database\Factories\UserFactory> */
|
||||||
use HasApiTokens, HasFactory, Notifiable, SoftDeletes, HasUuids;
|
use HasApiTokens, HasFactory, HasUuids, Notifiable, SoftDeletes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The primary key type.
|
* The primary key type.
|
||||||
|
|
@ -49,7 +48,7 @@ class User extends Authenticatable implements HasName, FilamentUser
|
||||||
'avatar_uri',
|
'avatar_uri',
|
||||||
'participations',
|
'participations',
|
||||||
'victories',
|
'victories',
|
||||||
'level_id'
|
'level_id',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -81,7 +80,7 @@ class User extends Authenticatable implements HasName, FilamentUser
|
||||||
return [
|
return [
|
||||||
'email_verified_at' => 'datetime',
|
'email_verified_at' => 'datetime',
|
||||||
'password' => 'hashed',
|
'password' => 'hashed',
|
||||||
'role'=> UserRole::class
|
'role' => UserRole::class,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -114,6 +113,7 @@ class User extends Authenticatable implements HasName, FilamentUser
|
||||||
->orderBy('xpThreshold', 'asc')
|
->orderBy('xpThreshold', 'asc')
|
||||||
->value('xpThreshold');
|
->value('xpThreshold');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFilamentName(): string
|
public function getFilamentName(): string
|
||||||
{
|
{
|
||||||
return $this->username;
|
return $this->username;
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
namespace App\Policies;
|
namespace App\Policies;
|
||||||
|
|
||||||
|
use App\Enums\UserRole;
|
||||||
use App\Models\Hunts;
|
use App\Models\Hunts;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Enums\UserRole;
|
|
||||||
|
|
||||||
class HuntsPolicy
|
class HuntsPolicy
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
namespace App\Policies;
|
namespace App\Policies;
|
||||||
|
|
||||||
use App\Models\User;
|
|
||||||
use App\Enums\UserRole;
|
use App\Enums\UserRole;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
class UserPolicy
|
class UserPolicy
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ namespace App\Providers;
|
||||||
use Dedoc\Scramble\Scramble;
|
use Dedoc\Scramble\Scramble;
|
||||||
use Dedoc\Scramble\Support\Generator\OpenApi;
|
use Dedoc\Scramble\Support\Generator\OpenApi;
|
||||||
use Dedoc\Scramble\Support\Generator\SecurityScheme;
|
use Dedoc\Scramble\Support\Generator\SecurityScheme;
|
||||||
use Illuminate\Support\Facades\Gate;
|
|
||||||
use Illuminate\Routing\Route;
|
use Illuminate\Routing\Route;
|
||||||
|
use Illuminate\Support\Facades\Gate;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
|
@ -25,7 +25,7 @@ class AppServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function boot(): void
|
public function boot(): void
|
||||||
{
|
{
|
||||||
if($this->app->environment('production')) {
|
if ($this->app->environment('production')) {
|
||||||
\Illuminate\Support\Facades\URL::forceScheme('https');
|
\Illuminate\Support\Facades\URL::forceScheme('https');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"laravel/boost": "^1.8",
|
"laravel/boost": "^1.8",
|
||||||
"laravel/pail": "^1.2.2",
|
"laravel/pail": "^1.2.2",
|
||||||
"laravel/pint": "^1.24",
|
"laravel/pint": "*",
|
||||||
"laravel/sail": "^1.41",
|
"laravel/sail": "^1.41",
|
||||||
"mockery/mockery": "^1.6",
|
"mockery/mockery": "^1.6",
|
||||||
"nunomaduro/collision": "^8.6",
|
"nunomaduro/collision": "^8.6",
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "47bd34a5c0059d745d768652ac0ee581",
|
"content-hash": "047de0487d6a961282c968d1142d9844",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "anourvalar/eloquent-serialize",
|
"name": "anourvalar/eloquent-serialize",
|
||||||
|
|
@ -9107,16 +9107,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/pint",
|
"name": "laravel/pint",
|
||||||
"version": "v1.26.0",
|
"version": "v1.27.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laravel/pint.git",
|
"url": "https://github.com/laravel/pint.git",
|
||||||
"reference": "69dcca060ecb15e4b564af63d1f642c81a241d6f"
|
"reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laravel/pint/zipball/69dcca060ecb15e4b564af63d1f642c81a241d6f",
|
"url": "https://api.github.com/repos/laravel/pint/zipball/c67b4195b75491e4dfc6b00b1c78b68d86f54c90",
|
||||||
"reference": "69dcca060ecb15e4b564af63d1f642c81a241d6f",
|
"reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -9127,9 +9127,9 @@
|
||||||
"php": "^8.2.0"
|
"php": "^8.2.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"friendsofphp/php-cs-fixer": "^3.90.0",
|
"friendsofphp/php-cs-fixer": "^3.92.4",
|
||||||
"illuminate/view": "^12.40.1",
|
"illuminate/view": "^12.44.0",
|
||||||
"larastan/larastan": "^3.8.0",
|
"larastan/larastan": "^3.8.1",
|
||||||
"laravel-zero/framework": "^12.0.4",
|
"laravel-zero/framework": "^12.0.4",
|
||||||
"mockery/mockery": "^1.6.12",
|
"mockery/mockery": "^1.6.12",
|
||||||
"nunomaduro/termwind": "^2.3.3",
|
"nunomaduro/termwind": "^2.3.3",
|
||||||
|
|
@ -9170,7 +9170,7 @@
|
||||||
"issues": "https://github.com/laravel/pint/issues",
|
"issues": "https://github.com/laravel/pint/issues",
|
||||||
"source": "https://github.com/laravel/pint"
|
"source": "https://github.com/laravel/pint"
|
||||||
},
|
},
|
||||||
"time": "2025-11-25T21:15:52+00:00"
|
"time": "2026-01-05T16:49:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/roster",
|
"name": "laravel/roster",
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
class BordeauxHuntsSeeder extends Seeder
|
class BordeauxHuntsSeeder extends Seeder
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
use App\Models\User;
|
|
||||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
use Illuminate\Database\Seeder;
|
|
||||||
use App\Models\Level;
|
use App\Models\Level;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
class LevelSeeder extends Seeder
|
class LevelSeeder extends Seeder
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,6 @@ return [
|
||||||
'failed' => 'These credentials do not match our records.',
|
'failed' => 'These credentials do not match our records.',
|
||||||
'password' => 'The provided password is incorrect.',
|
'password' => 'The provided password is incorrect.',
|
||||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||||
'logout_success' => "You have been deconnecte"
|
'logout_success' => 'You have been deconnecte',
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,6 @@ return [
|
||||||
'failed' => 'Impossible de vous connecter',
|
'failed' => 'Impossible de vous connecter',
|
||||||
'password' => 'Email ou mot de passe incorrect',
|
'password' => 'Email ou mot de passe incorrect',
|
||||||
'throttle' => 'Trop de tentatives veuillez reessayer dans :seconds seconds.',
|
'throttle' => 'Trop de tentatives veuillez reessayer dans :seconds seconds.',
|
||||||
'logout_success' => 'Vous êtes bien déconnecté'
|
'logout_success' => 'Vous êtes bien déconnecté',
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,6 @@ return [
|
||||||
'sent' => 'Nous avons envoyé par e-mail le lien de réinitialisation de votre mot de passe.',
|
'sent' => 'Nous avons envoyé par e-mail le lien de réinitialisation de votre mot de passe.',
|
||||||
'throttled' => 'Veuillez patienter avant de réessayer.',
|
'throttled' => 'Veuillez patienter avant de réessayer.',
|
||||||
'token' => 'Ce jeton de réinitialisation du mot de passe est invalide.',
|
'token' => 'Ce jeton de réinitialisation du mot de passe est invalide.',
|
||||||
'user' => "Nous ne trouvons pas d’utilisateur avec cette adresse e-mail.",
|
'user' => 'Nous ne trouvons pas d’utilisateur avec cette adresse e-mail.',
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Http\Controllers\AuthController;
|
use App\Http\Controllers\AuthController;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
use App\Http\Controllers\HuntsController;
|
use App\Http\Controllers\HuntsController;
|
||||||
use App\Http\Controllers\HuntStepsController;
|
use App\Http\Controllers\HuntStepsController;
|
||||||
use App\Http\Controllers\UsersController;
|
use App\Http\Controllers\UsersController;
|
||||||
use App\Http\Middleware\EnsureUserIsAdmin;
|
use App\Http\Middleware\EnsureUserIsAdmin;
|
||||||
use App\Http\Middleware\EnsureUserIsOrga;
|
use App\Http\Middleware\EnsureUserIsOrga;
|
||||||
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::prefix('auth')->group(function (): void {
|
Route::prefix('auth')->group(function (): void {
|
||||||
Route::post('register', [AuthController::class, 'register']);
|
Route::post('register', [AuthController::class, 'register']);
|
||||||
|
|
@ -21,7 +17,7 @@ Route::prefix('auth')->group(function (): void {
|
||||||
|
|
||||||
// List hunts
|
// List hunts
|
||||||
|
|
||||||
//Ensure is Admin
|
// Ensure is Admin
|
||||||
Route::middleware(['auth:sanctum', EnsureUserIsAdmin::class])->group(function () {
|
Route::middleware(['auth:sanctum', EnsureUserIsAdmin::class])->group(function () {
|
||||||
Route::post('users/{user}/delete', [UsersController::class, 'softDeleteById'])->withTrashed();
|
Route::post('users/{user}/delete', [UsersController::class, 'softDeleteById'])->withTrashed();
|
||||||
});
|
});
|
||||||
|
|
@ -38,7 +34,7 @@ Route::middleware(['auth:sanctum', EnsureUserIsOrga::class])->group(function ()
|
||||||
Route::middleware('auth:sanctum')->group(function (): void {
|
Route::middleware('auth:sanctum')->group(function (): void {
|
||||||
Route::get('hunts', [HuntsController::class, 'index']);
|
Route::get('hunts', [HuntsController::class, 'index']);
|
||||||
Route::get('hunts/{hunt}', [HuntsController::class, 'show']);
|
Route::get('hunts/{hunt}', [HuntsController::class, 'show']);
|
||||||
//Auth
|
// Auth
|
||||||
Route::post('auth/delete', [AuthController::class, 'softDelete']);
|
Route::post('auth/delete', [AuthController::class, 'softDelete']);
|
||||||
// User
|
// User
|
||||||
Route::get('users/leaderboard', [UsersController::class, 'leaderboard']);
|
Route::get('users/leaderboard', [UsersController::class, 'leaderboard']);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue