Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added API Cursos.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 0 additions & 21 deletions LICENSE

This file was deleted.

108 changes: 79 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,79 @@
# Desafio Celso Lisboa para FullStack

### Cenário

**Como** Coordenador Acadêmico de uma Instituição de Ensino
**Eu preciso** realizar a gestão dos cursos oferecidos pela Instituição, com seus respectivos professores, salas e horários
**Para** que o setor de Marketing possa vender os cursos online.

### Segue instruções para realizar o desafio

1. Faça um fork deste repositório.
2. Baseado no cenário acima, modele e crie o esquema do banco de dados para armazenar as informações normalizadas.
* Comite a imagem em jpg ou png do DER e o script do DDL.
3. Desenvolva uma API REST para realizar as operações necessárias com o banco de dados criado.
4. Baseado nas imagens `wireframe/1-login-mobile.png` e `wireframe/2-login-desktop.png`, crie a tela de login da aplicação.
* Considere apenas uma validação simples por e-mail e senha.
* Não existe a necessidade de CRUD de usuário, recuperação de senha ou outra operação mais complexa.
5. Baseado nas imagens `wireframe/3-cursos-mobile.png` e `wireframe/4-cursos-desktop.png`, crie a tela de visualização e deleção de cursos.
* Deve conter as informações de horário, professor e sala.
6. Baseado nas imagens `wireframe/5-detalhe-mobile.png` e `wireframe/6-detalhe-desktop.png`, crie a tela de criação e alteração de cursos.
* Os campos de professor e sala deverão ser um multi-select.
* Não existe a necessidade de CRUD de professor e sala.
7. Realizar um Pull Request para este repositório, com instruções necessárias para instalação e instânciação dos sistemas.

### O que será avaliado

1. Fidelidade às instruções e ao cenário.
2. Clean Code e boas práticas.
3. Boas práticas de versionamento.
API Curso

#Introdução</br>

Esta API executa um CRUD de informações sobre curso.
Exibindo no formato JSON: curso, Professor, Sala, Horário de início e horário de fim.
Este projeto é simples e básico.
O intuito deste é mostrar de forma fácil como consumir dados utilizando padrão Rest.

#Instalação</br>

1- Utilize o arquivo apiCursos.sql, para a criação da base de dados.</br>
2- Modifique o arquivo api/config/config.php, com as informações para acessar o banco de dados MYSQL.</br>
3- Crie um diretório no servidor web com o nome "curso" e baixe e descompacte o conteúdo deste repositório.</br>
4- Por padrão usuario: admin@admin.com e senha: 123456.</br>

#Sobre</br>

Neste projeto foi utilizado o AJAX para comunicação da interface com a API. </br>
Não foi utilizado validações de sala, horário, autenticação dentro outras deixando o projeto o mais básico possível.</br>

#Autenticação</br>

Não existe autenticação com a API. O login é básico utilizando apenas autenticação de usuario e senha.</br>

#Codigos de Erro</br>

Codigos de status e erros.</br>

create</br>
201 - Cadastrado com sucesso. </br>
503 - Serviço indisponível, problemas para criar o curso. </br>
400 - Dados incompetos.</br>

Delete</br>
200 - O curso foi deletado com sucesso. </br>
503 - Serviço indisponível, problemas para deletar o curso</br>

Loging</br>
200 - Logado com sucesso. </br>
503 - Erro ao logar.</br>

read_one</br>
200 - Curso localizado com sucesso. </br>
503 - Curso não existe.</br>

read_paging</br>
200 - Sucesso na paginação. </br>
404 - Nenhum curso encontrado.</br>

read</br>
200 - listar cursos com sucesso. </br>
404 - Nenhum curso encontrado.</br>

search</br>
200 - curso localizado com sucesso. </br>
404 - Nenhum curso encontrado.</br>

update</br>
200 - Curso atualizado com sucesso. </br>
503 - Serviço indisponível, problemas para atualizar o curso.</br>

----------------------------------------------------
#Rotas</br>

Lista os cursos</br>
POST curso/api/curso/read.php</br>

Lista o curso selecionado pelo idcurso</br>
GET curso/api/curso/read_one.php?idcurso=</br>

Deleta o curso selecionado pelo idcurso</br>
GET curso/api/curso/delete.php?idcurso=</br>

Cadastra curso</br>
POST curso/api/curso/create.php</br>

Atualiza dados de um curso selecionado pelo idcurso</br>
GET curso/api/curso/update.php?idcurso=</br>
8 changes: 8 additions & 0 deletions api/config/config.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

define('DB_NAME','apicursos');
define('DB_HOST', 'localhost');
define('DB_USER','');
define('DB_PASS','');
?>

17 changes: 17 additions & 0 deletions api/config/core.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php
// show error reporting
ini_set('display_errors', 1);
error_reporting(E_ALL);

// home page url
$home_url="http://localhost:88/apirest/trunk/api/";

// page given in URL parameter, default page is one
$page = isset($_GET['page']) ? $_GET['page'] : 1;

// set number of records per page
$records_per_page = 5;

// calculate for the query LIMIT clause
$from_record_num = ($records_per_page * $page) - $records_per_page;
?>
31 changes: 31 additions & 0 deletions api/config/database.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

require_once 'config.php';

class Database{

private static $instance;

public static function getConnection(){

if(!isset(self::$instance)){

try {
self::$instance = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS);
self::$instance->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$instance->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch (PDOException $e) {
echo $e->getMessage();
}

}

return self::$instance;
}

public static function prepare($sql){
return self::getConnection()->prepare($sql);
}

}
?>
71 changes: 71 additions & 0 deletions api/curso/create.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

// get database connection
include_once '../config/database.php';

// instantiate product object
include_once '../objetos/curso.php';

$database = new Database();
$db = $database->getConnection();

$curso = new Curso($db);

// get posted data

$data = json_decode(file_get_contents("php://input"));

// make sure data is not empty
if(
!empty($data->curso) &&
!empty($data->idprofessor) &&
!empty($data->idsala) &&
!empty($data->inicio) &&
!empty($data->fim)
){

// set curso property values
$curso->curso = $data->curso;
$curso->idprofessor = $data->idprofessor;
$curso->idsala = $data->idsala;
$curso->inicio = $data->inicio;
$curso->fim = $data->fim;

// create the curso
if($curso->create()){

// set response code - 201 created
http_response_code(201);

// tell the user
echo json_encode(array("message" => "Curso de ".$curso->curso." criado com sucesso."));
}

// if unable to create the product, tell the user
else{

// set response code - 503 service unavailable
http_response_code(503);

// tell the user
echo json_encode(array("message" => "Problemas para criar o Curso."));
}
}

// tell the user data is incomplete
else{

// set response code - 400 bad request
http_response_code(400);

// tell the user
echo json_encode(array("message" => "Problemas para criar o Curso. Dados incompletos."));

}
?>
46 changes: 46 additions & 0 deletions api/curso/delete.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

// include database and object file
include_once '../config/database.php';
include_once '../objetos/curso.php';

// get database connection
$database = new Database();
$db = $database->getConnection();

// prepare curso object
$curso = new Curso($db);

// get curso id
//$data = json_decode(file_get_contents("php://input"));

// set curso id to be deleted
$curso->idcurso = isset($_GET['idcurso']) ? $_GET['idcurso'] : die();
//$curso->idcurso = $data->idcurso;

// delete the curso
if($curso->delete()){

// set response code - 200 ok
http_response_code(200);

// tell the user
echo json_encode(array("message" => "O Curso foi deletado."));
}

// if unable to delete the curso
else{

// set response code - 503 service unavailable
http_response_code(503);

// tell the user
echo json_encode(array("message" => "Problemas para deletar o Curso."));
}
?>
51 changes: 51 additions & 0 deletions api/curso/loging.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: access");
header("Access-Control-Allow-Methods: GET");
header("Access-Control-Allow-Credentials: true");
header('Content-Type: application/json');

// include database and object files
include_once '../config/database.php';
include_once '../objetos/curso.php';

// get database connection
$database = new Database();
$db = $database->getConnection();

// prepare curso object
$curso = new Curso($db);

$data = json_decode(file_get_contents("php://input"));

// set ID property of record to read
$curso->usuario = $data->usuario;
$curso->senha = $data->senha;

// read the details of curso to be edited
$curso->login();

if($curso->usuario!=null){
// create array
$curso_arr = array(
"usuario" => $curso->usuario
);

// set response code - 200 OK
http_response_code(200);

// make it json format
session_start();
$_SESSION['usuario'] = $curso->usuario;
$_SESSION['id'] = session_id();
echo json_encode(array("message" => "Logado com sucesso."));
}

else{
// set response code -
http_response_code(503);

echo json_encode(array("message" => "Erro ao logar."));
}
?>
Loading