🚧 💩 add coach management

issue_16_statistics_coach
Antoine PEREDERII 1 year ago
parent 9aa054b2b5
commit 00c772492b

@ -197,15 +197,91 @@ function registerUser(DataManager $model)
} }
} }
function displayManagementArray()
{
clearScreen();
echo "\n--- Menu Management Groupe Athlete ---\n";
echo "1. Ajouter un athlète\n";
echo "2. Supprimer un athlète\n";
echo "3. Voir tout les athlètes de la liste\n";
echo "0. Retour au menu du coach\n";
echo "Choisissez une option: ";
}
function ArrayMenu(DataManager $model)
{
do {
displayManagementArray();
$coachChoice = trim(fgets(STDIN));
switch ($coachChoice) {
case '1':
echo "Renseignez le surnom de l'utilisateur : ";
$username = trim(fgets(STDIN));
$model->coachMgr->addUser($model->userMgr->currentUser);
sleep(10);
break;
case '2':
echo "jsp pour l'instant pour supr un athlete !\n";
sleep(2);
break;
case '3':
$usersArray = $model->coachMgr->getUsersList();
if (!empty($usersArray)) {
foreach ($usersArray as $value) {
echo $value->to_String() . "\n";
}
} else {
echo "Aucun utilisateur dans la liste\n";
}
sleep(10);
break;
case '0':
return;
default :
echo "Option invalide. Veuillez réessayer.\n";
sleep(2);
break;
}
} while($coachChoice);
}
function CoachMenu(DataManager $model)
{
do {
displayCoachMenu();
$coachChoice = trim(fgets(STDIN));
switch ($coachChoice) {
case '1':
$userRole = $model->coachMgr->getRole();
if (!empty($userRole)) {
echo $userRole;
} else {
echo "Aucun utilisateur dans la liste\n";
}
sleep(2);
break;
case '2':
echo "jsp pour l'instant pour les stats !\n";
sleep(2);
return;
case '3':
echo "jsp pour l'instant pour les analyses !\n";
sleep(2);
return;
case '4':
ArrayMenu($model);
break;
case '0': // Quitter
return;
default:
echo "Option invalide. Veuillez réessayer.\n";
sleep(2);
break;
}
} while($coachChoice);
}
// const auth = getAuth();
// signInWithEmailAndPassword(auth, email, password)
// const auth = getAuth();
// signOut(auth).then(() => {
// // Sign-out successful.
// }).catch((error) => {
// // An error happened.
// });
while (true) { while (true) {
$loggedIn = false; $loggedIn = false;
@ -215,14 +291,19 @@ while (true) {
switch ($choice) { switch ($choice) {
case '1': // Se connecter case '1': // Se connecter
if (loginUser($model)) { $model->userMgr->login("Doe", "password123");
$loggedIn = true; $loggedIn = true;
}
// if (loginUser($model)) {
// $loggedIn = true;
// }
break; break;
case '2': // S'inscrire case '2': // S'inscrire
if (registerUser($model)) { $model->userMgr->login("athlete", "hello321");
$loggedIn = true; $loggedIn = true;
} // if (registerUser($model)) {
// $loggedIn = true;
// }
break; break;
case '0': // Quitter case '0': // Quitter
@ -263,9 +344,13 @@ while (true) {
break; break;
case '5': // Athlètes (pour les Coachs seulement) case '5': // Athlètes (pour les Coachs seulement)
displayCoachMenu(); if($model->userMgr->currentUser->getRole() instanceof \Model\Coach) {
$coachChoice = trim(fgets(STDIN)); CoachMenu($model);
// TODO: Ajouter la logique pour les options de coach ici. // TODO: Ajouter la logique pour les options de coach ici.
} else {
echo "Vous n'avez pas accès à cette section ! (il faut etre coach)\n";
sleep(2);
}
break; break;
case '6': // Paramètres case '6': // Paramètres
@ -289,4 +374,5 @@ while (true) {
} }
} }
} }
?> ?>

@ -4,6 +4,26 @@ namespace Model;
class Athlete extends Role { class Athlete extends Role {
// Attributs spécifiques a l'athlete si nécessaire // Attributs spécifiques a l'athlete si nécessaire
public function addUser(\Model\User $user): void
{
if($this->CheckAdd($user)){
$this->usersList[] = $user;
} else {
echo "Impossible de demander en ami autre que des athletes\n";
}
}
private function CheckAdd(User $user)
{
if($user instanceof \Model\Athlete){
return true;
} else {
return false;
}
}
public function getUsersList(): array{
return $this->usersList;
}
} }
?> ?>

@ -1,8 +1,12 @@
<?php <?php
namespace Model; namespace Model;
class Coach extends Role { abstract class Coach extends Role {
// Attributs spécifiques au Coach si nécessaire public abstract function addUser(User $user): void;
public abstract function CheckAdd(User $user) : bool;
// Méthode pour obtenir la liste des utilisateurs
public abstract function getUsersList(): ?array;
} }
?> ?>

@ -1,7 +1,30 @@
<?php <?php
namespace model; namespace Model;
class CoachAthlete extends Coach { class CoachAthlete extends Coach {
public function addUser(User $user): void {
if($this->CheckAdd($user)){
$this->usersList[] = $user;
} else {
echo "Impossible d'ajouter d'autres membres que des athletes !\n";
}
}
public function CheckAdd(User $user) : bool {
if($user instanceof \Model\Athlete){
return true;
} else {
return false;
}
}
public function getUsersList(): ?array {
if (!empty($this->usersList)) {
return $this->usersList;
} else {
echo "Vous n'avez pas de groupe\n";
return null;
}
}
} }

@ -1,8 +1,30 @@
<?php <?php
namespace Model; namespace Model;
use PhpParser\Node\Expr\Array_;
use Model\User;
use Model\Coach;
abstract class Role { abstract class Role {
// Attributs spécifiques au Coach si nécessaire private int $id;
protected array $usersList = [];
// Méthode pour ajouter un utilisateur à la liste
/**
* @param User $user
* @return void
*/
public abstract function addUser(User $user): void;
// public function removeUser(User $user): void {
// $this->usersList[]
// }
/**
* @return void
*/
public abstract function getUsersList(): ?array;
} }

@ -6,6 +6,7 @@ use Model\Role;
class User{ class User{
private int $id; private int $id;
private String $username;
private string $nom; private string $nom;
private string $prenom; private string $prenom;
private string $email; private string $email;
@ -18,6 +19,7 @@ class User{
public function __construct( public function __construct(
int $id, int $id,
String $username,
string $nom, string $nom,
string $prenom, string $prenom,
string $email, string $email,
@ -29,6 +31,7 @@ class User{
Role $role Role $role
) { ) {
$this->id = $id; $this->id = $id;
$this->username = $username;
$this->nom = $nom; $this->nom = $nom;
$this->prenom = $prenom; $this->prenom = $prenom;
$this->email = $email; $this->email = $email;
@ -48,6 +51,14 @@ class User{
$this->id = $id; $this->id = $id;
} }
public function getUsername(): int {
return $this->username;
}
public function setUsername(int $username): void {
$this->username = $username;
}
public function getNom(): string { public function getNom(): string {
return $this->nom; return $this->nom;
} }

@ -2,15 +2,61 @@
namespace Manager; namespace Manager;
use Model\Coach;
use Model\Role;
use Model\User; use Model\User;
use Network\IAuthService;
use Stub\AuthService; use Stub\AuthService;
class CoachManager class CoachManager
{ {
private User currentUser; private IAuthService $authService;
function __construct() { public ?User $currentUser = null; // Initialisé à null
if (isset(authService->currentUser)) { function __construct(IAuthService $authService)
this->currentUser = authService->currentUser; {
$this->authService = $authService;
// Assurez-vous que authService n'est pas null avant d'accéder à currentUser
if ($this->authService && $this->authService->currentUser) {
$this->currentUser = $this->authService->currentUser;
}
}
public function getRole(): ?Role
{
// Assurez-vous que currentUser n'est pas null avant d'accéder à getRole()
if ($this->currentUser && $this->currentUser->getRole()) {
return $this->currentUser->getRole();
}
return null;
}
public function getUsersList(): ?Role
{
// Assurez-vous que currentUser n'est pas null avant d'accéder à getRole()
if ($this->currentUser && $this->currentUser->getRole()->getUsersList()) {
return $this->currentUser->getRole();
}
return null;
} }
// faire validation !!!
public function addUser(User $user): void
{
// Assurez-vous que currentUser n'est pas null avant d'accéder à getRole()
if ($this->currentUser && $this->currentUser->getRole()) {
$this->currentUser->getRole()->addUser($user);
} elseif($this->currentUser && !$this->currentUser->getRole()) {
echo "Impossible d'ajouter l'utilisateur. role est null.";
} elseif(!$this->currentUser) {
echo "Impossible d'ajouter l'utilisateur. currentUser est null.";
} else {
echo "gros probleme !";
} }
}
} }
?>

@ -5,17 +5,19 @@ use Stub\AuthService;
use Manager\{CoachManager, DataManager, UserManager}; use Manager\{CoachManager, DataManager, UserManager};
use Stub\UserRepository; use Stub\UserRepository;
class StubData extends DataManager{ class StubData extends DataManager {
public function __construct(){ public function __construct()
{
$userRepository = new \Stub\UserRepository(); $userRepository = new \Stub\UserRepository();
$authService = new \Stub\AuthService($userRepository,new HashPassword()); $authService = new \Stub\AuthService($userRepository, new \Shared\HashPassword());
$this->userMgr = new UserManager($authService); $this->userMgr = new UserManager($authService);
// if($this->userMgr->currentUser->Role ) // is an instance of ...
$this->coachMgr->currentUser = new CoachManager($authService); // if($this->userMgr->currentUser->getRole() instanceof \Model\Coach){
// if(user.Role is instance of Coach) { $this->coachMgr = new CoachManager($authService);
// this->CoachMgr = new CoachManager();
// } // }
} }
} }
?> ?>

@ -4,6 +4,7 @@ namespace Stub;
use Model\Athlete; use Model\Athlete;
use Model\Coach; use Model\Coach;
use Model\CoachAthlete;
use Model\User; use Model\User;
use Repository\IUserRepository; use Repository\IUserRepository;
@ -11,11 +12,13 @@ class UserRepository implements IUserRepository {
private array $users = []; private array $users = [];
public function __construct() { public function __construct() {
$this->users[] = new User(1, "Doe", "John", "john.doe@example.com", "password123", 'M', 1.80, 75, new \DateTime("1985-05-15"), new Coach()); $this->users[] = new User(1, "Doe12", "Doe", "John", "john.doe@example.com", "password123", 'M', 1.80, 75, new \DateTime("1985-05-15"), new CoachAthlete());
$this->users[] = new User(2, "Smith", "Jane", "jane.smith@example.com", "secure456", 'F', 1.65, 60, new \DateTime("1990-03-10"), new Athlete()); $this->users[] = new User(2, "Smith", "Smith", "Jane", "jane.smith@example.com", "secure456", 'F', 1.65, 60, new \DateTime("1990-03-10"), new Athlete());
$this->users[] = new User(3, "Martin", "Paul", "paul.martin@example.com", "super789", 'M', 1.75, 68, new \DateTime("1988-08-20"), new Coach()); $this->users[] = new User(3, "Martin", "Martin", "Paul", "paul.martin@example.com", "super789", 'M', 1.75, 68, new \DateTime("1988-08-20"), new CoachAthlete());
$this->users[] = new User(4, "Brown", "Anna", "anna.brown@example.com", "test000", 'F', 1.70, 58, new \DateTime("1992-11-25"), new Athlete()); $this->users[] = new User(4, "Brown", "Brown", "Anna", "anna.brown@example.com", "test000", 'F', 1.70, 58, new \DateTime("1992-11-25"), new Athlete());
$this->users[] = new User(5, "Lee", "Bruce", "bruce.lee@example.com", "hello321", 'M', 1.72, 70, new \DateTime("1970-02-05"), new Athlete()); $this->users[] = new User(5, "Lee", "Lee", "Bruce", "bruce.lee@example.com", "hello321", 'M', 1.72, 70, new \DateTime("1970-02-05"), new Athlete());
$this->users[] = new User(6, "c", "c", "c", "coach@example.com", "c1", 'M', 1.80, 75, new \DateTime("1985-05-15"), new CoachAthlete());
$this->users[] = new User(7, "athlete", "athlete", "a", "athlete@example.com", "hello321", 'F', 1.55, 67, new \DateTime("1999-09-30"), new Athlete());
} }
public function getItemById(int $id): ?User { public function getItemById(int $id): ?User {
@ -65,12 +68,12 @@ class UserRepository implements IUserRepository {
} }
// should have type here // should have type here
public function AddItem( $user): void { public function AddItem($user): void {
$this->users[] = $user; $this->users[] = $user;
} }
// should have type here // should have type here
public function DeleteItem( $user): bool { public function DeleteItem($user): bool {
$index = array_search($user, $this->users); $index = array_search($user, $this->users);
if ($index !== false) { if ($index !== false) {
unset($this->users[$index]); unset($this->users[$index]);

@ -3,6 +3,7 @@ namespace Stub;
use Model\Coach; use Model\Coach;
use Model\Athlete; use Model\Athlete;
use Model\CoachAthlete;
use Model\User; use Model\User;
use Shared\Exception\NotImplementedException; use Shared\Exception\NotImplementedException;
use Network\IAuthService; use Network\IAuthService;
@ -12,7 +13,7 @@ class AuthService implements IAuthService {
private $userRepository; private $userRepository;
private $passwordHasher; private $passwordHasher;
private $currentUser; public $currentUser;
public function __construct(UserRepository $userRepository, IHashPassword $passwordHasher) { public function __construct(UserRepository $userRepository, IHashPassword $passwordHasher) {
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
@ -20,13 +21,13 @@ class AuthService implements IAuthService {
} }
public function login(string $username,string $password): ?User { public function login(string $username,string $password): ?User {
$user = $this->userRepository->GetItemByName($username,0,1); $this->currentUser = $this->userRepository->GetItemByName($username,0,1);
if ($user == null || !$user instanceof User) { if($this->currentUser == null || !$this->currentUser instanceof User) {
throw new \Exception('Unable to find user with that name'); throw new \Exception('Unable to find user with that name');
} }
if ($user->isValidPassword($password)) { if($this->currentUser->isValidPassword($password)) {
return this->currentUser = $user; return $this->currentUser;
} }
return null; return null;
} }
@ -41,6 +42,7 @@ class AuthService implements IAuthService {
throw new \Exception('User already exists'); throw new \Exception('User already exists');
} }
$username = $data['username'];
$prenom = $data['prenom']; $prenom = $data['prenom'];
$nom = $data['nom']; $nom = $data['nom'];
$email = $data['email']; $email = $data['email'];
@ -51,13 +53,14 @@ class AuthService implements IAuthService {
$roleName = $data['roleName']; $roleName = $data['roleName'];
$role = null; $role = null;
if($roleName == "Coach"){ if($roleName == "Coach"){
$role = new Coach(); $role = new CoachAthlete();
} }
else if($roleName == "Athlete"){ else if($roleName == "Athlete"){
$role = new Athlete(); $role = new Athlete();
} }
$user = new User( $user = new User(
random_int(0, 100), random_int(0, 100),
$username,
$nom, $nom,
$prenom, $prenom,
$email, $email,
@ -78,7 +81,11 @@ class AuthService implements IAuthService {
public function logoutUser(): void public function logoutUser(): void
{ {
print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! logout method not implemented !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); if ($this->currentUser) {
return; $this->currentUser = null; // Déconnexion en assignant null à currentUser
echo "Déconnexion réussie.\n";
} else {
echo "Aucun utilisateur connecté.\n";
}
} }
} }
Loading…
Cancel
Save