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:
Azmog
2026-03-11 16:27:01 +01:00
commit e3da625927
158 changed files with 25139 additions and 0 deletions
@@ -0,0 +1,23 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->string('nom')->unique();
$table->text('description')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('roles');
}
};
@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('utilisateurs', function (Blueprint $table) {
$table->id();
$table->string('nom');
$table->string('prenom');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->foreignId('role_id')->constrained('roles');
$table->boolean('est_actif')->default(true);
$table->boolean('consentement_rgpd')->default(false);
$table->timestamps();
$table->softDeletes();
});
}
public function down(): void
{
Schema::dropIfExists('utilisateurs');
}
};
@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('emotions', function (Blueprint $table) {
$table->id();
$table->string('nom');
$table->string('couleur', 7);
$table->string('icone')->nullable();
$table->tinyInteger('niveau');
$table->foreignId('parent_id')->nullable()->constrained('emotions');
$table->boolean('est_actif')->default(true);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('emotions');
}
};
@@ -0,0 +1,23 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('trackers', function (Blueprint $table) {
$table->id();
$table->foreignId('utilisateur_id')->constrained('utilisateurs')->onDelete('cascade');
$table->string('nom')->default('Mon journal');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('trackers');
}
};
@@ -0,0 +1,26 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('saisie_trackers', function (Blueprint $table) {
$table->id();
$table->foreignId('tracker_id')->constrained('trackers')->onDelete('cascade');
$table->foreignId('emotion_id')->constrained('emotions');
$table->tinyInteger('intensite');
$table->text('note')->nullable();
$table->dateTime('date_saisie');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('saisie_trackers');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('feeds', function (Blueprint $table) {
$table->id();
$table->string('titre');
$table->string('slug')->unique();
$table->longText('contenu');
$table->string('image_url')->nullable();
$table->boolean('est_publie')->default(false);
$table->foreignId('auteur_id')->constrained('utilisateurs');
$table->integer('ordre')->default(0);
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('feeds');
}
};
@@ -0,0 +1,25 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('contacts_urgence', function (Blueprint $table) {
$table->id();
$table->foreignId('utilisateur_id')->constrained('utilisateurs')->onDelete('cascade');
$table->string('nom');
$table->string('telephone');
$table->string('relation');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('contacts_urgence');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('audits', function (Blueprint $table) {
$table->id();
$table->foreignId('utilisateur_id')->nullable()->constrained('utilisateurs');
$table->string('action');
$table->string('table_cible');
$table->unsignedBigInteger('enregistrement_id')->nullable();
$table->json('anciennes_valeurs')->nullable();
$table->json('nouvelles_valeurs')->nullable();
$table->string('ip_address', 45)->nullable();
$table->timestamp('created_at')->nullable();
});
}
public function down(): void
{
Schema::dropIfExists('audits');
}
};
@@ -0,0 +1,22 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('cache', function (Blueprint $table) {
$table->string('key')->primary();
$table->mediumText('value');
$table->integer('expiration');
});
}
public function down(): void
{
Schema::dropIfExists('cache');
}
};
@@ -0,0 +1,25 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('sessions', function (Blueprint $table) {
$table->string('id')->primary();
$table->unsignedBigInteger('user_id')->nullable()->index();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->longText('payload');
$table->integer('last_activity')->index();
});
}
public function down(): void
{
Schema::dropIfExists('sessions');
}
};