Procházet zdrojové kódy

User delete is now a soft delete

EduLascala před 1 měsícem
rodič
revize
8a578c4516

+ 5 - 0
controllers/CompanyWithUserController.php

@@ -55,6 +55,11 @@ class CompanyWithUserController
             $pdo = $GLOBALS['pdo'];
             $pdo->beginTransaction();
 
+            if ($this->userModel->isEmailActive((string)$body['email'])) {
+                $pdo->rollBack();
+                return ResponseLib::sendFail("Email already in use", [], "E_VALIDATE")->withStatus(400);
+            }
+
             $companyId = $this->companyModel->createCompany($body['company_name'], $body['cnpj'], 'a');
             $roleId = 1;
             $chk = $pdo->prepare('SELECT 1 FROM "role" WHERE role_id = :rid');

+ 4 - 0
controllers/RegisterController.php

@@ -48,6 +48,10 @@ class RegisterController
         $body['kyc'] = 0;
         $body['role_id'] = 2;
 
+        if ($this->userModel->isEmailActive((string)$body['email'])) {
+            return ResponseLib::sendFail("Email already in use", [], "E_VALIDATE")->withStatus(400);
+        }
+
         $userData = $this->userModel->createUser($body);
 
         if (!$userData) {

+ 1 - 1
controllers/UserDeleteController.php

@@ -38,6 +38,6 @@ class UserDeleteController
 
         return $deleted
             ? ResponseLib::sendOk(['deleted' => true])
-            : ResponseLib::sendFail("Failed to Delete User or User Not Found", [], "E_DATABASE")->withStatus(204);
+            : ResponseLib::sendFail("User not found", [], "E_NOT_FOUND")->withStatus(204);
     }
 }

+ 1 - 1
migrations/migrations_v1.sql

@@ -29,7 +29,7 @@ CREATE TABLE "status" (
 CREATE TABLE "user" (
     "user_id" SERIAL PRIMARY KEY,
     "user_name" TEXT NOT NULL,
-    "user_email" TEXT NOT NULL UNIQUE,
+    "user_email" TEXT NOT NULL,
     "user_password" TEXT NOT NULL,
     "user_phone" TEXT NOT NULL,
     "user_address" TEXT NOT NULL,

+ 13 - 5
models/UserModel.php

@@ -48,12 +48,19 @@ class UserModel
         return null;
     }
 
+    public function isEmailActive(string $email): bool
+    {
+        $stmt = $this->pdo->prepare('SELECT 1 FROM "user" WHERE user_email = :email AND user_flag = \'a\'');
+        $stmt->execute(['email' => $email]);
+        return (bool)$stmt->fetchColumn();
+    }
+
     public function createUser(array $data, string $flag = 'a')
     {
         // Verifica se email já existe
-        $stmt = $this->pdo->prepare('SELECT user_id FROM "user" WHERE user_email = :email');
+        $stmt = $this->pdo->prepare('SELECT 1 FROM "user" WHERE user_email = :email AND user_flag = \'a\'');
         $stmt->execute(['email' => $data['email']]);
-        if ($stmt->fetch()) {
+        if ($stmt->fetchColumn()) {
             return false;
         }
 
@@ -169,14 +176,15 @@ class UserModel
 
     public function deleteUserById(int $userId, int $companyId): bool
     {
-        $stmt = $this->pdo->prepare("DELETE FROM \"user\" WHERE user_id = :user_id AND company_id = :company_id");
-        return $stmt->execute(['user_id' => $userId, 'company_id' => $companyId]);
+        $stmt = $this->pdo->prepare("UPDATE \"user\" SET user_flag = 'd' WHERE user_id = :user_id AND company_id = :company_id AND user_flag = 'a'");
+        $stmt->execute(['user_id' => $userId, 'company_id' => $companyId]);
+        return $stmt->rowCount() > 0;
     }
 
     public function updateEmail(int $userId, string $newEmail): bool
     {
         // check duplicate
-        $chk = $this->pdo->prepare('SELECT 1 FROM "user" WHERE user_email = :email AND user_id <> :uid');
+        $chk = $this->pdo->prepare('SELECT 1 FROM "user" WHERE user_email = :email AND user_id <> :uid AND user_flag = \'a\'');
         $chk->execute(['email' => $newEmail, 'uid' => $userId]);
         if ($chk->fetchColumn()) {
             return false;