Projeto

CRUD: Estrutura de Gestão Organizacional - Colaborador

CRUD: Estrutura de Gestão Organizacional - Colaborador

Fabrício de Medeiros

CRUD para gerenciar os colaboradores da Medeiros Corporation Inc., seguindo a mesma estrutura de boas práticas. Aqui está o guia passo a passo para implementar isso:

Estrutura do Projeto

Estrutura de Arquivos:

library-system
├── src
│   ├── Controller
│   │   ├── CollaboratorController.php
│   ├── Model
│   │   ├── Collaborator.php
│   ├── View
│   │   ├── CollaboratorView.php
│   ├── Service
│   │   ├── CollaboratorService.php
├── public
│   └── index.php
├── config
│   └── database.php
├── vendor
└── composer.json

1. Modelo (Model)

src/Model/Collaborator.php

<?php

namespace LibrarySystem\Model;

class Collaborator {
    private $id_collaborator;
    private $name;
    private $email;
    private $position_id;

    // Getters and Setters
    public function getIdCollaborator() {
        return $this->id_collaborator;
    }

    public function setIdCollaborator($id) {
        $this->id_collaborator = (int)$id; // Sanitização
    }

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = htmlspecialchars(strip_tags($name)); // Sanitização
    }

    public function getEmail() {
        return $this->email;
    }

    public function setEmail($email) {
        $this->email = filter_var($email, FILTER_SANITIZE_EMAIL); // Sanitização
    }

    public function getPositionId() {
        return $this->position_id;
    }

    public function setPositionId($id) {
        $this->position_id = (int)$id; // Sanitização
    }
}

2. Visualização (View)

src/View/PositionView.php

html
/html

3. Controlador (Controller)

src/Controller/CollaboratorController.php

<?php

namespace LibrarySystem\Controller;

use LibrarySystem\Model\Collaborator;
use LibrarySystem\Service\CollaboratorService;

class CollaboratorController {
    private $collaboratorService;

    public function __construct($dbConnection) {
        $this->collaboratorService = new CollaboratorService($dbConnection);
    }

    public function create() {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $collaborator = new Collaborator();
            $collaborator->setName($_POST['name']);
            $collaborator->setEmail($_POST['email']);
            $collaborator->setPositionId($_POST['position_id']);
            $this->collaboratorService->createCollaborator($collaborator);
            header('Location: /collaborators');
        }
    }

    public function read() {
        $collaborators = $this->collaboratorService->getAllCollaborators();
        include '../src/View/CollaboratorView.php';
    }

    public function update($id) {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $collaborator = new Collaborator();
            $collaborator->setIdCollaborator($id);
            $collaborator->setName($_POST['name']);
            $collaborator->setEmail($_POST['email']);
            $collaborator->setPositionId($_POST['position_id']);
            $this->collaboratorService->updateCollaborator($collaborator);
            header('Location: /collaborators');
        } else {
            $collaborator = $this->collaboratorService->getCollaborator($id);
            include '../src/View/CollaboratorView.php';
        }
    }

    public function delete($id) {
        $this->collaboratorService->deleteCollaborator($id);
        header('Location: /collaborators');
    }
}

4. Serviço (Service)

src/Service/CollaboratorService.php

<?php

namespace LibrarySystem\Service;

use LibrarySystem\Model\Collaborator;

class CollaboratorService {
    private $db;

    public function __construct($dbConnection) {
        $this->db = $dbConnection;
    }

    public function createCollaborator(Collaborator $collaborator) {
        $stmt = $this->db->prepare("INSERT INTO dep_collaborators (name, email, position_id) VALUES (:name, :email, :position_id)");
        $stmt->bindValue(':name', $collaborator->getName());
        $stmt->bindValue(':email', $collaborator->getEmail());
        $stmt->bindValue(':position_id', $collaborator->getPositionId());
        return $stmt->execute();
    }

    public function getAllCollaborators() {
        $stmt = $this->db->query("SELECT * FROM dep_collaborators");
        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function getCollaborator($id) {
        $stmt = $this->db->prepare("SELECT * FROM dep_collaborators WHERE id_collaborator = :id");
        $stmt->bindValue(':id', (int)$id);
        $stmt->execute();
        return $stmt->fetch(\PDO::FETCH_ASSOC);
    }

    public function updateCollaborator(Collaborator $collaborator) {
        $stmt = $this->db->prepare("UPDATE dep_collaborators SET name = :name, email = :email, position_id = :position_id WHERE id_collaborator = :id");
        $stmt->bindValue(':name', $collaborator->getName());
        $stmt->bindValue(':email', $collaborator->getEmail());
        $stmt->bindValue(':position_id', $collaborator->getPositionId());
        $stmt->bindValue(':id', $collaborator->getIdCollaborator());
        return $stmt->execute();
    }

    public function deleteCollaborator($id) {
        $stmt = $this->db->prepare("DELETE FROM dep_collaborators WHERE id_collaborator = :id");
        $stmt->bindValue(':id', (int)$id);
        return $stmt->execute();
    }
}

5. Configuração do Banco de Dados

Verifique se a conexão com o banco de dados está configurada corretamente em config/database.php.

6. Roteamento

Implemente o roteamento em public/index.php para chamar os métodos corretos do controlador de acordo com as requisições.

Considerações Finais

Este CRUD para gerenciamento de colaboradores segue as melhores práticas de sanitização, encapsulamento e um design orientado a objetos. Adapte e expanda conforme necessário para atender às necessidades específicas da Medeiros Corporation Inc.

Editar Voltar