From af788c2c1d46599ab00430480e80321834f118ae Mon Sep 17 00:00:00 2001 From: victorMagalhaesPacheco Date: Fri, 10 Jun 2022 14:02:47 -0300 Subject: [PATCH 01/21] Set pacotes php dockerfile 7.3 --- phpdocker/php-fpm/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpdocker/php-fpm/Dockerfile b/phpdocker/php-fpm/Dockerfile index 33257d9..bc6ba02 100644 --- a/phpdocker/php-fpm/Dockerfile +++ b/phpdocker/php-fpm/Dockerfile @@ -6,7 +6,7 @@ ARG DEBIAN_FRONTEND=noninteractive # Install selected extensions and other stuff RUN apt-get update \ - && apt-get -y --no-install-recommends install php-memcached php7.3-pgsql php-xdebug php7.3-phpdbg php7.3-memcache php7.3-memcached \ + && apt-get -y --no-install-recommends install php7.3-pgsql php7.3-phpdbg php7.3-memcache php7.3-memcached \ && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* # Install git From 362c2155d4f3e7e1e6156c4fa634b0dba63f3135 Mon Sep 17 00:00:00 2001 From: JuinEsp Date: Fri, 10 Jun 2022 14:24:47 -0300 Subject: [PATCH 02/21] Atualizado nome do container e readme --- README.md | 7 +++++++ docker-compose.yml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 99f228a..2f67753 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ +# Instrução para instalação +- clonar projeto com git clone https://github.com/EscolaDeSaudePublica/sagu-api.git +- cd sagu-api. +- rodar o comando docker-compose exec php-fpm composer install para instalar as dependencias do composer +- Abrir navegador em http://localhost:8085/ + + # Lumen PHP Framework [![Build Status](https://travis-ci.org/laravel/lumen-framework.svg)](https://travis-ci.org/laravel/lumen-framework) diff --git a/docker-compose.yml b/docker-compose.yml index 6d99d26..158003b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,7 +20,7 @@ services: php-fpm: build: phpdocker/php-fpm - container_name: sagu-api-php-fpm + container_name: saguapi working_dir: /var/www volumes: - .:/var/www From 736f47e2b8eefe1b3d4aac16b5cfa1b21f3b9abf Mon Sep 17 00:00:00 2001 From: Juin da Esp <100617577+JuinEsp@users.noreply.github.com> Date: Fri, 10 Jun 2022 14:30:59 -0300 Subject: [PATCH 03/21] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2f67753..146f717 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Instrução para instalação - clonar projeto com git clone https://github.com/EscolaDeSaudePublica/sagu-api.git -- cd sagu-api. -- rodar o comando docker-compose exec php-fpm composer install para instalar as dependencias do composer -- Abrir navegador em http://localhost:8085/ +- `cd sagu-api`. +- rodar o comando `docker-compose exec php-fpm composer install `para instalar as **dependências do composer** +- Abrir navegador em _http://localhost:8085/_ # Lumen PHP Framework From 93dadb9beb0bfcebf05fd57a0305b191e8d39609 Mon Sep 17 00:00:00 2001 From: Juin da Esp <100617577+JuinEsp@users.noreply.github.com> Date: Fri, 10 Jun 2022 15:38:33 -0300 Subject: [PATCH 04/21] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 146f717..b624a28 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,16 @@ - rodar o comando `docker-compose exec php-fpm composer install `para instalar as **dependências do composer** - Abrir navegador em _http://localhost:8085/_ +# Configuração +- `docker-compose exec php-fpm php artisan key:generate`. Se não ouver o pacote lumem-generate instalar seguindo as instruções do [link](https://github.com/flipboxstudio/lumen-generator/tree/6.0) +- Depois da permissão nas pasta storage com os seguintes comandos + - `docker exec -it saguapi bash` + - `chown -R $USER:www-data storage` + - `chmod -R 775 storage` + - `chmod -R 775 bootstrap` + + + # Lumen PHP Framework From 327bf61148651fde267956d5189a665656160b16 Mon Sep 17 00:00:00 2001 From: Juin da Esp <100617577+JuinEsp@users.noreply.github.com> Date: Fri, 10 Jun 2022 15:39:45 -0300 Subject: [PATCH 05/21] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b624a28..b3f0611 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - Depois da permissão nas pasta storage com os seguintes comandos - `docker exec -it saguapi bash` - `chown -R $USER:www-data storage` + - `chown -R $USER:www-data bootstrap` - `chmod -R 775 storage` - `chmod -R 775 bootstrap` From 22b5dc122553632ee9bbf84ef0f15bb4f90b5fa4 Mon Sep 17 00:00:00 2001 From: Juin da Esp <100617577+JuinEsp@users.noreply.github.com> Date: Mon, 13 Jun 2022 09:43:16 -0300 Subject: [PATCH 06/21] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b3f0611..713d795 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,8 @@ - Abrir navegador em _http://localhost:8085/_ # Configuração -- `docker-compose exec php-fpm php artisan key:generate`. Se não ouver o pacote lumem-generate instalar seguindo as instruções do [link](https://github.com/flipboxstudio/lumen-generator/tree/6.0) +- criar um arquivo .env com base no .env.example +- `docker-compose exec php-fpm php artisan key:generate`. Se não ouver o pacote lumem-generate instalar seguindo as instruções do [link](https://github.com/flipboxstudio/lumen-generator/tree/6.0) - Depois da permissão nas pasta storage com os seguintes comandos - `docker exec -it saguapi bash` - `chown -R $USER:www-data storage` From 284372c09509f4da274373dbe7009ce9b8f61e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20Magalh=C3=A3es=20Pacheco?= Date: Fri, 8 Jul 2022 09:34:14 -0300 Subject: [PATCH 07/21] Implementa endpoint para cadastro de pessoas (alunos) (#41) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * endpoint save persons * refatora endpoint no cadastro de pessoas * adicionando testes no cadastro de pessoa * atualiza namespace tests * refatoração e adiciona validação * autenticação api key public * armazenando cadastro de usuário * atualiza testes * implementa json de oferta de cursos e turmas * adiciona ordenação por descrição nas ofertas e turmas * retorna turma em período vigente de inscrições * adiciona namespace correto para o teste * adiciona testes para endpoint retorno de ofertas de cursos * tratamento dados vazios na requisição * atualiza retorno de erro * adicionando transaction commit no serviço * Refatora PersonService * adiciona lib validação e faker dados * Refatora teste e adiciona dados faker * adiciona miolousername no person * refatora teste * Salva categoria profissional no custom field * retorna categoria profissional no cadastro * Atualiza teste retorno categoria profissional --- app/DAO/Basico/MioloCustomValueDAO.php | 35 +++ app/DAO/DocumentoDAO.php | 34 +++ .../EnsinoPesquisaExtensao/OfertaCursoDAO.php | 25 ++ app/DAO/EnsinoPesquisaExtensao/TurmaDAO.php | 31 +++ app/DAO/LocationDAO.php | 24 ++ app/DAO/PersonDAO.php | 125 +++++++++- app/DAO/UserDAO.php | 29 +++ .../OfertaCursoController.php | 15 ++ .../TurmaController.php | 15 ++ app/Http/Controllers/PersonController.php | 36 +++ .../Middleware/ApiKeyPublicAuthMiddleware.php | 37 +++ .../EnsinoPesquisaExtensao/OfertaCurso.php | 10 + app/Model/EnsinoPesquisaExtensao/Turma.php | 11 + app/Model/Person.php | 72 +++++- app/Model/User.php | 11 + app/Services/Basic/PersonService.php | 101 ++++++++ bootstrap/app.php | 5 +- composer.json | 12 +- resources/lang/en/auth.php | 19 ++ resources/lang/en/pagination.php | 19 ++ resources/lang/en/passwords.php | 22 ++ resources/lang/en/validation.php | 151 ++++++++++++ resources/lang/pt-BR/auth.php | 19 ++ resources/lang/pt-BR/pagination.php | 19 ++ resources/lang/pt-BR/passwords.php | 22 ++ resources/lang/pt-BR/validation.php | 121 ++++++++++ routes/web.php | 26 +++ tests/Basico/PersonTest.php | 219 ++++++++++++++++++ .../OfertaCursoTest.php | 32 +++ 29 files changed, 1289 insertions(+), 8 deletions(-) create mode 100644 app/DAO/Basico/MioloCustomValueDAO.php create mode 100644 app/DAO/DocumentoDAO.php create mode 100644 app/DAO/EnsinoPesquisaExtensao/OfertaCursoDAO.php create mode 100644 app/DAO/EnsinoPesquisaExtensao/TurmaDAO.php create mode 100644 app/DAO/LocationDAO.php create mode 100644 app/Http/Controllers/EnsinoPesquisaExtensao/OfertaCursoController.php create mode 100644 app/Http/Controllers/EnsinoPesquisaExtensao/TurmaController.php create mode 100644 app/Http/Middleware/ApiKeyPublicAuthMiddleware.php create mode 100644 app/Model/EnsinoPesquisaExtensao/OfertaCurso.php create mode 100644 app/Model/EnsinoPesquisaExtensao/Turma.php create mode 100644 app/Services/Basic/PersonService.php create mode 100644 resources/lang/en/auth.php create mode 100644 resources/lang/en/pagination.php create mode 100644 resources/lang/en/passwords.php create mode 100644 resources/lang/en/validation.php create mode 100644 resources/lang/pt-BR/auth.php create mode 100644 resources/lang/pt-BR/pagination.php create mode 100644 resources/lang/pt-BR/passwords.php create mode 100644 resources/lang/pt-BR/validation.php create mode 100644 tests/Basico/PersonTest.php create mode 100644 tests/EnsinoPesquisaExtensao/OfertaCursoTest.php diff --git a/app/DAO/Basico/MioloCustomValueDAO.php b/app/DAO/Basico/MioloCustomValueDAO.php new file mode 100644 index 0000000..196a725 --- /dev/null +++ b/app/DAO/Basico/MioloCustomValueDAO.php @@ -0,0 +1,35 @@ + $personId, + 'custom_field_id' => $field + ] + ); + + if (count($select)) { + return $select[0]->value; + } + } + + public static function insert($personId, $value) + { + $result = DB::insert('insert into public.miolo_custom_value (customized_id, custom_field_id, value) values (?, ?, ?)', + [ + $personId, + self::FIELD1, + $value + ]); + } +} \ No newline at end of file diff --git a/app/DAO/DocumentoDAO.php b/app/DAO/DocumentoDAO.php new file mode 100644 index 0000000..00694ed --- /dev/null +++ b/app/DAO/DocumentoDAO.php @@ -0,0 +1,34 @@ + $personId, + 'documenttypeid' => $typeDocument + ] + ); + + if (count($select)) { + return $select[0]->content; + } + } + + public static function insertDocumento($personId, $tipoDocumento, $content) + { + return DB::insert("insert into basdocument (personid, documenttypeid, content, isDelivered) values (?, ? , ?, ?)", [ + $personId, + $tipoDocumento, + $content, + 't' + ]); + } +} \ No newline at end of file diff --git a/app/DAO/EnsinoPesquisaExtensao/OfertaCursoDAO.php b/app/DAO/EnsinoPesquisaExtensao/OfertaCursoDAO.php new file mode 100644 index 0000000..590c09b --- /dev/null +++ b/app/DAO/EnsinoPesquisaExtensao/OfertaCursoDAO.php @@ -0,0 +1,25 @@ +id = $oferta->ofertacursoid; + $ofertaCurso->descricao = $oferta->descricao; + $ofertaCurso->situacao = $oferta->situacao; + $ofertas[] = $ofertaCurso; + } + + return $ofertas; + } +} \ No newline at end of file diff --git a/app/DAO/EnsinoPesquisaExtensao/TurmaDAO.php b/app/DAO/EnsinoPesquisaExtensao/TurmaDAO.php new file mode 100644 index 0000000..009b624 --- /dev/null +++ b/app/DAO/EnsinoPesquisaExtensao/TurmaDAO.php @@ -0,0 +1,31 @@ + $ofertaId + ] + ); + + $turmas = []; + foreach ($select as $_turma) { + $turma = new Turma(); + $turma->id = $_turma->ofertaturmaid; + $turma->descricao = $_turma->descricao; + $turma->dataInicialInscricao = $_turma->datainicialinscricao; + $turma->dataFinalInscricao = $_turma->datafinalinscricao; + $turmas[] = $turma; + } + + return $turmas; + } +} \ No newline at end of file diff --git a/app/DAO/LocationDAO.php b/app/DAO/LocationDAO.php new file mode 100644 index 0000000..e6029ff --- /dev/null +++ b/app/DAO/LocationDAO.php @@ -0,0 +1,24 @@ + $cep + ] + ); + + if (count($select)) { + return $select[0]->cityid; + } + + return false; + } +} \ No newline at end of file diff --git a/app/DAO/PersonDAO.php b/app/DAO/PersonDAO.php index ec32b14..b2dd36f 100644 --- a/app/DAO/PersonDAO.php +++ b/app/DAO/PersonDAO.php @@ -4,10 +4,10 @@ use App\Model\Person; use Illuminate\Support\Facades\DB; +use App\DAO\Basico\MioloCustomValueDAO; class PersonDAO { - /** * @param $id * @return Person @@ -36,7 +36,14 @@ public function get($id) $person->setTelefoneResidencial($select->residentialphone); $person->setCelular($select->cellphone); $person->setEmail($select->email); - //$person->setSenha($select->password); + $person->setSexo($select->sex); + $person->setDataNascimento($select->datebirth); + $person->setEstadoCivil($select->maritalstatusid); + + $person->setCpf(DocumentoDAO::getContent($select->personid, Person::DOCUMENTO_CPF)); + $person->setRg(DocumentoDAO::getContent($select->personid, Person::DOCUMENTO_IDENTIDADE)); + + $person->setCategoriaProfissional(MioloCustomValueDAO::getContent($select->personid, MioloCustomValueDAO::FIELD1)); } return $person; @@ -106,4 +113,118 @@ public function retornaPessoaPorCep($cpf) return false; } + + public function insert(Person $person) + { + $fields = 'name, email'; + $values = '?,?'; + $data = [ + $person->getName(), + $person->getEmail() + ]; + + if ($person->getCidade()) { + $fields .= ', cityid'; + $values .= ',?'; + $data[] = $person->getCidade()->getId(); + } + + if ($person->getCep()) { + $fields .= ', zipcode'; + $values .= ',?'; + $data[] = $person->getCep(); + } + + if ($person->getLogradouro()) { + $fields .= ', location'; + $values .= ',?'; + $data[] = $person->getLogradouro(); + } + + if ($person->getNumero()) { + $fields .= ', number'; + $values .= ',?'; + $data[] = $person->getNumero(); + } + + if ($person->getComplemento()) { + $fields .= ', complement'; + $values .= ',?'; + $data[] = $person->getComplemento(); + } + + if ($person->getBairro()) { + $fields .= ', neighborhood'; + $values .= ',?'; + $data[] = $person->getBairro(); + } + + if ($person->getUserName()) { + $fields .= ', miolousername'; + $values .= ',?'; + $data[] = $person->getUserName(); + } + + $result = DB::insert("insert into basperson ($fields) values ($values)", $data); + + if ($result) { + $lastPersonId = DB::connection()->getPdo()->lastInsertId(); + + if ($lastPersonId) { + $fields .= ', personid'; + $values .= ',?'; + $data[] = $lastPersonId; + } + + if ($person->getSexo()) { + $fields .= ', sex'; + $values .= ',?'; + $data[] = $person->getSexo(); + } + + + if ($person->getDataNascimento()) { + $fields .= ', datebirth'; + $values .= ',?'; + $data[] = $person->getDataNascimento(); + } + + if ($person->getCelular()) { + $fields .= ', cellphone'; + $values .= ',?'; + $data[] = $person->getCelular(); + } + + if ($person->getTelefoneResidencial()) { + $fields .= ', residentialphone'; + $values .= ',?'; + $data[] = $person->getTelefoneResidencial(); + } + + if ($person->getEstadoCivil()) { + $fields .= ', maritalstatusid'; + $values .= ',?'; + $data[] = $person->getEstadoCivil(); + } + + $result = DB::insert("insert into basphysicalperson ($fields) values ($values)", $data); + + $lastPhysicalPersonId = $this->getLastPersonId(); + + DocumentoDAO::insertDocumento($lastPhysicalPersonId, Person::DOCUMENTO_IDENTIDADE, $person->getRg()); + DocumentoDAO::insertDocumento($lastPhysicalPersonId, Person::DOCUMENTO_CPF, $person->getCpf()); + if ($person->getCategoriaProfissional()) { + MioloCustomValueDAO::insert($lastPhysicalPersonId, $person->getCategoriaProfissional()); + } + + + return $this->get($lastPhysicalPersonId); + } + } + + private function getLastPersonId() + { + $select = DB::select('SELECT personid FROM basphysicalperson ORDER BY personid DESC LIMIT 1'); + return $select[0]->personid; + } } \ No newline at end of file diff --git a/app/DAO/UserDAO.php b/app/DAO/UserDAO.php index 45f6a3f..3c5b0ef 100644 --- a/app/DAO/UserDAO.php +++ b/app/DAO/UserDAO.php @@ -133,4 +133,33 @@ public function update(User $user) ); return $user; } + + public function insert(User $user) + { + $result = DB::insert( + 'insert into public.miolo_user (login, name, m_password, confirm_hash) values (?, ?, ?, ?)', + [ + $user->getLogin(), + $user->getName(), + $user->getSenha(), + $user->getSenha(), + + ] + ); + + if ( $result ) { + $rowId = DB::connection()->getPdo()->lastInsertId(); + + DB::insert( + 'insert into public.miolo_groupuser (iduser, idgroup, unitid) values (?, ?, ?)', + [ + $rowId, + Person::PERFIL_PADRAO, + 1 + ] + ); + } + + return $result; + } } \ No newline at end of file diff --git a/app/Http/Controllers/EnsinoPesquisaExtensao/OfertaCursoController.php b/app/Http/Controllers/EnsinoPesquisaExtensao/OfertaCursoController.php new file mode 100644 index 0000000..fdb350a --- /dev/null +++ b/app/Http/Controllers/EnsinoPesquisaExtensao/OfertaCursoController.php @@ -0,0 +1,15 @@ +getOfertasAtivas(); + return \response()->json($ofertas); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/EnsinoPesquisaExtensao/TurmaController.php b/app/Http/Controllers/EnsinoPesquisaExtensao/TurmaController.php new file mode 100644 index 0000000..94c4824 --- /dev/null +++ b/app/Http/Controllers/EnsinoPesquisaExtensao/TurmaController.php @@ -0,0 +1,15 @@ +getTurmasPorOferta($ofertaId); + return \response()->json($turmas); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/PersonController.php b/app/Http/Controllers/PersonController.php index 17a9e1c..2119def 100644 --- a/app/Http/Controllers/PersonController.php +++ b/app/Http/Controllers/PersonController.php @@ -7,6 +7,9 @@ use Illuminate\Http\Request; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; +use App\Services\Basic\PersonService; +use Illuminate\Support\Facades\Validator; + class PersonController extends Controller { @@ -129,4 +132,37 @@ public function enviarEmailDeRecuperacaoDeSenha(Request $request) return \response()->json($retorno); } + + public function save(Request $request) + { + $data = $request->all(); + + $validator = Validator::make($data, [ + 'nome' => 'required|min:3', + 'email' => 'required|email:rfc|unique:basphysicalperson', + 'cpf' => 'required|size:14|formato_cpf|cpf|unique:basdocument,content', + 'rg' => 'required|unique:basdocument,content', + 'sexo' => 'alpha|size:1', + 'dataNascimento' => 'date_format:Y-m-d', + 'endereco.cep' => 'size:8' + ]); + + if ($validator->fails()) { + return \response()->json([ + 'error' => $validator->errors()->all() + ], \Illuminate\Http\Response::HTTP_BAD_REQUEST); + } + + $personService = new PersonService(); + $result = $personService->save($data); + + if (!$result) { + return \response()->json([ + 'error' => 'Não foi possível cadastrar a pessoa.' + ], \Illuminate\Http\Response::HTTP_BAD_REQUEST); + } + + return \response()->json($result); + + } } \ No newline at end of file diff --git a/app/Http/Middleware/ApiKeyPublicAuthMiddleware.php b/app/Http/Middleware/ApiKeyPublicAuthMiddleware.php new file mode 100644 index 0000000..347e673 --- /dev/null +++ b/app/Http/Middleware/ApiKeyPublicAuthMiddleware.php @@ -0,0 +1,37 @@ +header('x-api-key'); + + if ($apiKey) { + try { + if ($apiKey == env('API_KEY_PUBLIC')) { + return $next($request); + } + } catch (\Exception $ex) { + return response()->json( + [ + 'message' => 'Chave pública não autorizada' + ], + Response::HTTP_UNAUTHORIZED + ); + } + } + + return response()->json( + [ + 'message' => 'Chave pública não autorizada' + ], + Response::HTTP_UNAUTHORIZED + ); + } +} diff --git a/app/Model/EnsinoPesquisaExtensao/OfertaCurso.php b/app/Model/EnsinoPesquisaExtensao/OfertaCurso.php new file mode 100644 index 0000000..5e22161 --- /dev/null +++ b/app/Model/EnsinoPesquisaExtensao/OfertaCurso.php @@ -0,0 +1,10 @@ + 'id' ]; + public function getCategoriaProfissional() + { + return $this->categoriaProfissional; + } + + public function setCategoriaProfissional($categoriaProfissional) + { + $this->categoriaProfissional = $categoriaProfissional; + } + + public function getEstadoCivil() + { + return !empty($this->estadoCivil) ? $this->estadoCivil : 'N'; + } + + public function setEstadoCivil($estadoCivil) + { + $this->estadoCivil = $estadoCivil; + } + + public function getCpf() + { + return $this->cpf; + } + + public function setCpf($cpf) + { + $this->cpf = $cpf; + } + + public function getRg() + { + return $this->rg; + } + + public function setRg($rg) + { + $this->rg = $rg; + } + + public function getSexo() + { + return $this->sexo; + } + + public function setSexo($sexo) + { + $this->sexo = $sexo; + } + + public function getDataNascimento() + { + return $this->dataNascimento; + } + + public function setDataNascimento($dataNascimento) + { + $this->dataNascimento = $dataNascimento; + } + /** * @return mixed */ diff --git a/app/Model/User.php b/app/Model/User.php index 89ce163..5b8160a 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -5,6 +5,7 @@ class User { private $idUser; + private $name; private $login; private $senha; @@ -24,6 +25,16 @@ public function setIdUser($idUser) $this->idUser = $idUser; } + public function getName() + { + return $this->name; + } + + public function setName($name) + { + $this->name = $name; + } + /** * @return mixed */ diff --git a/app/Services/Basic/PersonService.php b/app/Services/Basic/PersonService.php new file mode 100644 index 0000000..6a09c75 --- /dev/null +++ b/app/Services/Basic/PersonService.php @@ -0,0 +1,101 @@ +setName($data['nome']); + $person->setEmail($data['email']); + $person->setCpf($data['cpf']); + $person->setUserName(str_replace(['.', '-'], ['', ''], $data['cpf'])); + $person->setRg($data['rg']); + + if (isset($data['categoriaProfissional'])) { + $person->setCategoriaProfissional($data['categoriaProfissional']); + } + + if (isset($data['sexo'])) { + $person->setSexo($data['sexo']); + } + + if (isset($data['dataNascimento'])) { + $person->setDataNascimento($data['dataNascimento']); + } + + if (isset($data['celular'])) { + $person->setCelular($data['celular']); + } + + if (isset($data['telefoneResidencial'])) { + $person->setTelefoneResidencial($data['telefoneResidencial']); + } + + if (isset($data['estadoCivil'])) { + $person->setEstadoCivil($data['estadoCivil']); + } + + if (isset($data['endereco'])) { + if (isset($data['endereco']['cep'])) { + $person->setCep($data['endereco']['cep']); + + $cidadeId = LocationDAO::getCidadeIdPorCep($data['endereco']['cep']); + + if ($cidadeId) { + $cidadeDAO = new CidadeDAO(); + $cidade = $cidadeDAO->get($cidadeId); + + $person->setCidade($cidade); + } + } + + if (isset($data['endereco']['logradouro'])) { + $person->setLogradouro($data['endereco']['logradouro']); + } + + if (isset($data['endereco']['numero'])) { + $person->setNumero($data['endereco']['numero']); + } + + if (isset($data['endereco']['complemento'])) { + $person->setComplemento($data['endereco']['complemento']); + } + + if (isset($data['endereco']['bairro'])) { + $person->setBairro($data['endereco']['bairro']); + } + } + + $personDAO = new PersonDAO(); + $_person = $personDAO->insert($person); + + $user = new User(); + $user->setName($person->getName()); + $user->setLogin($person->getUserName()); + $user->setSenha($person->getUserName()); + + $userDAO = new UserDAO(); + $userDAO->insert($user); + + DB::commit(); + return $_person; + + } catch (Exception $e) { + DB::rollback(); + return false; + } + } +} \ No newline at end of file diff --git a/bootstrap/app.php b/bootstrap/app.php index 7daba86..190f7a2 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -64,7 +64,8 @@ ]); $app->routeMiddleware([ - 'auth' => App\Http\Middleware\AuthMiddleware::class + 'auth' => App\Http\Middleware\AuthMiddleware::class, + 'ApiKeyPublicAuth' => App\Http\Middleware\ApiKeyPublicAuthMiddleware::class, ]); /* @@ -78,7 +79,7 @@ | */ -// $app->register(App\Providers\AppServiceProvider::class); +$app->register(LaravelLegends\PtBrValidator\ValidatorProvider::class); // $app->register(App\Providers\AuthServiceProvider::class); // $app->register(App\Providers\EventServiceProvider::class); diff --git a/composer.json b/composer.json index 735537e..aa13091 100644 --- a/composer.json +++ b/composer.json @@ -10,10 +10,11 @@ "vlucas/phpdotenv": "~2.2", "firebase/php-jwt": "^5.0", "palanik/lumen-cors": "dev-master", - "phpmailer/phpmailer": "~6.0" + "phpmailer/phpmailer": "~6.0", + "laravellegends/pt-br-validator": "5.1.*" }, "require-dev": { - "fzaninotto/faker": "~1.4", + "fzaninotto/faker": "^1.9", "phpunit/phpunit": "^7.0", "mockery/mockery": "~0.9" }, @@ -34,5 +35,10 @@ ] }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "config": { + "allow-plugins": { + "kylekatarnls/update-helper": true + } + } } diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php new file mode 100644 index 0000000..e5506df --- /dev/null +++ b/resources/lang/en/auth.php @@ -0,0 +1,19 @@ + 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php new file mode 100644 index 0000000..2345a56 --- /dev/null +++ b/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php new file mode 100644 index 0000000..a65914f --- /dev/null +++ b/resources/lang/en/validation.php @@ -0,0 +1,151 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal :value.', + 'file' => 'The :attribute must be greater than or equal :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal :value.', + 'file' => 'The :attribute must be less than or equal :value kilobytes.', + 'string' => 'The :attribute must be less than or equal :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute format is invalid.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/pt-BR/auth.php b/resources/lang/pt-BR/auth.php new file mode 100644 index 0000000..d3c96af --- /dev/null +++ b/resources/lang/pt-BR/auth.php @@ -0,0 +1,19 @@ + 'Essas credenciais não correspondem aos nossos registros.', + 'throttle' => 'Muitas tentativas de login. Tente novamente em :seconds segundos.', + +]; diff --git a/resources/lang/pt-BR/pagination.php b/resources/lang/pt-BR/pagination.php new file mode 100644 index 0000000..4deabd6 --- /dev/null +++ b/resources/lang/pt-BR/pagination.php @@ -0,0 +1,19 @@ + '« Anterior', + 'next' => 'Próximo »', + +]; diff --git a/resources/lang/pt-BR/passwords.php b/resources/lang/pt-BR/passwords.php new file mode 100644 index 0000000..af4efe7 --- /dev/null +++ b/resources/lang/pt-BR/passwords.php @@ -0,0 +1,22 @@ + 'A senha e a confirmação devem combinar e possuir pelo menos seis caracteres.', + 'reset' => 'Sua senha foi redefinida!', + 'sent' => 'Enviamos seu link de redefinição de senha por e-mail!', + 'token' => 'Este token de redefinição de senha é inválido.', + 'user' => 'Não encontramos um usuário com esse endereço de e-mail.', + +]; diff --git a/resources/lang/pt-BR/validation.php b/resources/lang/pt-BR/validation.php new file mode 100644 index 0000000..cfbfd1e --- /dev/null +++ b/resources/lang/pt-BR/validation.php @@ -0,0 +1,121 @@ + 'O campo :attribute deve ser aceito.', + 'active_url' => 'O campo :attribute não é uma URL válida.', + 'after' => 'O campo :attribute deve ser uma data posterior a :date.', + 'after_or_equal' => 'O campo :attribute deve ser uma data posterior ou igual a :date.', + 'alpha' => 'O campo :attribute só pode conter letras.', + 'alpha_dash' => 'O campo :attribute só pode conter letras, números e traços.', + 'alpha_num' => 'O campo :attribute só pode conter letras e números.', + 'array' => 'O campo :attribute deve ser uma matriz.', + 'before' => 'O campo :attribute deve ser uma data anterior :date.', + 'before_or_equal' => 'O campo :attribute deve ser uma data anterior ou igual a :date.', + 'between' => [ + 'numeric' => 'O campo :attribute deve ser entre :min e :max.', + 'file' => 'O campo :attribute deve ser entre :min e :max kilobytes.', + 'string' => 'O campo :attribute deve ser entre :min e :max caracteres.', + 'array' => 'O campo :attribute deve ter entre :min e :max itens.', + ], + 'boolean' => 'O campo :attribute deve ser verdadeiro ou falso.', + 'confirmed' => 'O campo :attribute de confirmação não confere.', + 'date' => 'O campo :attribute não é uma data válida.', + 'date_format' => 'O campo :attribute não corresponde ao formato :format.', + 'different' => 'Os campos :attribute e :other devem ser diferentes.', + 'digits' => 'O campo :attribute deve ter :digits dígitos.', + 'digits_between' => 'O campo :attribute deve ter entre :min e :max dígitos.', + 'dimensions' => 'O campo :attribute tem dimensões de imagem inválidas.', + 'distinct' => 'O campo :attribute campo tem um valor duplicado.', + 'email' => 'O campo :attribute deve ser um endereço de e-mail válido.', + 'exists' => 'O campo :attribute selecionado é inválido.', + 'file' => 'O campo :attribute deve ser um arquivo.', + 'filled' => 'O campo :attribute deve ter um valor.', + 'image' => 'O campo :attribute deve ser uma imagem.', + 'in' => 'O campo :attribute selecionado é inválido.', + 'in_array' => 'O campo :attribute não existe em :other.', + 'integer' => 'O campo :attribute deve ser um número inteiro.', + 'ip' => 'O campo :attribute deve ser um endereço de IP válido.', + 'ipv4' => 'O campo :attribute deve ser um endereço IPv4 válido.', + 'ipv6' => 'O campo :attribute deve ser um endereço IPv6 válido.', + 'json' => 'O campo :attribute deve ser uma string JSON válida.', + 'max' => [ + 'numeric' => 'O campo :attribute não pode ser superior a :max.', + 'file' => 'O campo :attribute não pode ser superior a :max kilobytes.', + 'string' => 'O campo :attribute não pode ser superior a :max caracteres.', + 'array' => 'O campo :attribute não pode ter mais do que :max itens.', + ], + 'mimes' => 'O campo :attribute deve ser um arquivo do tipo: :values.', + 'mimetypes' => 'O campo :attribute deve ser um arquivo do tipo: :values.', + 'min' => [ + 'numeric' => 'O campo :attribute deve ser pelo menos :min.', + 'file' => 'O campo :attribute deve ter pelo menos :min kilobytes.', + 'string' => 'O campo :attribute deve ter pelo menos :min caracteres.', + 'array' => 'O campo :attribute deve ter pelo menos :min itens.', + ], + 'not_in' => 'O campo :attribute selecionado é inválido.', + 'numeric' => 'O campo :attribute deve ser um número.', + 'present' => 'O campo :attribute deve estar presente.', + 'regex' => 'O campo :attribute tem um formato inválido.', + 'required' => 'O campo :attribute é obrigatório.', + 'required_if' => 'O campo :attribute é obrigatório quando :other for :value.', + 'required_unless' => 'O campo :attribute é obrigatório exceto quando :other for :values.', + 'required_with' => 'O campo :attribute é obrigatório quando :values está presente.', + 'required_with_all' => 'O campo :attribute é obrigatório quando :values está presente.', + 'required_without' => 'O campo :attribute é obrigatório quando :values não está presente.', + 'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values estão presentes.', + 'same' => 'Os campos :attribute e :other devem corresponder.', + 'size' => [ + 'numeric' => 'O campo :attribute deve ser :size.', + 'file' => 'O campo :attribute deve ser :size kilobytes.', + 'string' => 'O campo :attribute deve ser :size caracteres.', + 'array' => 'O campo :attribute deve conter :size itens.', + ], + 'string' => 'O campo :attribute deve ser uma string.', + 'timezone' => 'O campo :attribute deve ser uma zona válida.', + 'unique' => 'O campo :attribute já está sendo utilizado.', + 'uploaded' => 'Ocorreu uma falha no upload do campo :attribute.', + 'url' => 'O campo :attribute tem um formato inválido.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/routes/web.php b/routes/web.php index a31f571..c79223b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -29,6 +29,32 @@ function () use ($app) { 'PersonController@enviarEmailDeRecuperacaoDeSenha' ); + +$app->group( + ['middleware' => ['ApiKeyPublicAuth']], + function () use ($app) { + $app->post( + 'person', + 'PersonController@save' + ); + + $app->group( + ['prefix' => 'ensino-pesquisa-extensao', 'namespace' => 'EnsinoPesquisaExtensao'], + function () use ($app) { + $app->get( + 'ofertas', + 'OfertaCursoController@ofertas' + ); + + $app->get( + 'ofertas/{ofertaId}/turmas', + 'TurmaController@turma' + ); + } + ); + } +); + $app->group( ['middleware' => ['auth']], function () use ($app) { diff --git a/tests/Basico/PersonTest.php b/tests/Basico/PersonTest.php new file mode 100644 index 0000000..93814b0 --- /dev/null +++ b/tests/Basico/PersonTest.php @@ -0,0 +1,219 @@ +addProvider(new \Faker\Provider\pt_BR\Person($fakerBrasil)); + $faker = Factory::create(); + + $rand = rand(90000, 99999); + + return [ + 'nome' => $fakerBrasil->name, + 'email' => $faker->email, + 'endereco' => [ + 'cep' => '600' . $rand, + 'logradouro' => 'Logradouro ' . $rand, + 'numero' => '000' . $rand, + 'complemento' => 'Complemento ' . $rand, + 'bairro'=> 'Bair ' . $rand, + 'cidade'=> 'Fortaleza' . $rand + ], + 'sexo' => 'M', + 'cpf' => $fakerBrasil->cpf, + 'rg' => $fakerBrasil->rg(false), + 'dataNascimento' => '2000-01-01', + 'celular' => '11000000000', + 'telefoneResidencial' => '11000000000', + 'estadoCivil' => 'N', + 'categoriaProfissional' => 'Medico' + ]; + } + + public function testCadastroPersonOK() + { + $data = $this->data(); + + $result = $this->post( + '/person', + $data, + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ); + + $result->seeStatusCode(Response::HTTP_OK); + $result->seeJson( + [ + 'name' => $data['nome'], + 'email' => $data['email'], + 'cpf' => $data['cpf'], + 'rg' => $data['rg'], + 'celular' => $data['celular'], + 'telefoneResidencial' => $data['telefoneResidencial'], + 'sexo' => $data['sexo'], + 'dataNascimento' => $data['dataNascimento'], + 'cep' => $data['endereco']['cep'], + 'logradouro' => $data['endereco']['logradouro'], + 'numero' => $data['endereco']['numero'], + 'complemento' => $data['endereco']['complemento'], + 'bairro' => $data['endereco']['bairro'], + 'estadoCivil' => $data['estadoCivil'], + 'categoriaProfissional' => $data['categoriaProfissional'] + ] + ); + } + + + public function testCadastroPersonComCpfExistente() + { + $data = $this->data(); + + $this->post( + '/person', + $data, + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ); + + $novoData = $this->data(); + + $data['email'] = $novoData['email']; + $data['rg'] = $novoData['rg']; + $this->post( + '/person', + $data, + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ) + ->seeStatusCode(Response::HTTP_BAD_REQUEST) + ->seeJsonEquals([ + 'error' => [ + 'O campo cpf já está sendo utilizado.' + ] + ]); + } + + public function testCadastroPersonComEmailExistente() + { + $data = $this->data(); + + $this->post( + '/person', + $data, + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ); + + $novoData = $this->data(); + + $data['cpf'] = $novoData['cpf']; + $data['rg'] = $novoData['rg']; + $this->post( + '/person', + $data, + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ) + ->seeStatusCode(Response::HTTP_BAD_REQUEST) + ->seeJsonEquals([ + 'error' => [ + 'O campo email já está sendo utilizado.' + ] + ]); + } + + public function testCadastroPersonComRGExistente() + { + $data = $this->data(); + $this->post( + '/person', + $data, + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ); + + + $novoData = $this->data(); + + $data['email'] = $novoData['email']; + $data['cpf'] = $novoData['cpf']; + $result = $this->post( + '/person', + $data, + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ) + ->seeStatusCode(Response::HTTP_BAD_REQUEST) + ->seeJsonEquals([ + 'error' => [ + 'O campo rg já está sendo utilizado.' + ] + ]); + } + + public function testCadastroPersonSemDados() + { + $this->post( + '/person', + [], + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ) + ->seeStatusCode(Response::HTTP_BAD_REQUEST) + ->seeJsonEquals([ + 'error' => [ + 'O campo nome é obrigatório.', + 'O campo email é obrigatório.', + 'O campo cpf é obrigatório.', + 'O campo rg é obrigatório.' + ] + ]); + } + + public function testCadastroCpfInvalido() + { + $data = $this->data(); + + $data['cpf'] = '000.000.000-00'; + $result = $this->post( + '/person', + $data, + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ); + + $result->seeStatusCode(Response::HTTP_BAD_REQUEST); + $result->seeJson( + [ + 'error' => [ + 'O campo cpf não é um CPF válido' + ] + ] + ); + } + + +} \ No newline at end of file diff --git a/tests/EnsinoPesquisaExtensao/OfertaCursoTest.php b/tests/EnsinoPesquisaExtensao/OfertaCursoTest.php new file mode 100644 index 0000000..88bfe43 --- /dev/null +++ b/tests/EnsinoPesquisaExtensao/OfertaCursoTest.php @@ -0,0 +1,32 @@ +get( + '/ensino-pesquisa-extensao/ofertas', + [ + 'x-api-key' => env('API_KEY_PUBLIC') + ] + ); + + $result->seeStatusCode(Response::HTTP_OK); + $result->seeJsonStructure( + [[ + 'id', + 'descricao', + 'situacao' + ]] + ); + } +} \ No newline at end of file From c0995ec39349ca4b51b103c49fcdc29362d52265 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 26 Aug 2022 16:52:28 -0300 Subject: [PATCH 08/21] feat: add AlunoDAO --- app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php diff --git a/app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php b/app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php new file mode 100644 index 0000000..f1ed2e8 --- /dev/null +++ b/app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php @@ -0,0 +1,34 @@ +limpaCPF($cpf_aluno); + + $result = DB::table('public.basperson') + ->distinct() + ->select('personid') + ->where('public.basperson.miolousername', $_miolousername) + ->first(); + + return $result->personid; + } +} From 065f624d1289f634351a906a6c5c72f4e6ed5134 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 26 Aug 2022 16:52:43 -0300 Subject: [PATCH 09/21] feat: add CursoDAO --- app/DAO/EnsinoPesquisaExtensao/CursoDAO.php | 366 ++++++++++++++++++++ 1 file changed, 366 insertions(+) create mode 100644 app/DAO/EnsinoPesquisaExtensao/CursoDAO.php diff --git a/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php b/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php new file mode 100644 index 0000000..8990cc5 --- /dev/null +++ b/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php @@ -0,0 +1,366 @@ +where('public.acpofertaturma.ofertaturmaid', $turmaId) + ->where('public.acpofertaturma.situacao', 'A') + ->whereRaw('NOW() BETWEEN public.acpofertaturma.datainicialinscricao AND public.acpofertaturma.datafinalinscricao') + ->where('public.acpofertacurso.situacao', 'A') + ->join( + 'public.acpofertacurso', + 'public.acpofertaturma.ofertacursoid', + '=', + 'public.acpofertacurso.ofertacursoid' + ) + ->join( + 'public.acpocorrenciacurso', + 'public.acpofertacurso.ocorrenciacursoid', + '=', + 'public.acpocorrenciacurso.ocorrenciacursoid' + ) + ->join( + 'public.acpcurso', + 'public.acpocorrenciacurso.cursoid', + '=', + 'public.acpcurso.cursoid' + ) + ->join( + 'public.acpperfilcurso', + 'public.acpcurso.perfilcursoid', + '=', + 'public.acpperfilcurso.perfilcursoid' + ) + ->select( + 'acpofertacurso.ofertacursoid', + 'acpofertacurso.ocorrenciacursoid', + 'acpofertacurso.descricao as oferta_descricao', + 'acpofertacurso.situacao as oferta_situacao', + 'acpocorrenciacurso.cursoid', + 'acpocorrenciacurso.situacao as ocorrencia_situacao', + 'acpcurso.perfilcursoid', + 'acpcurso.numeroformalvagas', + 'acpcurso.datainicio as curso_datainicio', + 'acpcurso.datafim as curso_datafim', + 'acpperfilcurso.modelodeavaliacaogeral', + 'acpperfilcurso.modelodeavaliacaoseriado', + 'acpperfilcurso.modelodeavaliacaomodulo', + 'acpperfilcurso.permiteinscricaoporgrupo', + 'acpperfilcurso.descricao as perfil_descricao', + 'acpperfilcurso.ativo as perfil_ativo', + 'acpofertaturma.ofertaturmaid', + 'acpofertaturma.codigo as turma_codigo', + 'acpofertaturma.descricao as turma_descricao', + 'acpofertaturma.datainicialoferta', + 'acpofertaturma.datafinaloferta', + 'acpofertaturma.dataencerramento', + 'acpofertaturma.datainicialaulas', + 'acpofertaturma.datafinalaulas', + 'acpofertaturma.datainicialinscricao', + 'acpofertaturma.datafinalinscricao', + 'acpofertaturma.datainicialmatricula', + 'acpofertaturma.datafinalmatricula', + 'acpofertaturma.minimoalunos', + 'acpofertaturma.maximoalunos', + 'acpofertaturma.centerid', + 'acpofertaturma.unitid', + 'acpofertaturma.habilitada', + ) + ->first(); + + if (!$cursoDados) throw new Exception("Dados do Curso insuficientes, verificar situação e período de oferta e turma"); + + // Matriz Curricular pode ter 1 ou mais resultados + $matrizCurricularDados = DB::table('public.acpmatrizcurricular') + ->where('public.acpmatrizcurricular.cursoid', $cursoDados->cursoid) + ->join( + 'public.acpmatrizcurriculargrupo', + 'public.acpmatrizcurricular.matrizcurricularid', + '=', + 'public.acpmatrizcurriculargrupo.matrizcurricularid', + ) + ->select( + 'acpmatrizcurricular.matrizcurricularid', + 'acpmatrizcurricular.componentecurricularid', + 'acpmatrizcurricular.descricao as matrizcurricular_descricao', + 'acpmatrizcurriculargrupo.matrizcurriculargrupoid', + 'acpmatrizcurriculargrupo.descricao as matrizcurriculargrupo_descricao', + ) + ->get(); + + if (!$matrizCurricularDados) throw new Exception("Dados da Matriz Curricular insuficientes"); + + // Componente Curricular (ou Unidade) pode ter 1 ou mais resultados + $componenteCurricularDados = DB::table('public.acpofertacomponentecurricular') + ->where('public.acpofertacomponentecurricular.ofertaturmaid', $turmaId) + ->join( + 'public.acpcomponentecurricularmatriz', + 'public.acpofertacomponentecurricular.componentecurricularmatrizid', + '=', + 'public.acpcomponentecurricularmatriz.componentecurricularmatrizid' + ) + ->join( + 'public.acpmatrizcurriculargrupo', + 'public.acpcomponentecurricularmatriz.matrizcurriculargrupoid', + '=', + 'public.acpmatrizcurriculargrupo.matrizcurriculargrupoid', + ) + ->join( + 'public.acpmatrizcurricular', + 'public.acpmatrizcurriculargrupo.matrizcurricularid', + '=', + 'public.acpmatrizcurricular.matrizcurricularid', + ) + ->select( + 'acpofertacomponentecurricular.ofertacomponentecurricularid', + 'acpofertacomponentecurricular.componentecurricularmatrizid', + 'acpcomponentecurricularmatriz.matrizcurriculargrupoid', + 'acpmatrizcurriculargrupo.matrizcurricularid', + 'acpmatrizcurricular.situacao', + 'acpmatrizcurricular.descricao', + ) + ->get(); + + if (!$componenteCurricularDados) throw new Exception("Dados do Componente Curricular insuficientes"); + } catch (\Throwable $e) { + throw new \Exception('Não foi possível encontrar todos os dados necessários: ' . $e->getMessage()); + } + + return [ + 'cursoDados' => $cursoDados, + 'matrizCurricularDados' => $matrizCurricularDados, + 'componenteCurricularDados' => $componenteCurricularDados, + ]; + } + + // Inserts + private function salvaInscricao($cursoDados, $personid) + { + $result = DB::table('public.acpinscricao') + ->insertGetId( + [ + // 'username' => 'current_user()', + 'datetime' => 'NOW()', + 'ipaddress' => '127.0.0.1', + 'personid' => $personid, + 'situacao' => 'I', + 'datasituacao' => 'NOW()', + 'origem' => 'S', + 'unitid' => $cursoDados->unitid, + 'ofertacursoid' => $cursoDados->ofertacursoid, + 'centerid' => $cursoDados->centerid + ], + 'inscricaoid' + ); + return $result; + } + + private function salvaInscricaoCurso($cursoDados, $personid) + { + $result = DB::table('public.acpcursoinscricao') + ->insertGetId( + [ + 'personid' => $personid, + 'situacao' => 'M', + 'cursoid' => $cursoDados->cursoid + ], + 'cursoinscricaoid' + ); + + return $result; + } + + private function salvaInscricaoPorGrupo( + $inscricaoId, + $personid, + $cursoDados, + $matrizCurricularDados, + $componenteCurricularDados + ) { + + $inscricaoCompCurricularIds = array(); + + foreach ($matrizCurricularDados as $matrizCurricular) { + + $inscricaoturmagrupoIdPorGrupo = DB::table('public.acpinscricaoturmagrupo') + ->insertGetId( + [ + 'inscricaoid' => $inscricaoId, + 'ofertaturmaid' => $cursoDados->ofertaturmaid, + 'unitid' => $cursoDados->unitid, + 'centerid' => $cursoDados->centerid, + 'matrizcurriculargrupoid' => $matrizCurricular->matrizcurriculargrupoid + ], + 'inscricaoturmagrupoid' + ); + + foreach ($componenteCurricularDados as $compCurricular) { + + if ($matrizCurricular->matrizcurriculargrupoid == $compCurricular->matrizcurriculargrupoid) { + + $inscricaoCompCurricularIds[] = DB::table('public.acpmatricula') + ->insertGetId( + [ + 'datetime' => 'NOW()', + 'ipaddress' => '127.0.0.1', + 'ofertacomponentecurricularid' => $compCurricular->ofertacomponentecurricularid, + 'personid' => $personid, + 'situacao' => 'M', + 'datamatricula' => 'NOW()', + 'unitid' => $cursoDados->unitid, + 'inscricaoturmagrupoid' => $inscricaoturmagrupoIdPorGrupo, + 'centerid' => $cursoDados->centerid, + ], + 'matriculaid' + ); + } + } + } + + return $inscricaoCompCurricularIds; + } + + private function salvaInscricaoPorUnidade( + $inscricaoId, + $personid, + $cursoDados, + $componenteCurricularDados + ) { + + $inscricaoCompCurricularIds = array(); + + $inscricaoturmagrupoIdPorUnidade = DB::table('public.acpinscricaoturmagrupo') + ->insertGetId( + [ + 'inscricaoid' => $inscricaoId, + 'ofertaturmaid' => $cursoDados->ofertaturmaid, + 'unitid' => $cursoDados->unitid, + 'centerid' => $cursoDados->centerid, + ], + 'inscricaoturmagrupoid' + ); + + foreach ($componenteCurricularDados as $compCurricular) { + $inscricaoCompCurricularIds[] = DB::table('public.acpmatricula') + ->insertGetId( + [ + 'datetime' => 'NOW()', + 'ipaddress' => '127.0.0.1', + 'ofertacomponentecurricularid' => $compCurricular->ofertacomponentecurricularid, + 'personid' => $personid, + 'situacao' => 'M', + 'datamatricula' => 'NOW()', + 'unitid' => $cursoDados->unitid, + 'inscricaoturmagrupoid' => $inscricaoturmagrupoIdPorUnidade, + 'centerid' => $cursoDados->centerid, + ], + 'matriculaid' + ); + } + + return $inscricaoCompCurricularIds; + } + + public function inscreveAluno($turmaId, $personid) + { + $verificaInscricaoAtivaNaTurma = $this->verificaInscricaoAtivaNaTurma( + $turmaId, + $personid + ); + + if ($verificaInscricaoAtivaNaTurma) { + return $verificaInscricaoAtivaNaTurma; + } + + DB::beginTransaction(); + try { + $curso = $this->getCursoDados($turmaId); + + $inscricaoId = $this->salvaInscricao( + $curso['cursoDados'], + $personid + ); + + $cursoInscricaoId = $this->salvaInscricaoCurso( + $curso['cursoDados'], + $personid + ); + + $inscricaoCompCurricularIds = array(); + + if ($curso['cursoDados']->permiteinscricaoporgrupo) { + + $inscricaoCompCurricularIds = $this->salvaInscricaoPorGrupo( + $inscricaoId, + $personid, + $curso['cursoDados'], + $curso['matrizCurricularDados'], + $curso['componenteCurricularDados'] + ); + } else { + + $inscricaoCompCurricularIds = $this->salvaInscricaoPorUnidade( + $inscricaoId, + $personid, + $curso['cursoDados'], + $curso['componenteCurricularDados'] + ); + } + + DB::commit(); + } catch (\Throwable $e) { + DB::rollback(); + throw new \Exception('Não foi possível realizar a inscrição'); + } + + $result = [ + 'inscricao_id' => $inscricaoId, + 'curso_inscricao_id' => $cursoInscricaoId, + 'matriculas' => $inscricaoCompCurricularIds + ]; + + return $result; + } +} From fd280965ee9d297536f4917dfd551795f86996f2 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 26 Aug 2022 16:52:59 -0300 Subject: [PATCH 10/21] feat: add InscricaoController --- .../IncricaoController.php | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php diff --git a/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php b/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php new file mode 100644 index 0000000..ac845ac --- /dev/null +++ b/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php @@ -0,0 +1,66 @@ +all(); + + $validator = Validator::make($data, [ + 'cpf_aluno' => 'required|cpf', + ]); + + try { + + if ($validator->fails()) { + return response()->json( + [ + 'sucesso' => false, + 'mensagem' => $validator->errors()->first() + ], + Response::HTTP_BAD_REQUEST + ); + } + + $personid = (new PersonDAO())->getPersonId($data['cpf_aluno']); + + $inscricao = (new CursoDAO())->inscreveAluno($turmaId, $personid); + + if (!$inscricao) { + return response()->json( + [ + 'sucesso' => false, + 'mensagem' => 'Não foi possível inscrever a pessoa.' + ], + Response::HTTP_BAD_REQUEST + ); + } + } catch (\Exception $e) { + return response()->json( + [ + 'sucesso' => false, + 'mensagem' => $e->getMessage() + ], + Response::HTTP_BAD_REQUEST + ); + } + + return response()->json( + [ + 'sucesso' => true, + 'inscricao_id' => $inscricao['inscricao_id'] + ], + Response::HTTP_OK + ); + } +} From 2518ca774b8b0b297165af6b62cbc533d674ae47 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 26 Aug 2022 16:53:59 -0300 Subject: [PATCH 11/21] feat: update routes to add inscricoes endpoint --- routes/web.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/routes/web.php b/routes/web.php index c79223b..e96944a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -45,11 +45,15 @@ function () use ($app) { 'ofertas', 'OfertaCursoController@ofertas' ); - $app->get( 'ofertas/{ofertaId}/turmas', 'TurmaController@turma' ); + // Inscrições + $app->post( + 'turma/{turmaId}/inscricao', + 'IncricaoController@index' + ); } ); } @@ -93,7 +97,8 @@ function () use ($app) { 'diariodecampo/{residenteId}/{ofertaDeRodizioId}', 'DiarioDeCampoController@lista' ); - $app->post('diariodecampo', + $app->post( + 'diariodecampo', 'DiarioDeCampoController@salvar' ); $app->put( From dc8d8e66cfc582b23714a868a65f3b7fd322ced4 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 2 Sep 2022 19:06:28 -0300 Subject: [PATCH 12/21] fix: corrigido typo --- app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php | 34 --------------------- 1 file changed, 34 deletions(-) delete mode 100644 app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php diff --git a/app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php b/app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php deleted file mode 100644 index f1ed2e8..0000000 --- a/app/DAO/EnsinoPesquisaExtensao/AlunoDAO.php +++ /dev/null @@ -1,34 +0,0 @@ -limpaCPF($cpf_aluno); - - $result = DB::table('public.basperson') - ->distinct() - ->select('personid') - ->where('public.basperson.miolousername', $_miolousername) - ->first(); - - return $result->personid; - } -} From 8e931d7f6f462dc27498699c58e10bcba3741796 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 2 Sep 2022 19:13:46 -0300 Subject: [PATCH 13/21] feat: adiciona busca pessoa fisica --- app/DAO/EnsinoPesquisaExtensao/PersonDAO.php | 61 ++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 app/DAO/EnsinoPesquisaExtensao/PersonDAO.php diff --git a/app/DAO/EnsinoPesquisaExtensao/PersonDAO.php b/app/DAO/EnsinoPesquisaExtensao/PersonDAO.php new file mode 100644 index 0000000..f7a8c1a --- /dev/null +++ b/app/DAO/EnsinoPesquisaExtensao/PersonDAO.php @@ -0,0 +1,61 @@ +limpaCPF($cpf); + + $result = DB::table('public.basperson') + ->distinct() + ->select('personid') + ->where('public.basperson.miolousername', $_miolousername) + ->value('personid'); + + return $result; + } + + public function getPhysicalPerson($personid) + { + $result = DB::table('public.basphysicalperson') + ->select('*') + ->where('public.basphysicalperson.personid', $personid) + ->first(); + + $person = new Person(); + + $person->personid = $result->personid; + $person->name = $result->name; + $person->email = $result->email; + $person->password = $result->password; + $person->cityid = $result->cityid; + $person->zipcode = $result->zipcode; + $person->location = $result->location; + $person->number = $result->number; + $person->complement = $result->complement; + $person->neighborhood = $result->neighborhood; + $person->sex = $result->sex; + $person->datebirth = $result->datebirth; + $person->cellphone = $result->cellphone; + $person->residentialphone = $result->residentialphone; + $person->maritalstatusid = $result->maritalstatusid; + $person->miolousername = $result->miolousername; + $person->namesearch = $result->namesearch; + + return $person; + } +} From 604379facff4c7836a17c099b3113f020fc85e5a Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 2 Sep 2022 19:14:44 -0300 Subject: [PATCH 14/21] refactor: alterado tratamento de excecoes --- app/DAO/EnsinoPesquisaExtensao/CursoDAO.php | 271 ++++++++++---------- 1 file changed, 130 insertions(+), 141 deletions(-) diff --git a/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php b/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php index 8990cc5..90be29c 100644 --- a/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php +++ b/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php @@ -10,31 +10,26 @@ class CursoDAO public function verificaInscricaoAtivaNaTurma($turmaid, $personid) { - try { - - $queryInscricao = DB::select( - "SELECT inscricao.inscricaoid FROM acpinscricao AS inscricao + $queryInscricao = DB::select( + "SELECT inscricao.inscricaoid FROM acpinscricao AS inscricao INNER JOIN acpinscricaoturmagrupo AS IT ON IT.inscricaoid = inscricao.inscricaoid WHERE inscricao.personid = $personid AND inscricao.situacao = 'I' AND IT.ofertaturmaid = $turmaid" - ); + ); - $queryMatricula = DB::select( - "SELECT matricula.matriculaid FROM acpmatricula AS matricula + $queryMatricula = DB::select( + "SELECT matricula.matriculaid FROM acpmatricula AS matricula INNER JOIN acpinscricaoturmagrupo AS IT ON IT.inscricaoturmagrupoid = matricula.inscricaoturmagrupoid WHERE matricula.personid = $personid AND matricula.situacao = 'M' AND IT.ofertaturmaid = $turmaid" - ); + ); - if ($queryInscricao || $queryMatricula) { - throw new \Exception('Pessoa possui Inscrição ou Matrícula ativa.'); - } - } catch (\Throwable $e) { - throw $e; + if ($queryInscricao || $queryMatricula) { + throw new Exception('Pessoa possui Inscrição ou Matrícula ativa.'); } return false; @@ -42,131 +37,126 @@ public function verificaInscricaoAtivaNaTurma($turmaid, $personid) public function getCursoDados($turmaId) { - try { - - $cursoDados = DB::table('public.acpofertaturma') - ->where('public.acpofertaturma.ofertaturmaid', $turmaId) - ->where('public.acpofertaturma.situacao', 'A') - ->whereRaw('NOW() BETWEEN public.acpofertaturma.datainicialinscricao AND public.acpofertaturma.datafinalinscricao') - ->where('public.acpofertacurso.situacao', 'A') - ->join( - 'public.acpofertacurso', - 'public.acpofertaturma.ofertacursoid', - '=', - 'public.acpofertacurso.ofertacursoid' - ) - ->join( - 'public.acpocorrenciacurso', - 'public.acpofertacurso.ocorrenciacursoid', - '=', - 'public.acpocorrenciacurso.ocorrenciacursoid' - ) - ->join( - 'public.acpcurso', - 'public.acpocorrenciacurso.cursoid', - '=', - 'public.acpcurso.cursoid' - ) - ->join( - 'public.acpperfilcurso', - 'public.acpcurso.perfilcursoid', - '=', - 'public.acpperfilcurso.perfilcursoid' - ) - ->select( - 'acpofertacurso.ofertacursoid', - 'acpofertacurso.ocorrenciacursoid', - 'acpofertacurso.descricao as oferta_descricao', - 'acpofertacurso.situacao as oferta_situacao', - 'acpocorrenciacurso.cursoid', - 'acpocorrenciacurso.situacao as ocorrencia_situacao', - 'acpcurso.perfilcursoid', - 'acpcurso.numeroformalvagas', - 'acpcurso.datainicio as curso_datainicio', - 'acpcurso.datafim as curso_datafim', - 'acpperfilcurso.modelodeavaliacaogeral', - 'acpperfilcurso.modelodeavaliacaoseriado', - 'acpperfilcurso.modelodeavaliacaomodulo', - 'acpperfilcurso.permiteinscricaoporgrupo', - 'acpperfilcurso.descricao as perfil_descricao', - 'acpperfilcurso.ativo as perfil_ativo', - 'acpofertaturma.ofertaturmaid', - 'acpofertaturma.codigo as turma_codigo', - 'acpofertaturma.descricao as turma_descricao', - 'acpofertaturma.datainicialoferta', - 'acpofertaturma.datafinaloferta', - 'acpofertaturma.dataencerramento', - 'acpofertaturma.datainicialaulas', - 'acpofertaturma.datafinalaulas', - 'acpofertaturma.datainicialinscricao', - 'acpofertaturma.datafinalinscricao', - 'acpofertaturma.datainicialmatricula', - 'acpofertaturma.datafinalmatricula', - 'acpofertaturma.minimoalunos', - 'acpofertaturma.maximoalunos', - 'acpofertaturma.centerid', - 'acpofertaturma.unitid', - 'acpofertaturma.habilitada', - ) - ->first(); - - if (!$cursoDados) throw new Exception("Dados do Curso insuficientes, verificar situação e período de oferta e turma"); - - // Matriz Curricular pode ter 1 ou mais resultados - $matrizCurricularDados = DB::table('public.acpmatrizcurricular') - ->where('public.acpmatrizcurricular.cursoid', $cursoDados->cursoid) - ->join( - 'public.acpmatrizcurriculargrupo', - 'public.acpmatrizcurricular.matrizcurricularid', - '=', - 'public.acpmatrizcurriculargrupo.matrizcurricularid', - ) - ->select( - 'acpmatrizcurricular.matrizcurricularid', - 'acpmatrizcurricular.componentecurricularid', - 'acpmatrizcurricular.descricao as matrizcurricular_descricao', - 'acpmatrizcurriculargrupo.matrizcurriculargrupoid', - 'acpmatrizcurriculargrupo.descricao as matrizcurriculargrupo_descricao', - ) - ->get(); - - if (!$matrizCurricularDados) throw new Exception("Dados da Matriz Curricular insuficientes"); - - // Componente Curricular (ou Unidade) pode ter 1 ou mais resultados - $componenteCurricularDados = DB::table('public.acpofertacomponentecurricular') - ->where('public.acpofertacomponentecurricular.ofertaturmaid', $turmaId) - ->join( - 'public.acpcomponentecurricularmatriz', - 'public.acpofertacomponentecurricular.componentecurricularmatrizid', - '=', - 'public.acpcomponentecurricularmatriz.componentecurricularmatrizid' - ) - ->join( - 'public.acpmatrizcurriculargrupo', - 'public.acpcomponentecurricularmatriz.matrizcurriculargrupoid', - '=', - 'public.acpmatrizcurriculargrupo.matrizcurriculargrupoid', - ) - ->join( - 'public.acpmatrizcurricular', - 'public.acpmatrizcurriculargrupo.matrizcurricularid', - '=', - 'public.acpmatrizcurricular.matrizcurricularid', - ) - ->select( - 'acpofertacomponentecurricular.ofertacomponentecurricularid', - 'acpofertacomponentecurricular.componentecurricularmatrizid', - 'acpcomponentecurricularmatriz.matrizcurriculargrupoid', - 'acpmatrizcurriculargrupo.matrizcurricularid', - 'acpmatrizcurricular.situacao', - 'acpmatrizcurricular.descricao', - ) - ->get(); - - if (!$componenteCurricularDados) throw new Exception("Dados do Componente Curricular insuficientes"); - } catch (\Throwable $e) { - throw new \Exception('Não foi possível encontrar todos os dados necessários: ' . $e->getMessage()); - } + $cursoDados = DB::table('public.acpofertaturma') + ->where('public.acpofertaturma.ofertaturmaid', $turmaId) + ->where('public.acpofertaturma.situacao', 'A') + ->whereRaw('NOW() BETWEEN public.acpofertaturma.datainicialinscricao AND public.acpofertaturma.datafinalinscricao') + ->where('public.acpofertacurso.situacao', 'A') + ->join( + 'public.acpofertacurso', + 'public.acpofertaturma.ofertacursoid', + '=', + 'public.acpofertacurso.ofertacursoid' + ) + ->join( + 'public.acpocorrenciacurso', + 'public.acpofertacurso.ocorrenciacursoid', + '=', + 'public.acpocorrenciacurso.ocorrenciacursoid' + ) + ->join( + 'public.acpcurso', + 'public.acpocorrenciacurso.cursoid', + '=', + 'public.acpcurso.cursoid' + ) + ->join( + 'public.acpperfilcurso', + 'public.acpcurso.perfilcursoid', + '=', + 'public.acpperfilcurso.perfilcursoid' + ) + ->select( + 'acpofertacurso.ofertacursoid', + 'acpofertacurso.ocorrenciacursoid', + 'acpofertacurso.descricao as oferta_descricao', + 'acpofertacurso.situacao as oferta_situacao', + 'acpocorrenciacurso.cursoid', + 'acpocorrenciacurso.situacao as ocorrencia_situacao', + 'acpcurso.perfilcursoid', + 'acpcurso.numeroformalvagas', + 'acpcurso.datainicio as curso_datainicio', + 'acpcurso.datafim as curso_datafim', + 'acpperfilcurso.modelodeavaliacaogeral', + 'acpperfilcurso.modelodeavaliacaoseriado', + 'acpperfilcurso.modelodeavaliacaomodulo', + 'acpperfilcurso.permiteinscricaoporgrupo', + 'acpperfilcurso.descricao as perfil_descricao', + 'acpperfilcurso.ativo as perfil_ativo', + 'acpofertaturma.ofertaturmaid', + 'acpofertaturma.codigo as turma_codigo', + 'acpofertaturma.descricao as turma_descricao', + 'acpofertaturma.datainicialoferta', + 'acpofertaturma.datafinaloferta', + 'acpofertaturma.dataencerramento', + 'acpofertaturma.datainicialaulas', + 'acpofertaturma.datafinalaulas', + 'acpofertaturma.datainicialinscricao', + 'acpofertaturma.datafinalinscricao', + 'acpofertaturma.datainicialmatricula', + 'acpofertaturma.datafinalmatricula', + 'acpofertaturma.minimoalunos', + 'acpofertaturma.maximoalunos', + 'acpofertaturma.centerid', + 'acpofertaturma.unitid', + 'acpofertaturma.habilitada', + ) + ->first(); + + if (!$cursoDados) throw new Exception("Dados do Curso insuficientes, verificar situação e período de oferta e turma"); + + // Matriz Curricular pode ter 1 ou mais resultados + $matrizCurricularDados = DB::table('public.acpmatrizcurricular') + ->where('public.acpmatrizcurricular.cursoid', $cursoDados->cursoid) + ->join( + 'public.acpmatrizcurriculargrupo', + 'public.acpmatrizcurricular.matrizcurricularid', + '=', + 'public.acpmatrizcurriculargrupo.matrizcurricularid', + ) + ->select( + 'acpmatrizcurricular.matrizcurricularid', + 'acpmatrizcurricular.componentecurricularid', + 'acpmatrizcurricular.descricao as matrizcurricular_descricao', + 'acpmatrizcurriculargrupo.matrizcurriculargrupoid', + 'acpmatrizcurriculargrupo.descricao as matrizcurriculargrupo_descricao', + ) + ->get(); + + if (!$matrizCurricularDados) throw new Exception("Dados da Matriz Curricular insuficientes"); + + // Componente Curricular (ou Unidade) pode ter 1 ou mais resultados + $componenteCurricularDados = DB::table('public.acpofertacomponentecurricular') + ->where('public.acpofertacomponentecurricular.ofertaturmaid', $turmaId) + ->join( + 'public.acpcomponentecurricularmatriz', + 'public.acpofertacomponentecurricular.componentecurricularmatrizid', + '=', + 'public.acpcomponentecurricularmatriz.componentecurricularmatrizid' + ) + ->join( + 'public.acpmatrizcurriculargrupo', + 'public.acpcomponentecurricularmatriz.matrizcurriculargrupoid', + '=', + 'public.acpmatrizcurriculargrupo.matrizcurriculargrupoid', + ) + ->join( + 'public.acpmatrizcurricular', + 'public.acpmatrizcurriculargrupo.matrizcurricularid', + '=', + 'public.acpmatrizcurricular.matrizcurricularid', + ) + ->select( + 'acpofertacomponentecurricular.ofertacomponentecurricularid', + 'acpofertacomponentecurricular.componentecurricularmatrizid', + 'acpcomponentecurricularmatriz.matrizcurriculargrupoid', + 'acpmatrizcurriculargrupo.matrizcurricularid', + 'acpmatrizcurricular.situacao', + 'acpmatrizcurricular.descricao', + ) + ->get(); + + if (!$componenteCurricularDados) throw new Exception("Dados do Componente Curricular insuficientes"); return [ 'cursoDados' => $cursoDados, @@ -181,7 +171,6 @@ private function salvaInscricao($cursoDados, $personid) $result = DB::table('public.acpinscricao') ->insertGetId( [ - // 'username' => 'current_user()', 'datetime' => 'NOW()', 'ipaddress' => '127.0.0.1', 'personid' => $personid, @@ -350,9 +339,9 @@ public function inscreveAluno($turmaId, $personid) } DB::commit(); - } catch (\Throwable $e) { + } catch (Exception $e) { DB::rollback(); - throw new \Exception('Não foi possível realizar a inscrição'); + throw new Exception('Não foi possível realizar a inscrição. ' . $e->getMessage()); } $result = [ From a1671dcf6630b78cf5560f55794b27e15f69fd99 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 2 Sep 2022 19:15:19 -0300 Subject: [PATCH 15/21] feat: adiciona StudentDAO --- app/DAO/EnsinoPesquisaExtensao/StudentDAO.php | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 app/DAO/EnsinoPesquisaExtensao/StudentDAO.php diff --git a/app/DAO/EnsinoPesquisaExtensao/StudentDAO.php b/app/DAO/EnsinoPesquisaExtensao/StudentDAO.php new file mode 100644 index 0000000..7bf66b9 --- /dev/null +++ b/app/DAO/EnsinoPesquisaExtensao/StudentDAO.php @@ -0,0 +1,64 @@ +select('personid') + ->where('public.basphysicalpersonstudent.personid', $personid) + ->first(); + + return $result; + } + + public function insert(Student $student) + { + $studentExists = $this->findByPersonId($student->personid); + + if ($studentExists) { + return $student->personid; + } + + DB::beginTransaction(); + try { + $insertStudent = DB::table('public.basphysicalpersonstudent') + ->insert([ + 'personid' => $student->personid, + 'name' => $student->name, + 'email' => $student->email, + 'password' => $student->password, + 'cityid' => $student->cityid, + 'zipcode' => $student->zipcode, + 'location' => $student->location, + 'number' => $student->number, + 'complement' => $student->complement, + 'neighborhood' => $student->neighborhood, + 'sex' => $student->sex, + 'datebirth' => $student->datebirth, + 'cellphone' => $student->cellphone, + 'residentialphone' => $student->residentialphone, + 'maritalstatusid' => $student->maritalstatusid, + 'miolousername' => $student->miolousername, + 'namesearch' => $student->namesearch + ]); + if (!$insertStudent) throw new Exception("Não foi possível inserir Estudante"); + + $result = $student->personid; + + DB::commit(); + } catch (\Exception $e) { + DB::rollback(); + throw new \Exception('Erro: ' . $e->getMessage()); + } + + return $result; + } +} From 3f6d5049ae71e12beae26319eb11cc7322018cbb Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 2 Sep 2022 19:15:34 -0300 Subject: [PATCH 16/21] feat: adiciona UserDAO --- app/DAO/EnsinoPesquisaExtensao/UserDAO.php | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 app/DAO/EnsinoPesquisaExtensao/UserDAO.php diff --git a/app/DAO/EnsinoPesquisaExtensao/UserDAO.php b/app/DAO/EnsinoPesquisaExtensao/UserDAO.php new file mode 100644 index 0000000..0dfbaa4 --- /dev/null +++ b/app/DAO/EnsinoPesquisaExtensao/UserDAO.php @@ -0,0 +1,54 @@ +select('iduser', 'login') + ->where('miolo_user.login', $login) + ->first(); + + return $mioloUser; + } + + public function addGroupUser($login, $idgroup) + { + $unitEspId = 1; + + $user = $this->getUser($login); + + if (!$user) { + throw new Exception("Login não existente na base de dados"); + } + + $userBelongsToGroup = DB::table('public.miolo_groupuser') + ->select('*') + ->where('miolo_groupuser.iduser', $user->iduser) + ->where('miolo_groupuser.idgroup', $idgroup) + ->exists(); + + if ($userBelongsToGroup) { + return $userBelongsToGroup; + } + + try { + $result = DB::table('public.miolo_groupuser') + ->insert([ + 'iduser' => $user->iduser, + 'idgroup' => $idgroup, + 'unitid' => $unitEspId + ]); + } catch (Throwable $e) { + throw $e; + } + + return $result; + } +} From b8d1b2250959aae61c5d07908ac96d7a03ee0fa6 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 2 Sep 2022 19:16:22 -0300 Subject: [PATCH 17/21] refactor: inclusao do service no controller --- .../IncricaoController.php | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php b/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php index ac845ac..771ce33 100644 --- a/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php +++ b/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php @@ -2,22 +2,29 @@ namespace App\Http\Controllers\EnsinoPesquisaExtensao; -use App\DAO\EnsinoPesquisaExtensao\PersonDAO; -use App\DAO\EnsinoPesquisaExtensao\CursoDAO; -use App\Http\Controllers\Controller; -use Illuminate\Support\Facades\Validator; use Illuminate\Http\Request; use Illuminate\Http\Response; +use App\Http\Controllers\Controller; +use Illuminate\Support\Facades\Validator; +use App\Services\EnsinoPesquisaExtensao\InscricaoService; +use Exception; class IncricaoController extends Controller { + private $inscricaoService; + + public function __construct( + InscricaoService $inscricaoService + ) { + $this->inscricaoService = $inscricaoService; + } + public function index(Request $request, $turmaId) { - $data = $request->all(); $validator = Validator::make($data, [ - 'cpf_aluno' => 'required|cpf', + 'cpf' => 'required|cpf', ]); try { @@ -32,20 +39,13 @@ public function index(Request $request, $turmaId) ); } - $personid = (new PersonDAO())->getPersonId($data['cpf_aluno']); - - $inscricao = (new CursoDAO())->inscreveAluno($turmaId, $personid); + $inscricao = $this->inscricaoService->subscribeAndEnrollToCourse( + $data['cpf'], + $turmaId + ); - if (!$inscricao) { - return response()->json( - [ - 'sucesso' => false, - 'mensagem' => 'Não foi possível inscrever a pessoa.' - ], - Response::HTTP_BAD_REQUEST - ); - } - } catch (\Exception $e) { + if (!$inscricao) throw new Exception("Não foi possível inscrever a pessoa"); + } catch (Exception $e) { return response()->json( [ 'sucesso' => false, @@ -58,7 +58,7 @@ public function index(Request $request, $turmaId) return response()->json( [ 'sucesso' => true, - 'inscricao_id' => $inscricao['inscricao_id'] + 'inscricao' => $inscricao ], Response::HTTP_OK ); From a163f2261a67742e419e2ccaa36c7c76cc65c8fc Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 2 Sep 2022 19:16:43 -0300 Subject: [PATCH 18/21] feat: adiciona model Person --- app/Model/EnsinoPesquisaExtensao/Person.php | 38 +++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 app/Model/EnsinoPesquisaExtensao/Person.php diff --git a/app/Model/EnsinoPesquisaExtensao/Person.php b/app/Model/EnsinoPesquisaExtensao/Person.php new file mode 100644 index 0000000..9758c66 --- /dev/null +++ b/app/Model/EnsinoPesquisaExtensao/Person.php @@ -0,0 +1,38 @@ +perfil; + } + + public function setPerfil($perfilId) + { + $this->perfil = $perfilId; + } +} From a5e2d723ecc939e23450b77c564c1b1369c62a63 Mon Sep 17 00:00:00 2001 From: fpontef Date: Fri, 2 Sep 2022 19:17:29 -0300 Subject: [PATCH 19/21] feat: adiciona model Student --- app/Model/EnsinoPesquisaExtensao/Student.php | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 app/Model/EnsinoPesquisaExtensao/Student.php diff --git a/app/Model/EnsinoPesquisaExtensao/Student.php b/app/Model/EnsinoPesquisaExtensao/Student.php new file mode 100644 index 0000000..f998f87 --- /dev/null +++ b/app/Model/EnsinoPesquisaExtensao/Student.php @@ -0,0 +1,30 @@ + Date: Fri, 2 Sep 2022 19:18:36 -0300 Subject: [PATCH 20/21] feat: adiciona InscricaoService --- .../InscricaoService.php | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 app/Services/EnsinoPesquisaExtensao/InscricaoService.php diff --git a/app/Services/EnsinoPesquisaExtensao/InscricaoService.php b/app/Services/EnsinoPesquisaExtensao/InscricaoService.php new file mode 100644 index 0000000..0e88675 --- /dev/null +++ b/app/Services/EnsinoPesquisaExtensao/InscricaoService.php @@ -0,0 +1,63 @@ +getPersonId($cpf); + if (!$personid) throw new Exception("Não foi possível encontrar a pessoa pelo cpf"); + + $person = $personDAO->getPhysicalPerson($personid); + if (!$person) throw new Exception("Não foi possível encontrar a Pessoa Física"); + + $student = new Student(); + + foreach ($person as $key => $value) { + $student->$key = $value; + } + + // Converte a Pessoa Física em Aluno + $studentDAO = new StudentDAO(); + $newStudent = $studentDAO->insert($student); + if (!$newStudent) throw new Exception("Erro ao inserir Estudante"); + + // Adiciona User pelo 'login' ao grupo de Estudantes + $user = (new UserDAO)->addGroupUser( + $person->miolousername, + Person::DEFAULT_GROUP_STUDENT_ID + ); + if (!$user) throw new Exception("Erro ao inserir User no grupo de Estudante"); + + $inscricao = (new CursoDAO())->inscreveAluno( + $turmaId, + $newStudent + ); + + if (!$inscricao) throw new Exception("Erro ao inscrever Estudante"); + + DB::commit(); + } catch (Exception $e) { + DB::rollback(); + throw new Exception("Erro: " . $e->getMessage()); + } + + return $inscricao; + } +} From 9c0dc8f272607055a6a842ddbb7baa152492105e Mon Sep 17 00:00:00 2001 From: fpontef Date: Thu, 8 Sep 2022 09:10:44 -0300 Subject: [PATCH 21/21] =?UTF-8?q?refactor:=20adiciona=20coment=C3=A1rios?= =?UTF-8?q?=20phpdoc=20e=20c=C3=B3digo=20nas=20Exceptions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/DAO/EnsinoPesquisaExtensao/CursoDAO.php | 71 +++++++++++++++++-- app/DAO/EnsinoPesquisaExtensao/PersonDAO.php | 18 +++++ app/DAO/EnsinoPesquisaExtensao/StudentDAO.php | 25 +++++-- app/DAO/EnsinoPesquisaExtensao/UserDAO.php | 19 ++++- .../IncricaoController.php | 8 ++- .../InscricaoService.php | 23 ++++-- 6 files changed, 142 insertions(+), 22 deletions(-) diff --git a/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php b/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php index 90be29c..6f6cb81 100644 --- a/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php +++ b/app/DAO/EnsinoPesquisaExtensao/CursoDAO.php @@ -8,6 +8,13 @@ class CursoDAO { + /** + * Busca inscrição ou matrícula ativa da pessoa na turma informada + * + * @param string $turmaid + * @param string $personid + * @return boolean + */ public function verificaInscricaoAtivaNaTurma($turmaid, $personid) { $queryInscricao = DB::select( @@ -29,12 +36,18 @@ public function verificaInscricaoAtivaNaTurma($turmaid, $personid) ); if ($queryInscricao || $queryMatricula) { - throw new Exception('Pessoa possui Inscrição ou Matrícula ativa.'); + throw new Exception('Pessoa possui Inscrição ou Matrícula ativa.', 400); } return false; } + /** + * Pega dados necessários para inscrição e matrícula no SAGU via id da turma + * + * @param string $turmaId + * @return array Array de objetos + */ public function getCursoDados($turmaId) { $cursoDados = DB::table('public.acpofertaturma') @@ -103,7 +116,10 @@ public function getCursoDados($turmaId) ) ->first(); - if (!$cursoDados) throw new Exception("Dados do Curso insuficientes, verificar situação e período de oferta e turma"); + if (!$cursoDados) throw new Exception( + "Dados de curso insuficientes, verificar oferta e turma.", + 500 + ); // Matriz Curricular pode ter 1 ou mais resultados $matrizCurricularDados = DB::table('public.acpmatrizcurricular') @@ -123,7 +139,7 @@ public function getCursoDados($turmaId) ) ->get(); - if (!$matrizCurricularDados) throw new Exception("Dados da Matriz Curricular insuficientes"); + if (!$matrizCurricularDados) throw new Exception("Dados da Matriz Curricular insuficientes", 500); // Componente Curricular (ou Unidade) pode ter 1 ou mais resultados $componenteCurricularDados = DB::table('public.acpofertacomponentecurricular') @@ -156,7 +172,7 @@ public function getCursoDados($turmaId) ) ->get(); - if (!$componenteCurricularDados) throw new Exception("Dados do Componente Curricular insuficientes"); + if (!$componenteCurricularDados) throw new Exception("Dados do Componente Curricular insuficientes", 500); return [ 'cursoDados' => $cursoDados, @@ -166,6 +182,13 @@ public function getCursoDados($turmaId) } // Inserts + /** + * Salva Inscrição + * + * @param object $cursoDados + * @param string $personid + * @return string + */ private function salvaInscricao($cursoDados, $personid) { $result = DB::table('public.acpinscricao') @@ -186,6 +209,14 @@ private function salvaInscricao($cursoDados, $personid) return $result; } + /** + * Salva Vínculo de Inscrição do Estudante no Curso. + * Utilizado no SAGU para consulta da situação final do estudante. + * + * @param object $cursoDados + * @param string $personid + * @return string + */ private function salvaInscricaoCurso($cursoDados, $personid) { $result = DB::table('public.acpcursoinscricao') @@ -201,6 +232,16 @@ private function salvaInscricaoCurso($cursoDados, $personid) return $result; } + /** + * Salva dados necessários inscrição caso curso permiteinscricaoporgrupo + * + * @param string $inscricaoId + * @param string $personid + * @param object $cursoDados + * @param object $matrizCurricularDados + * @param object $componenteCurricularDados + * @return array + */ private function salvaInscricaoPorGrupo( $inscricaoId, $personid, @@ -251,6 +292,16 @@ private function salvaInscricaoPorGrupo( return $inscricaoCompCurricularIds; } + /** + * Salva dados necessários inscrição caso curso não possua + * permiteinscricaoporgrupo como verdadeiro + * + * @param string $inscricaoId + * @param string $personid + * @param object $cursoDados + * @param object $componenteCurricularDados + * @return array + */ private function salvaInscricaoPorUnidade( $inscricaoId, $personid, @@ -292,6 +343,16 @@ private function salvaInscricaoPorUnidade( return $inscricaoCompCurricularIds; } + /** + * Inscreve aluno na turma informada + * + * @param string $turmaId + * @param string $personid + * + * @throws Exception + * + * @return array + */ public function inscreveAluno($turmaId, $personid) { $verificaInscricaoAtivaNaTurma = $this->verificaInscricaoAtivaNaTurma( @@ -341,7 +402,7 @@ public function inscreveAluno($turmaId, $personid) DB::commit(); } catch (Exception $e) { DB::rollback(); - throw new Exception('Não foi possível realizar a inscrição. ' . $e->getMessage()); + throw new Exception('Não foi possível concluir o processo de inscrição. ' . $e->getMessage(), 500); } $result = [ diff --git a/app/DAO/EnsinoPesquisaExtensao/PersonDAO.php b/app/DAO/EnsinoPesquisaExtensao/PersonDAO.php index f7a8c1a..f3122a3 100644 --- a/app/DAO/EnsinoPesquisaExtensao/PersonDAO.php +++ b/app/DAO/EnsinoPesquisaExtensao/PersonDAO.php @@ -8,6 +8,12 @@ class PersonDAO { + /** + * Deixa somente números no cpf + * + * @param string $cpf + * @return string + */ private function limpaCPF($cpf) { $regexApenasNum = '/[^0-9]/'; @@ -16,6 +22,12 @@ private function limpaCPF($cpf) return $valor; } + /** + * Busca cadastro da pessoa via cpf + * + * @param string $cpf + * @return string + */ public function getPersonId($cpf) { $_miolousername = $this->limpaCPF($cpf); @@ -29,6 +41,12 @@ public function getPersonId($cpf) return $result; } + /** + * Retorna Pessoa Física + * + * @param string $personid + * @return Person + */ public function getPhysicalPerson($personid) { $result = DB::table('public.basphysicalperson') diff --git a/app/DAO/EnsinoPesquisaExtensao/StudentDAO.php b/app/DAO/EnsinoPesquisaExtensao/StudentDAO.php index 7bf66b9..f901cb5 100644 --- a/app/DAO/EnsinoPesquisaExtensao/StudentDAO.php +++ b/app/DAO/EnsinoPesquisaExtensao/StudentDAO.php @@ -8,7 +8,12 @@ class StudentDAO { - + /** + * Busca Pessoa Física Estudante + * + * @param string $personid + * @return \stdClass|object|null + */ public function findByPersonId($personid) { $result = DB::table('public.basphysicalpersonstudent') @@ -19,11 +24,22 @@ public function findByPersonId($personid) return $result; } + /** + * Adiciona o perfil de Pessoa Física Estudante + * + * @param Student $student + * + * @throws Exception + * + * @return string + */ public function insert(Student $student) { $studentExists = $this->findByPersonId($student->personid); if ($studentExists) { + // A tabela basphysicalpersonstudent não gera um novo id, + // herda o mesmo personid da tabela basperson return $student->personid; } @@ -49,14 +65,15 @@ public function insert(Student $student) 'miolousername' => $student->miolousername, 'namesearch' => $student->namesearch ]); - if (!$insertStudent) throw new Exception("Não foi possível inserir Estudante"); + + if (!$insertStudent) throw new Exception("Não foi possível inserir Estudante", 500); $result = $student->personid; DB::commit(); - } catch (\Exception $e) { + } catch (Exception $e) { DB::rollback(); - throw new \Exception('Erro: ' . $e->getMessage()); + throw new Exception('Erro: ' . $e->getMessage(), 500); } return $result; diff --git a/app/DAO/EnsinoPesquisaExtensao/UserDAO.php b/app/DAO/EnsinoPesquisaExtensao/UserDAO.php index 0dfbaa4..23cef81 100644 --- a/app/DAO/EnsinoPesquisaExtensao/UserDAO.php +++ b/app/DAO/EnsinoPesquisaExtensao/UserDAO.php @@ -4,10 +4,15 @@ use Exception; use Illuminate\Support\Facades\DB; -use Throwable; class UserDAO { + /** + * Encontra o User (Login) + * + * @param string $login é o cpf nas regras atuais + * @return object + */ public function getUser($login) { $mioloUser = DB::table('public.miolo_user') @@ -18,6 +23,13 @@ public function getUser($login) return $mioloUser; } + /** + * Adiciona User ao Grupo solicitado + * + * @param string $login + * @param string $idgroup + * @return boolean + */ public function addGroupUser($login, $idgroup) { $unitEspId = 1; @@ -25,7 +37,7 @@ public function addGroupUser($login, $idgroup) $user = $this->getUser($login); if (!$user) { - throw new Exception("Login não existente na base de dados"); + throw new Exception("Login não existente na base de dados", 500); } $userBelongsToGroup = DB::table('public.miolo_groupuser') @@ -34,6 +46,7 @@ public function addGroupUser($login, $idgroup) ->where('miolo_groupuser.idgroup', $idgroup) ->exists(); + // Se já pertencer ao grupo, retorna true, evitando novo insert if ($userBelongsToGroup) { return $userBelongsToGroup; } @@ -45,7 +58,7 @@ public function addGroupUser($login, $idgroup) 'idgroup' => $idgroup, 'unitid' => $unitEspId ]); - } catch (Throwable $e) { + } catch (Exception $e) { throw $e; } diff --git a/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php b/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php index 771ce33..fa8d6a2 100644 --- a/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php +++ b/app/Http/Controllers/EnsinoPesquisaExtensao/IncricaoController.php @@ -35,7 +35,7 @@ public function index(Request $request, $turmaId) 'sucesso' => false, 'mensagem' => $validator->errors()->first() ], - Response::HTTP_BAD_REQUEST + Response::HTTP_INTERNAL_SERVER_ERROR ); } @@ -44,14 +44,16 @@ public function index(Request $request, $turmaId) $turmaId ); - if (!$inscricao) throw new Exception("Não foi possível inscrever a pessoa"); + if (!$inscricao) throw new Exception("Não foi possível inscrever a pessoa", 500); } catch (Exception $e) { return response()->json( [ 'sucesso' => false, 'mensagem' => $e->getMessage() ], - Response::HTTP_BAD_REQUEST + $e->getCode() === 500 + ? Response::HTTP_INTERNAL_SERVER_ERROR + : Response::HTTP_BAD_REQUEST ); } diff --git a/app/Services/EnsinoPesquisaExtensao/InscricaoService.php b/app/Services/EnsinoPesquisaExtensao/InscricaoService.php index 0e88675..289f53f 100644 --- a/app/Services/EnsinoPesquisaExtensao/InscricaoService.php +++ b/app/Services/EnsinoPesquisaExtensao/InscricaoService.php @@ -13,6 +13,16 @@ class InscricaoService { + /** + * Inscreve e Matricula um estudante via CPF na turma + * + * @param string $cpf + * @param string $turmaId + * + * @throws Exception + * + * @return array + */ public function subscribeAndEnrollToCourse($cpf, $turmaId) { @@ -22,10 +32,10 @@ public function subscribeAndEnrollToCourse($cpf, $turmaId) $personDAO = new PersonDAO(); $personid = $personDAO->getPersonId($cpf); - if (!$personid) throw new Exception("Não foi possível encontrar a pessoa pelo cpf"); + if (!$personid) throw new Exception("Não foi possível encontrar a pessoa pelo cpf", 500); $person = $personDAO->getPhysicalPerson($personid); - if (!$person) throw new Exception("Não foi possível encontrar a Pessoa Física"); + if (!$person) throw new Exception("Não foi possível encontrar a Pessoa Física", 500); $student = new Student(); @@ -36,26 +46,25 @@ public function subscribeAndEnrollToCourse($cpf, $turmaId) // Converte a Pessoa Física em Aluno $studentDAO = new StudentDAO(); $newStudent = $studentDAO->insert($student); - if (!$newStudent) throw new Exception("Erro ao inserir Estudante"); + if (!$newStudent) throw new Exception("Erro ao inscrever User no perfil de Estudante", 500); // Adiciona User pelo 'login' ao grupo de Estudantes $user = (new UserDAO)->addGroupUser( $person->miolousername, Person::DEFAULT_GROUP_STUDENT_ID ); - if (!$user) throw new Exception("Erro ao inserir User no grupo de Estudante"); + if (!$user) throw new Exception("Erro ao inserir User no Grupo de Estudante", 500); $inscricao = (new CursoDAO())->inscreveAluno( $turmaId, $newStudent ); - - if (!$inscricao) throw new Exception("Erro ao inscrever Estudante"); + if (!$inscricao) throw new Exception("Erro ao inscrever Estudante", 500); DB::commit(); } catch (Exception $e) { DB::rollback(); - throw new Exception("Erro: " . $e->getMessage()); + throw $e; } return $inscricao;