diff --git a/app/Repositories/Meet.php b/app/Repositories/Meet.php index 267df26e..34c66f98 100644 --- a/app/Repositories/Meet.php +++ b/app/Repositories/Meet.php @@ -8,10 +8,4 @@ class Meet extends Repository { //protected static $table = 'pbx_meet'; - public static function getMeetById(string $id): array|bool - { - $query = 'SELECT * FROM pbx_meet WHERE meet_id = :meet_id'; - - return self::query($query, ["meet_id" => $id], "one"); - } } diff --git a/app/controllers/MeetController.php b/app/controllers/MeetController.php index cd3e9f8d..a81a3a57 100644 --- a/app/controllers/MeetController.php +++ b/app/controllers/MeetController.php @@ -65,16 +65,24 @@ class MeetController $people['people_id'] = $body['data']['id']; self::$logger->debug('Gonna get by id', true); - $m = Meet::getMeetById($body['data']['roomName']); - //$meet = null; + + // if meet does't exist, create it + $m = Meet::dinamicSelectQuery('pbx_meet', ['*'], ['meet_id' => $body['data']['roomName']], 'one'); if (!$m) { self::$logger->debug("Meet not found. Needs to bee created", true); $meet = Meet::dinamicInsertQuery('pbx_meet', $dados); } - self::$logger->debug("Gonna create meet people", true); - $p = Meet::dinamicInsertQuery('pbx_meet_people', $people); + + // verifies if the person is already in meet before insert him + $p = Meet::dinamicSelectQuery('pbx_meet_people', ['*'], $people, 'one'); + self::$logger->debug("person: " . print_r($p, true), true); + + if (!$p) { + self::$logger->debug("Gonna create meet people", true); + $peopleJoined = Meet::dinamicInsertQuery('pbx_meet_people', $people); + } if ($dados) { - $response->getBody()->write(json_encode(['status' => true, 'data' => ['meet' => ['created' => $meet ?? 'OK'], 'user' => ['join' => $p ?? 'yes']]])); + $response->getBody()->write(json_encode(['status' => true, 'data' => ['meet' => ['created' => $meet ?? 0], 'user' => ['join' => $peopleJoined ?? 'Person already in meet.']]])); } else { $response->getBody()->write(json_encode(['status' => false, 'data' => $dados])); } @@ -90,17 +98,30 @@ class MeetController $this->serverRequest(); $body = json_decode($request->getBody()->getContents(), true); - $mp = Meet::find(['nome' => $body['roomName']]); + //validation: must have ort_id and data must have the folowing array keys: + $validator = new Validator(); + $validator->mapFieldsRules([ + "org_id" => ['integer', 'required', ['min', 1]], + "roomName" => ['required'] + ]); + $validator = $validator->withData($body); + if (!$validator->validate()) { + $response->getBody() + ->write(json_encode($validator->errors())); + return $response->withStatus(422); + } + + $mp = Meet::dinamicSelectQuery('pbx_meet', ['*'], ['nome' => $body['roomName']], 'one'); $meet = null; if ($mp) { - $meet = Meet::delete(['id' => $mp->id]); - MeetPeople::delete(['meet_id' => $body['roomName']]); + $meet = Meet::dinamicDeleteQuery("pbx_meet", ['meet_id' => $mp['meet_id']]); + Meet::dinamicDeleteQuery("pbx_meet_people", ['meet_id' => $mp['meet_id']]); } if ($meet) { $response->getBody()->write(json_encode(['status' => true, 'data' => ['meet' => ['deleted' => $meet ?? 'OK']]])); } else { - $response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nao foi possivel exluir participant']])); + $response->getBody()->write(json_encode(['status' => false, 'data' => ['message' => 'Nao foi possivel exluir participante']])); } } catch (Exception $e) { $response->getBody()->write(json_encode(['status' => false, 'data' => ["message" => "Nao foi possivel realizar a consulta! " . $e->getMessage()]])); diff --git a/app/core/Repository.php b/app/core/Repository.php index 14246ab9..5b3345ba 100644 --- a/app/core/Repository.php +++ b/app/core/Repository.php @@ -30,15 +30,15 @@ abstract class Repository self::setLog(); self::$logger->debug("Getting connection", true); $stmt = Connection::getInstance()->prepare($query); - self::$logger->debug("Biding values for $query\nwith params: " . print_r($params, true), true); foreach ($params as $key => $value) { - // menaging LIKE statement in query - if (strpos($query, 'SELECT') !== false && in_array($key, ['src', 'dst', 'entrada', 'fila', 'evento', 'nome'])) { + if (strpos($query, 'SELECT') !== FALSE && in_array($key, ['src', 'dst', 'entrada', 'fila', 'evento', 'nome'])) { $value = "%$value%"; + self::$logger->debug("treating value $key", true); } $stmt->bindValue(":$key", $value, (is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR)); } + self::$logger->debug("Biding values for $query\nwith params: " . print_r($params, true), true); $stmt->execute(); //selects the type of return @@ -76,6 +76,11 @@ abstract class Repository if (empty($value)) { continue; } + + if (in_array($key, ['src', 'dst', 'entrada', 'fila', 'evento', 'nome'])) { + $query .= " AND $key LIKE :$key"; + continue; + } $query .= " AND $key = :$key"; } @@ -83,7 +88,7 @@ abstract class Repository } /** Dinamicaly inserts a record into a table - * @param strng $table: table name + * @param string $table: table name * @param array $columns: associative array containing the fields and its values to be recorded * @return int|bool the number of rows modified by the database operation */ @@ -112,4 +117,21 @@ abstract class Repository return self::query($query, $columns, "count"); } + + public static function dinamicDeleteQuery(string $table, array $params): int|bool + { + if (!sizeof($params)) { + throw new Exception("Delete statement must have parameters!"); + } + + $query = "DELETE FROM $table WHERE 1 = 1 "; + foreach ($params as $key => $value) { + if (empty($value)) { + continue; + } + $query .= " AND $key = :$key"; + } + + return self::query($query, $params, 'count'); + } }