Première grosse version fonctionnel
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
// AuthController.php
|
||||
public function login(Request $request) {
|
||||
$fields = $request->validate([
|
||||
'email' => 'required|string|email',
|
||||
'password' => 'required|string'
|
||||
]);
|
||||
|
||||
// Log::info('Tentative de connexion', $request->all());
|
||||
|
||||
$user = User::where('email', $fields['email'])->first();
|
||||
|
||||
// Vérification du mot de passe haché (Sécurité)
|
||||
if(!$user || !Hash::check($fields['password'], $user->password)) {
|
||||
return response([
|
||||
'status' => 'error',
|
||||
'message' => 'Identifiants invalides'
|
||||
], 401);
|
||||
}
|
||||
|
||||
// Log::info('Email reçu: ' . $request->email);
|
||||
// Log::info('Password saisi: ' . $request->password);
|
||||
// Log::info('Hachage en BDD: ' . $user->password);
|
||||
|
||||
// Création du Token pour le mobile
|
||||
$token = $user->createToken('android_token')->plainTextToken;
|
||||
|
||||
return response([
|
||||
'status' => 'success',
|
||||
'user' => $user,
|
||||
'token' => $token
|
||||
], 200);
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
{
|
||||
// 1. Validation des données (Standard Qualité)
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required|string|max:255',
|
||||
'email' => 'required|string|email|max:255|unique:users',
|
||||
'password' => 'required|string|min:8|confirmed',
|
||||
]);
|
||||
|
||||
|
||||
Log::info('Tentative de création', $request->all());
|
||||
|
||||
if ($validator->fails()) {
|
||||
Log::info( $validator->errors());
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'errors' => $validator->errors()
|
||||
], 422);
|
||||
}
|
||||
|
||||
// 2. Création de l'utilisateur (Respect du MCD)
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password), // Chiffrement obligatoire
|
||||
]);
|
||||
|
||||
// 3. Génération du token pour le mobile
|
||||
$token = $user->createToken('android_token')->plainTextToken;
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Compte créé avec succès',
|
||||
'user' => $user,
|
||||
'token' => $token
|
||||
], 201);
|
||||
}
|
||||
|
||||
public function updateProfile(Request $request)
|
||||
{
|
||||
$user = $request->user();
|
||||
|
||||
$request->validate([
|
||||
'current_password' => 'required',
|
||||
'email' => [
|
||||
'sometimes',
|
||||
'email',
|
||||
Rule::unique('users')->ignore($user->id) // Empêche les doublons en BDD
|
||||
],
|
||||
]);
|
||||
|
||||
// 2. Vérification de sécurité (RGPD/Confidentialité)
|
||||
if (!Hash::check($request->current_password, $user->password)) {
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Le mot de passe actuel est incorrect'
|
||||
], 403);
|
||||
}
|
||||
|
||||
// 3. Mise à jour dynamique (Evolutivité)
|
||||
$data = $request->except(['current_password', 'password', 'id']);
|
||||
$user->fill($data);
|
||||
$user->save();
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'user' => $user
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\EmotionRecord;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class EmotionController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
return $request->user()->emotionRecords()->latest()->get();
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
Log::info('Tentative d\'enregistrement d\'émotion', [
|
||||
'user' => $request->user()->id,
|
||||
'data' => $request->all()
|
||||
]);
|
||||
|
||||
try {
|
||||
$validated = $request->validate([
|
||||
'emotion_name' => 'required|string',
|
||||
'note' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$record = $request->user()->emotionRecords()->create([
|
||||
'emotion' => $validated['emotion_name'],
|
||||
'intensity' => 3,
|
||||
'note' => $validated['note'] ?? 'Saisie depuis CESIZen',
|
||||
]);
|
||||
|
||||
return response()->json($record, 201);
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Erreur enregistrement émotion : ' . $e->getMessage());
|
||||
return response()->json(['error' => 'Erreur serveur'], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\StressEvent;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class StressDiagnosticController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
// Retourne les évènements et points pour l'affichage Flutter [cite: 126]
|
||||
return response()->json(StressEvent::all(), 200);
|
||||
}
|
||||
|
||||
public function getEvents()
|
||||
{
|
||||
// Retourne la liste des événements pour le module Diagnostic
|
||||
return response()->json(StressEvent::all());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
// On récupère l'utilisateur connecté ou des données de démo si non connecté
|
||||
$user = Auth::user();
|
||||
|
||||
// Données pour le dashboard (normalement récupérées en BDD)
|
||||
$stats = [
|
||||
'relaxation_time' => '45 min',
|
||||
'stress_status' => 'Stable',
|
||||
'last_diagnostic' => 'il y a 3 jours'
|
||||
];
|
||||
|
||||
return view('welcome', compact('user', 'stats'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
public function showLogin()
|
||||
{
|
||||
return view('auth.login');
|
||||
}
|
||||
|
||||
public function login(Request $request)
|
||||
{
|
||||
$credentials = $request->validate([
|
||||
'email' => ['required', 'email'],
|
||||
'password' => ['required'],
|
||||
]);
|
||||
|
||||
if (Auth::attempt($credentials)) {
|
||||
$request->session()->regenerate();
|
||||
return redirect()->intended('/');
|
||||
}
|
||||
|
||||
return back()->withErrors([
|
||||
'email' => 'Les identifiants fournis ne correspondent pas à nos enregistrements.',
|
||||
])->onlyInput('email');
|
||||
}
|
||||
|
||||
public function showRegister()
|
||||
{
|
||||
return view('auth.register');
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||
'password' => ['required', 'string', 'min:8', 'confirmed'],
|
||||
]);
|
||||
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
]);
|
||||
|
||||
Auth::login($user);
|
||||
|
||||
return redirect('/');
|
||||
}
|
||||
|
||||
public function logout(Request $request)
|
||||
{
|
||||
Auth::logout();
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
return redirect('/login');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\StressEvent;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class DiagnosticController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$events = StressEvent::all();
|
||||
return view('diagnostics.index', compact('events'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
// Logique pour calculer le score Holmes-Rahe
|
||||
$totalPoints = 0;
|
||||
if ($request->has('events')) {
|
||||
$totalPoints = StressEvent::whereIn('id', $request->events)->sum('points');
|
||||
}
|
||||
|
||||
// Ici on pourrait enregistrer le résultat dans une table 'diagnostic_results'
|
||||
// Pour l'instant on redirige avec le score
|
||||
return redirect()->back()->with('score', $totalPoints);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\EmotionRecord;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class EmotionController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$records = EmotionRecord::where('user_id', Auth::id())->latest()->get();
|
||||
return view('emotions.index', compact('records'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'emotion' => 'required|string',
|
||||
'intensity' => 'required|integer|min:1|max:5',
|
||||
'note' => 'nullable|string'
|
||||
]);
|
||||
|
||||
EmotionRecord::create([
|
||||
'user_id' => Auth::id(),
|
||||
'emotion' => $request->emotion,
|
||||
'intensity' => $request->intensity,
|
||||
'note' => $request->note
|
||||
]);
|
||||
|
||||
return redirect()->back()->with('success', 'Émotion enregistrée');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Validation\Rules\Password;
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('profile.index', [
|
||||
'user' => Auth::user(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
$validated = $request->validate([
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,' . $user->id],
|
||||
]);
|
||||
|
||||
$user->fill($validated);
|
||||
|
||||
if ($user->isDirty('email')) {
|
||||
$user->email_verified_at = null;
|
||||
}
|
||||
|
||||
$user->save();
|
||||
|
||||
return redirect()->route('profile.index')->with('status', 'profile-updated');
|
||||
}
|
||||
|
||||
public function updatePassword(Request $request)
|
||||
{
|
||||
$validated = $request->validateWithBag('updatePassword', [
|
||||
'current_password' => ['required', 'current_password'],
|
||||
'password' => ['required', Password::defaults(), 'confirmed'],
|
||||
]);
|
||||
|
||||
$request->user()->update([
|
||||
'password' => Hash::make($validated['password']),
|
||||
]);
|
||||
|
||||
return redirect()->route('profile.index')->with('status', 'password-updated');
|
||||
}
|
||||
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
$request->validateWithBag('userDeletion', [
|
||||
'password' => ['required', 'current_password'],
|
||||
]);
|
||||
|
||||
$user = $request->user();
|
||||
|
||||
Auth::logout();
|
||||
|
||||
$user->delete();
|
||||
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect('/');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\RelaxationActivity;
|
||||
use App\Models\Favorite;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class RelaxationController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$activities = RelaxationActivity::all();
|
||||
$favorites = Auth::check() ? Auth::user()->favoritedBy->pluck('id')->toArray() : [];
|
||||
return view('relaxation.index', compact('activities', 'favorites'));
|
||||
}
|
||||
|
||||
public function toggleFavorite($id)
|
||||
{
|
||||
$userId = Auth::id();
|
||||
$favorite = Favorite::where('user_id', $userId)
|
||||
->where('relaxation_activity_id', $id)
|
||||
->first();
|
||||
|
||||
if ($favorite) {
|
||||
$favorite->delete();
|
||||
return response()->json(['status' => 'removed']);
|
||||
} else {
|
||||
Favorite::create([
|
||||
'user_id' => $userId,
|
||||
'relaxation_activity_id' => $id
|
||||
]);
|
||||
return response()->json(['status' => 'added']);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user