feat: initialisation complète du projet CESIZen
- Backend Laravel 11 (API REST, JWT auth, PostgreSQL) - Frontend Next.js 14 (React, TypeScript, Tailwind CSS) - Docker Compose (PostgreSQL, backend, frontend) - Modules : auth, profil, tracker émotions, informations, admin
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Emotion;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AdminEmotionController extends Controller
|
||||
{
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
$emotions = Emotion::niveau(1)
|
||||
->with(['enfants' => fn($q) => $q->orderBy('nom')])
|
||||
->orderBy('nom')
|
||||
->get();
|
||||
|
||||
return response()->json($emotions);
|
||||
}
|
||||
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
$request->validate([
|
||||
'nom' => 'required|string|max:255',
|
||||
'couleur' => 'required|string|max:7',
|
||||
'icone' => 'nullable|string|max:10',
|
||||
'niveau' => 'required|integer|in:1,2',
|
||||
'parent_id' => 'nullable|required_if:niveau,2|exists:emotions,id',
|
||||
]);
|
||||
|
||||
$emotion = Emotion::create($request->only('nom', 'couleur', 'icone', 'niveau', 'parent_id'));
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Émotion créée',
|
||||
'emotion' => $emotion,
|
||||
], 201);
|
||||
}
|
||||
|
||||
public function update(Request $request, int $id): JsonResponse
|
||||
{
|
||||
$emotion = Emotion::findOrFail($id);
|
||||
|
||||
$request->validate([
|
||||
'nom' => 'sometimes|string|max:255',
|
||||
'couleur' => 'sometimes|string|max:7',
|
||||
'icone' => 'nullable|string|max:10',
|
||||
'est_actif' => 'sometimes|boolean',
|
||||
]);
|
||||
|
||||
$emotion->update($request->only('nom', 'couleur', 'icone', 'est_actif'));
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Émotion modifiée',
|
||||
'emotion' => $emotion,
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(int $id): JsonResponse
|
||||
{
|
||||
$emotion = Emotion::findOrFail($id);
|
||||
$emotion->update(['est_actif' => false]);
|
||||
$emotion->enfants()->update(['est_actif' => false]);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Émotion désactivée',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\StoreFeedRequest;
|
||||
use App\Models\Feed;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class AdminFeedController extends Controller
|
||||
{
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
$feeds = Feed::with('auteur:id,nom,prenom')
|
||||
->orderBy('ordre')
|
||||
->orderBy('created_at', 'desc')
|
||||
->get();
|
||||
|
||||
return response()->json($feeds);
|
||||
}
|
||||
|
||||
public function store(StoreFeedRequest $request): JsonResponse
|
||||
{
|
||||
$data = $request->validated();
|
||||
$data['auteur_id'] = auth()->id();
|
||||
$data['slug'] = $data['slug'] ?? Str::slug($data['titre']);
|
||||
|
||||
$feed = Feed::create($data);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Contenu créé',
|
||||
'feed' => $feed,
|
||||
], 201);
|
||||
}
|
||||
|
||||
public function update(StoreFeedRequest $request, int $id): JsonResponse
|
||||
{
|
||||
$feed = Feed::findOrFail($id);
|
||||
$data = $request->validated();
|
||||
|
||||
if (isset($data['titre']) && !isset($data['slug'])) {
|
||||
$data['slug'] = Str::slug($data['titre']);
|
||||
}
|
||||
|
||||
$feed->update($data);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Contenu modifié',
|
||||
'feed' => $feed,
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(int $id): JsonResponse
|
||||
{
|
||||
Feed::findOrFail($id)->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Contenu supprimé',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Utilisateur;
|
||||
use App\Models\Role;
|
||||
use App\Models\Tracker;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AdminUtilisateurController extends Controller
|
||||
{
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
$query = Utilisateur::with('role');
|
||||
|
||||
if ($request->filled('search')) {
|
||||
$search = $request->search;
|
||||
$query->where(function ($q) use ($search) {
|
||||
$q->where('nom', 'ilike', "%{$search}%")
|
||||
->orWhere('prenom', 'ilike', "%{$search}%")
|
||||
->orWhere('email', 'ilike', "%{$search}%");
|
||||
});
|
||||
}
|
||||
|
||||
if ($request->filled('role')) {
|
||||
$query->whereHas('role', fn($q) => $q->where('nom', $request->role));
|
||||
}
|
||||
|
||||
$utilisateurs = $query->orderBy('created_at', 'desc')->paginate(15);
|
||||
|
||||
return response()->json($utilisateurs);
|
||||
}
|
||||
|
||||
public function show(int $id): JsonResponse
|
||||
{
|
||||
$utilisateur = Utilisateur::with('role')->findOrFail($id);
|
||||
|
||||
return response()->json($utilisateur);
|
||||
}
|
||||
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
$request->validate([
|
||||
'nom' => 'required|string|max:255',
|
||||
'prenom' => 'required|string|max:255',
|
||||
'email' => 'required|email|unique:utilisateurs,email',
|
||||
'password' => 'required|string|min:8',
|
||||
'role_id' => 'required|exists:roles,id',
|
||||
]);
|
||||
|
||||
$utilisateur = Utilisateur::create($request->only('nom', 'prenom', 'email', 'password', 'role_id'));
|
||||
|
||||
Tracker::create([
|
||||
'utilisateur_id' => $utilisateur->id,
|
||||
'nom' => 'Mon journal',
|
||||
]);
|
||||
|
||||
$utilisateur->load('role');
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Utilisateur créé',
|
||||
'utilisateur' => $utilisateur,
|
||||
], 201);
|
||||
}
|
||||
|
||||
public function update(Request $request, int $id): JsonResponse
|
||||
{
|
||||
$utilisateur = Utilisateur::findOrFail($id);
|
||||
|
||||
$request->validate([
|
||||
'nom' => 'sometimes|string|max:255',
|
||||
'prenom' => 'sometimes|string|max:255',
|
||||
'email' => "sometimes|email|unique:utilisateurs,email,{$id}",
|
||||
'role_id' => 'sometimes|exists:roles,id',
|
||||
]);
|
||||
|
||||
$utilisateur->update($request->only('nom', 'prenom', 'email', 'role_id'));
|
||||
$utilisateur->load('role');
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Utilisateur modifié',
|
||||
'utilisateur' => $utilisateur,
|
||||
]);
|
||||
}
|
||||
|
||||
public function toggleActive(int $id): JsonResponse
|
||||
{
|
||||
$utilisateur = Utilisateur::findOrFail($id);
|
||||
$utilisateur->update(['est_actif' => !$utilisateur->est_actif]);
|
||||
|
||||
return response()->json([
|
||||
'message' => $utilisateur->est_actif ? 'Compte activé' : 'Compte désactivé',
|
||||
'utilisateur' => $utilisateur,
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(int $id): JsonResponse
|
||||
{
|
||||
$utilisateur = Utilisateur::findOrFail($id);
|
||||
$utilisateur->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Utilisateur supprimé',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user