RogierBe / educom-webshop-basis-1699355256

0 stars 0 forks source link

Zorg dat een 'high'-level functies als 'processLogin' functionaliteit delegeert naar lagere functies #19

Open JeroenHeemskerk opened 10 months ago

JeroenHeemskerk commented 10 months ago

In tegenstelling tot issue #18 heeft deze functie een functienaam die breed genoeg om te verwachten dat er iemand wordt ingelogd https://github.com/RogierBe/educom-webshop-basis-1699355256/blob/f21e2261a5553f3bcb6300204e98bf28e022e76f/business/getRequestedPage/postPage/processRequest/processLogin.php#L3-L12 Echter in deze functie wordt er 2x naar de userfile gegaan, 1x om te kijken of de user al bestaat en 1x om de user te valideren. Ik zou dat in 1x doen en dan een "result" teruggeven. Door gebruik te maken van defines kan je resultaten teruggeven.

Funcites als validLogin is overigens een businessCode functie (en mogelijk doesEmailExist ook) en zou ik in een service laag file leggen, bijv: userService.php

define("RESULT_OK", 0);
define("RESULT_UNKNOWN_USER", -1);
define("RESULT_WRONG_PASSWORD", -2);

function validLogin($email, $password) {
   $user = findUserByEmail($email);
   if (empty($user)) {
       return array('result' => RESULT_UNKNOWN_USER);
   }
   if ($user['password'] != $password) {
       return array('result' => RESULT_WRONG_PASSWORD);
   }
   return array('result' => RESULT_OK, 'name' => $user['name']);
}

In zou processLogin dan zo opzetten


function processLogin($inputs, $errs){
   /* Ik mis hier een call naar een functie om te checken of velden niet leeg zijn: 
      $validationResult = validateLogin($inputs, $errs)
      if (!$validationResult['valid']) {
          return $validationResult['errs'];
      }
   */ 
   $user = validlogin($inputs['email'], $inputs['password']); // Dit is overigens een business code functie geen data functie!!
   switch ($user['result']) { 
     case RESULT_UNKNOWN_USER:
         $errs['email'] = 'Er is geen account geassocieerd met dit e-mailadres.'; 
         break;
     case RESULT_WRONG_PASSWORD:
         $errs['password'] = 'Onjuist wachtwoord.'; 
         break;
     case RESULT_OK; 
         $_SESSION['user'] = $user['name'];  // Ik zou dit in een util functie stoppen van sessionManager.php bijv. doLoginUser($user['name']);
         break;
   } 
   return($errs); 
 }