Compare commits

..
35 Commits
Author SHA1 Message Date
Giovanni 7299a177a2 fix wrong namespace use 2026-10-09 21:25:46 +02:00
Giovanni 67f2b516e8 fix wrong namespace use 2026-10-09 21:15:00 +02:00
Giovanni 64d065caad fix wrong namespace use 2026-10-09 21:04:15 +02:00
Giovanni ef0596b729 fix namespace and use spelling mistake 2026-10-09 20:42:34 +02:00
Giovanni b8420f08cd fix wrong namespace use 2026-10-09 20:09:01 +02:00
Giovanni e7baf34c4f fix wrong namespace use 2026-10-09 18:45:22 +02:00
Giovanni 7b4512bf27 fix wrong namespace use 2026-10-09 18:33:35 +02:00
Giovanni eb3e00c9ce remove unnecessary code 2026-10-04 13:04:33 +02:00
Giovanni 8e481dfae6 remove unnecessary code 2026-10-04 00:53:19 +02:00
Giovanni 23e61c6349 remove unnecessary code 2026-10-04 00:52:11 +02:00
Giovanni 74c5d2d5ce remove unnecessary code 2026-10-04 00:43:46 +02:00
Giovanni 62e2420105 remove unnecessary code 2026-10-04 00:36:38 +02:00
Giovanni c4ad3e0cdf remove unnecessary code 2026-10-04 00:29:05 +02:00
Giovanni 3d06596fea remove unnecessary code 2026-10-04 00:18:21 +02:00
Giovanni 30987fb582 remove unnecessary code 2026-10-03 23:01:08 +02:00
Giovanni 75bf1b966b remove unnecessary code 2026-10-03 22:58:42 +02:00
Giovanni 99f483b89c remove unnecessary code 2026-10-03 22:56:03 +02:00
Giovanni 58b471607c remove unnecessary code 2026-10-03 22:43:50 +02:00
Giovanni fc765959f9 remove unnecessary code 2026-10-03 22:35:57 +02:00
Giovanni 3d70814520 remove unnecessary code 2026-10-03 22:24:13 +02:00
Giovanni 840808daee remove unnecessary code 2026-10-03 22:03:22 +02:00
Giovanni 9619ce44e9 remove unnecessary code 2026-10-03 21:48:08 +02:00
Giovanni d469f1b5c8 remove unnecessary code 2026-10-03 21:41:04 +02:00
Giovanni 7f8db6d6ee remove unnecessary code 2026-10-03 21:28:50 +02:00
Giovanni 90dea59176 remove unnecessary code 2026-10-03 21:19:00 +02:00
Giovanni 9dd9f245f7 remove unnecessary code 2026-10-03 21:11:13 +02:00
Giovanni 02083d6ad3 remove unnecessary code 2026-10-03 21:01:09 +02:00
Giovanni fbbb563654 remove unnecessary code 2026-10-03 20:08:35 +02:00
Giovanni aa8663a416 remove unnecessary code 2026-10-03 20:06:33 +02:00
Giovanni 3feb126f07 remove unnecessary code 2026-10-03 20:02:35 +02:00
Giovanni 0ca1bb7e55 remove unnecessary code 2026-10-03 19:57:43 +02:00
Giovanni 7f4493666e remove unnecessary code 2026-10-03 19:31:13 +02:00
Giovanni 6cf9c8c4b2 remove unnecessary code 2026-10-03 19:12:58 +02:00
Giovanni ed38086d09 try to implement the global containerization 2026-10-03 18:42:21 +02:00
Giovanni e2b471312c refactor: move backend in apps/backend 2026-10-03 18:35:36 +02:00
204 changed files with 1618 additions and 1137 deletions

No files matched your search

Executable
+26
View File
@@ -0,0 +1,26 @@
DB_CONNECTION=
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
DB_ROOT_PASSWORD=
TYPESENSE_API_KEY=
#Mettre à 1 quand vous êtes en développement et à rien en production
DEV=
USER_ID=1000
GROUP_ID=1000
VITE_API_URL=http://localhost:80
VITE_BROADCASTER=reverb
VITE_REVERB_KEY=local
VITE_REVERB_HOST=127.0.0.1
VITE_REVERB_PORT=8080
VITE_FORCE_TLS=false
VITE_DISABLE_STATS=true
VITE_ENCRYPTED=false
VITE_CLUSTER=mt1
VITE_ENABLED_TRANSPORTS=['ws','wss']
+2 -27
View File
@@ -1,28 +1,3 @@
*.log
.DS_Store
.idea
.env
.env.backup
.env.production
.phpactor.json
.phpunit.result.cache
/.fleet
/.idea
/.nova
/.phpunit.cache
/.vscode
/.zed
/auth.json
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/storage/pail
/vendor
Homestead.json
Homestead.yaml
Thumbs.db
/public/**
!/public/index.php
backups/
Executable
+203
View File
@@ -0,0 +1,203 @@
# Gestion des bénévoles - Comité des fêtes de Beaupont
## Présentation du projet
L'association organise régulièrement des événements et projets mobilisant des bénévoles, mais sa coordination interne est rendue difficile par l'usage d'outils dispersés, et non communicants.
La création d'une plateforme web unique vise donc à centraliser et simplifier la gestion des utilisateurs, des rôles, des événements, des tâches et de la communication. Elle vise à améliorer la collaboration entre tous les bénévoles de l'association.
## Objectifs de l’application
L’application a pour objectifs principaux de :
- Gérer les utilisateurs et leurs rôles au sein de l’association.
- Organiser et planifier les événements et les tâches associées.
- Permettre aux bénévoles de s’inscrire en ligne aux événements et aux tâches.
- Offrir aux responsables un tableau de bord pour suivre la participation et les besoins en ressources humaines.
- Centraliser les informations et la communication autour des projets associatifs.
## Prérequis
Comme notre architecture se base sur l'utilisation de Docker, les seules prérequis pour la machine sur laquelle vous souhaitez installer cette application sont :
- [Docker](https://www.docker.com/)
- [Git](https://git-scm.com/)
## Installation
Pour installer ce projet il vous suffit de cloner le dépôt avec la commande suivante :
```bash
git clone <adresse du dépôt>
```
## Initialisation du projet
### 1. Configuration du fichier `.env` principal
1. Créez un fichier `.env` à la racine du projet.
2. Copiez le contenu du fichier `.env.example` dans le fichier `.env`.
3. Renseignez les variables suivantes :
| Variable | Description |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DB_CONNECTION` | Type de base de données utilisée (ex : `mysql`, `mariadb`) |
| `DB_HOST` | Adresse du serveur de base de données (ex : `localhost`, `db`) |
| `DB_PORT` | Port de la base de données (ex : `3306` pour MySQL/MariaDB) |
| `DB_DATABASE` | Nom de la base de données |
| `DB_USERNAME` | Nom d’utilisateur de la base de données |
| `DB_PASSWORD` | Mot de passe de l’utilisateur de la base de données |
| `DB_ROOT_PASSWORD` | Mot de passe du compte root de la base de données |
| `DEV` | Mettre `1` en environnement de développement, laisser vide sinon. |
| `VITE_API_URL` | URL du frontend hébergé et exposé par le conteneur Nginx (par défaut sur le port 80) |
### 2. Configuration du fichier `.env` php
Répétez la même opération pour le fichier `docker/php/.env` en copiant depuis `docker/php/.env.example`.
De plus, un utilisateur administrateur est automatiquement créé avec les informations suivantes :
- **Prénom :** `admin`
- **Nom :** `admin`
- **Adresse e-mail :** `admin@mail.com`
- **Mot de passe :** `admin`
- **Numéro de téléphone :** `0909090909`
> Il est bien sûr possible de modifier ces valeurs dans le fichier `docker/php/.env` avant le premier lancement du seeder, en utilisant les variables : `ADMIN_NAME`, `ADMIN_LASTNAME`, `ADMIN_MAIL`, `ADMIN_PASSWORD` et `ADMIN_PHONE_NUMBER`
### 3. Note importante
> ⚠️ Si vous êtes sous **Windows**, assurez-vous que tous les fichiers `.sh` utilisent des fins de ligne **LF** et non **CRLF**, sous peine d’erreurs lors de l’exécution des scripts.
## Lancement
Une fois la configuration terminée :
1. Ouvrez un terminal.
2. Placez-vous à la racine du projet.
3. Exécutez les commandes suivantes dans l'ordre :
```bash
docker compose down -v
```
> Arrête et supprime les conteneurs existants ainsi que les volumes associés.
> Cette étape permet de repartir sur une base propre.
```bash
docker compose up --build -d
```
> Reconstruit les images Docker et démarre l’ensemble des services en arrière-plan.
## Point technique
### 1. Le nommage
Nous avons adopté une convention de nommage en **camelCase** pour les variables, fonctions et fichiers JavaScript côté frontend.
Pour les composants React, nous utilisons la convention **PascalCase** afin de les différencier des éléments HTML.
Côté backend (Laravel), nous respectons les conventions PHP :
- **camelCase** pour les variables et méthodes
- **PascalCase** pour les classes (Controllers, Models, Policies, etc.)
Les noms sont choisis de manière explicite et descriptive afin de faciliter la compréhension du code et sa maintenance.
### 2. Les commentaires
Nous avons fait le choix de limiter l’utilisation des commentaires dans le code. En effet, nous privilégions un code clair, lisible et auto-documenté, notamment grâce à :
- un nommage explicite des variables, fonctions et classes
- l’utilisation du typage lorsque cela est possible
- une structure de projet organisée
- une documentation externe (README, Storybook, Bruno)
Les commentaires sont donc utilisés uniquement lorsque cela apporte une réelle valeur ajoutée, par exemple pour expliquer une logique complexe, un choix technique spécifique ou un comportement non évident.
### 3. La documentation
La documentation du projet est assurée à plusieurs niveaux :
- Un **README** structuré expliquant l’installation, la configuration et le fonctionnement global
- Une documentation des routes API via **Bruno**
- L’utilisation de **Storybook** pour documenter et tester visuellement les composants UI
### 4. La programmation défensive
Nous avons appliqué la programmation défensive afin de rendre notre application plus robuste, sécurisée et fiable face aux erreurs potentielles.
Dans notre projet, cela se traduit notamment par :
- Validation des données côté backend (Laravel) avant utilisation
- Vérification des entrées utilisateur afin d’éviter les données incohérentes ou malveillantes
- Gestion des rôles et permissions pour empêcher l’accès à des ressources non autorisées (utilisation de policies Laravel)
- Gestion des cas d’erreur (ex : utilisateur inexistant, tâche non trouvée, accès interdit) avec des réponses HTTP adaptées
- Utiliser des valeurs par défaut ou des vérifications avant utilisation pour éviter les erreurs inattendues
Enfin, grâce à Docker, nous limitons les problèmes liés à l’environnement (configuration, versions, dépendances), ce qui contribue également à une approche défensive globale du projet.
### 5. La gestion des erreurs
La gestion des erreurs est assurée à plusieurs niveaux :
- Backend Laravel : gestion des exceptions et retour de codes HTTP appropriés (200, 401, 404, 422, etc.)
- Frontend React : gestion des erreurs utilisateur (formulaires, affichage de messages d’erreur)
### 6. Le débogage
Le débogage a été réalisé grâce à plusieurs outils et méthodes :
- Utilisation des outils de développement du navigateur (console, réseau)
- Tests des routes API avec Bruno
- Logs côté docker et backend pour analyser le comportement du serveur
- Par exemple un membre de notre groupe rencontré quelques problèmes lors du lancement des conteneurs docker. Il a donc accédé aux logs du conteneur en question, qui indiquait un problème de clonage du repo git : `unable to access to {url du depot git}` (cela peut être du a un `Personal Access Token` expiré, ou une mauvaise connexion internet)
- Tests manuels réguliers lors du développement
### 7. L'architecture
Nous avons choisi d’adopter une architecture basée sur trois dépôts Git distincts, afin de séparer clairement les responsabilités et de faciliter la maintenance du projet :
- **Dépôt frontend** : contient le code de l’application développée en React
- **Dépôt backend** : contient le code de l’API développée avec Laravel
- **Dépôt Docker** : contient toute la configuration nécessaire à l’installation et au déploiement du projet sur n’importe quelle machine
Ce troisième dépôt permet de déployer l’ensemble de l’application de manière reproductible grâce à Docker, en centralisant la configuration des services.
Notre environnement de déploiement repose sur plusieurs conteneurs Docker :
- **Backend (Laravel)** : gestion de la logique métier et de l’API
- **Frontend (React)** : interface utilisateur (version temporaire pour le déploiement)
- **Base de données (MariaDB)** : stockage des données
- **Nginx** : serveur web utilisé pour exposer les services et gérer les requêtes HTTP
- **Typesense** : moteur de recherche utilisé pour améliorer les performances des recherches
- **Backup** : conteneur dédié à la sauvegarde de la base de données
- **Serveur WebSocket (Laravel Reverb)** : gestion des communications en temps réel
> Un schéma du fonctionnement global de l'application est disponible dans le dossier final de rendus.
### 8. Concepts de programmation
Nous avons appliqué plusieurs concepts de programmation :
- Programmation orientée objet (POO) côté backend (Laravel)
- Composants réutilisables côté frontend (React)
- Gestion d’état via les Contexts React
- API REST pour la communication entre frontend et backend
- Programmation modulaire pour une meilleure organisation du code
Pour améliorer la qualité et la robustesse du code, nous avons migré une partie du projet de JavaScript vers TypeScript.
Cette conversion permet :
- Moins d’erreurs grâce au typage statique.
- Un code plus lisible et documenté avec des interfaces claires.
- Une meilleure collaboration grâce à des types explicites.
Les interfaces TypeScript sont regroupées dans des fichiers dédiés, ce qui centralise les définitions et simplifie les mises à jour.
### 9. Tests unitaires
Nous avons mis en place quelques tests unitaires sur certaines fonctions utilitaires, par exemple :
- `utils/auth/login.test.js`
- `utils/auth/logout.test.js`
Suite à un échange avec notre professeur, il nous a été indiqué qu’un nombre limité de tests suffisait pour démontrer notre compréhension et notre mise en pratique de ce concept. En effet, tester l’ensemble du projet aurait demandé un temps de développement trop important au regard des contraintes du projet.
Nous avons donc choisi de nous concentrer sur quelques cas représentatifs, afin de valider notre approche des tests unitaires tout en respectant les délais impartis.
### 10. Intégration continu
Dans notre projet, l’intégration continue repose sur les outils et pratiques utilisés tout au long du développement.
Nous avons mis en place tous les outils qui permettent à termes l'intégration continu de l'application :
- Utilisation de Git pour gérer les versions du projet et intégrer régulièrement les modifications de chaque membre de l’équipe
- Utilisation de Docker pour garantir un environnement de développement et de déploiement identique et reproductible
- Tests réguliers des fonctionnalités à chaque ajout de code (tests manuels et tests API avec Bruno)
- Validation continue du projet, afin de s’assurer qu’une version fonctionnelle reste disponible à tout moment
-35
View File
@@ -1,35 +0,0 @@
<?php
namespace App\Providers;
use App\Models\Event;
use App\Models\User;
use App\Observers\EventObserver;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Route;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Route::middleware('web')->prefix('api')->group(base_path('routes/users.php'));
Route::middleware('web')->prefix('api')->group(base_path('routes/auth.php'));
Route::middleware('web')->prefix('api')->group(base_path('routes/events.php'));
Route::middleware('web')->prefix('api')->group(base_path('routes/notifications.php'));
Route::middleware('web')->prefix('api')->group(base_path('routes/channels.php'));
User::observe(UserObserver::class);
Event::observe(EventObserver::class);
}
}
File renamed without changes.
File renamed without changes.
+28
View File
@@ -0,0 +1,28 @@
*.log
.DS_Store
.env
.env.backup
.env.production
.phpactor.json
.phpunit.result.cache
/.fleet
/.idea
/.nova
/.phpunit.cache
/.vscode
/.zed
/auth.json
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/storage/pail
/vendor
Homestead.json
Homestead.yaml
Thumbs.db
/public/**
!/public/index.php
@@ -2,9 +2,9 @@
namespace App\Http\Controllers;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use \Illuminate\Http\JsonResponse;
class AuthController extends Controller
{
@@ -4,18 +4,17 @@ namespace App\Http\Controllers;
use App\Mail\EventParticipationCancelledMail;
use App\Models\Event;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
use App\Models\Task;
use App\Notifications\EventDeleted;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Log;
use Carbon\Carbon;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\Storage;
class EventsController extends Controller
{
public function create(Request $request): JsonResponse
@@ -2,9 +2,9 @@
namespace App\Http\Controllers;
use Exception;
use Illuminate\Http\Request;
use Typesense\Client;
use Exception;
class SearchController extends Controller
{
@@ -6,21 +6,21 @@ use App\Mail\TaskDateUpdateMail;
use App\Mail\TaskParticipationCancelledMail;
use App\Mail\VolunteerAssignToTaskMail;
use App\Mail\VolunteerUnassignToTaskMail;
use App\Models\Event;
use App\Models\Task;
use App\Models\User;
use App\Notifications\TaskDateUpdated;
use App\Notifications\TaskDeleted;
use App\Notifications\VolunteerAssignedToTask;
use App\Notifications\VolunteerUnassignedFromTask;
use App\Models\Event;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
use App\Models\Task;
use App\Models\User;
use App\Services\FormatDate;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Log;
use App\Services\FormatDate;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
class TasksController extends Controller
{
@@ -2,29 +2,29 @@
namespace App\Http\Controllers;
use App\Mail\CreateUserByAdminMail;
use App\Mail\DeactivateAccountMail;
use App\Mail\DeleteAccountMail;
use App\Mail\EmailChangeConfirmedMail;
use App\Mail\NotifyEmailChangeMail;
use App\Mail\RegisterMail;
use App\Mail\RequestEmailChangeMail;
use App\Mail\UpdatePasswordMail;
use App\Mail\UpdateRoleMail;
use App\Notifications\VolunteerRoleUpdated;
use App\Mail\CreateUserByAdminMail;
use App\Mail\DeactivateAccountMail;
use App\Mail\DeleteAccountMail;
use App\Mail\ValidateMail;
use Illuminate\Support\Facades\Notification;
use App\Models\User;
use App\Notifications\UserRegistered;
use App\Notifications\VolunteerRoleUpdated;
use App\Services\GetRole;
use App\Services\UserService;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use App\Services\UserService;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\Storage;
use Pest\Support\Str;
use Propaganistas\LaravelPhone\PhoneNumber;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -4,7 +4,6 @@ namespace App\Mail;
use App\Services\FormatDate;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -4,7 +4,6 @@ namespace App\Mail;
use App\Services\FormatDate;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -3,7 +3,6 @@
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -4,7 +4,6 @@ namespace App\Mail;
use App\Services\FormatDate;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
@@ -2,13 +2,12 @@
namespace App\Mail;
use App\Services\FormatDate;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
use App\Services\FormatDate;
class VolunteerUnassignToTaskMail extends Mailable
{
File renamed without changes.
File renamed without changes.
@@ -3,13 +3,14 @@
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
/** @use HasFactory<\Database\Factories\UserFactory> */
/** @use HasFactory<UserFactory> */
use HasFactory, Notifiable;
/**
@@ -2,13 +2,11 @@
namespace App\Notifications;
use App\Mail\EventParticipationCancelledMail;
use App\Models\Event;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Support\Facades\Mail;
use Illuminate\Notifications\Notification;
class EventDeleted extends Notification implements ShouldBroadcast
{
@@ -2,14 +2,12 @@
namespace App\Notifications;
use App\Mail\TaskDateUpdateMail;
use App\Models\Event;
use App\Models\Task;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Support\Facades\Mail;
use Illuminate\Notifications\Notification;
class TaskDateUpdated extends Notification implements ShouldBroadcast
{
@@ -2,14 +2,12 @@
namespace App\Notifications;
use App\Mail\TaskParticipationCancelledMail;
use App\Models\Event;
use App\Models\Task;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Support\Facades\Mail;
use Illuminate\Notifications\Notification;
class TaskDeleted extends Notification implements ShouldBroadcast
{
@@ -3,13 +3,10 @@
namespace App\Notifications;
use App\Models\User;
use App\Mail\RegisterMail;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Mail;
use Illuminate\Notifications\Notification;
class UserRegistered extends Notification implements ShouldBroadcast
{
@@ -2,14 +2,12 @@
namespace App\Notifications;
use App\Mail\VolunteerAssignToTaskMail;
use App\Models\Event;
use App\Models\Task;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Support\Facades\Mail;
use Illuminate\Notifications\Notification;
class VolunteerAssignedToTask extends Notification implements ShouldBroadcast
{
@@ -2,12 +2,10 @@
namespace App\Notifications;
use App\Mail\UpdateRoleMail;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Support\Facades\Mail;
use Illuminate\Notifications\Notification;
class VolunteerRoleUpdated extends Notification implements ShouldBroadcast
{
@@ -2,14 +2,12 @@
namespace App\Notifications;
use App\Mail\VolunteerUnassignToTaskMail;
use App\Models\Event;
use App\Models\Task;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Support\Facades\Mail;
use Illuminate\Notifications\Notification;
class VolunteerUnassignedFromTask extends Notification implements ShouldBroadcast
{
File renamed without changes.
File renamed without changes.
@@ -2,9 +2,7 @@
namespace App\Policies;
use App\Models\Event;
use App\Models\User;
use Illuminate\Auth\Access\Response;
class EventsPolicy
{
@@ -2,9 +2,7 @@
namespace App\Policies;
use App\Models\Task;
use App\Models\User;
use Illuminate\Auth\Access\Response;
class TasksPolicy
{
@@ -3,7 +3,6 @@
namespace App\Policies;
use App\Models\User;
use Illuminate\Auth\Access\Response;
class UsersPolicy
{
+39
View File
@@ -0,0 +1,39 @@
<?php
namespace App\Providers;
use App\Models\Event;
use App\Models\User;
use App\Observers\EventObserver;
use App\Observers\UserObserver;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void {
Route::middleware('web')->prefix('api')
->group($this->app->basePath('routes/users.php'));
Route::middleware('web')->prefix('api')
->group($this->app->basePath('routes/auth.php'));
Route::middleware('web')->prefix('api')
->group($this->app->basePath('routes/events.php'));
Route::middleware('web')->prefix('api')
->group($this->app->basePath('routes/notifications.php'));
Route::middleware('web')->prefix('api')
->group($this->app->basePath('routes/channels.php'));
User::observe(UserObserver::class);
Event::observe(EventObserver::class);
}
}
File renamed without changes.
File renamed without changes.
@@ -2,9 +2,8 @@
namespace App\Services;
use App\Models\User;
use App\Models\Event;
use Illuminate\Support\Facades\Cache;
use App\Models\User;
use Typesense\Client;
class TypesenseService
@@ -25,7 +24,6 @@ class TypesenseService
]);
}
private function ensureCollectionsExist(): void
{
static $checked = false;
@@ -95,7 +93,6 @@ class TypesenseService
}
}
public function upsertUser(User $user): void
{
$this->ensureCollectionsExist();
@@ -2,7 +2,6 @@
namespace App\Services;
use App\Models\User;
use Illuminate\Support\Facades\Log;
class UserService
{
+1 -1
View File
@@ -11,7 +11,7 @@ require __DIR__.'/vendor/autoload.php';
// Bootstrap Laravel and handle the command...
/** @var Application $app */
$app = require_once __DIR__.'/bootstrap/app.php';
$app = require_once __DIR__ . '/bootstrap/app.php';
$status = $app->handleCommand(new ArgvInput);
@@ -6,7 +6,7 @@ use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
web: __DIR__ . '/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
channels: __DIR__.'/../routes/channels.php',
File renamed without changes.
+7
View File
@@ -0,0 +1,7 @@
<?php
return [
app\Providers\AppServiceProvider::class,
app\Providers\BroadcastServiceProvider::class,
app\Providers\GateServiceProvider::class,
];
File renamed without changes.
View File
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -2,10 +2,11 @@
namespace Database\Factories;
use App\Models\Event;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Event>
* @extends \Illuminate\Database\Eloquent\Factories\Factory<Event>
*/
class EventFactory extends Factory
{
@@ -2,12 +2,13 @@
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
* @extends \Illuminate\Database\Eloquent\Factories\Factory<User>
*/
class UserFactory extends Factory
{
@@ -1,11 +1,12 @@
<?php
namespace Database\Migrations;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
return new class extends Migration {
/**
* Run the migrations.
*/
@@ -6,7 +6,7 @@ use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
public function run(): void
{
if (config('app.dev') == 1) {
$this->call(DevSeeder::class);
@@ -15,4 +15,3 @@ class DatabaseSeeder extends Seeder
}
}
}
@@ -5,14 +5,10 @@ namespace Database\Seeders;
use App\Models\Event;
use App\Models\User;
use App\Services\TypesenseService;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DevSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$typesense = app(TypesenseService::class);
@@ -38,4 +34,3 @@ class DevSeeder extends Seeder
Event::factory()->count(10)->create();
}
}
@@ -8,9 +8,6 @@ use Illuminate\Database\Seeder;
class ProdSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$typesense = app(TypesenseService::class);
@@ -32,4 +29,3 @@ class ProdSeeder extends Seeder
$typesense->upsertUser($admin);
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -15,6 +15,6 @@ require __DIR__.'/../vendor/autoload.php';
// Bootstrap Laravel and handle the request...
/** @var Application $app */
$app = require_once __DIR__.'/../bootstrap/app.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
$app->handleRequest(Request::capture());
File renamed without changes.
Loaded 100 of 204 files, more files were not shown because too many files have changed in this diff. Show more