Tip
Seja bem-vindo ao projeto. Tendo como ponto de partida um PDF com instruções e requisitos que deveriam ser mantidos, desenvolvi esta solução. Este arquivo README contém uma documentação sobre a forma como o projeto foi desenvolvido, planejado e algumas dicas para localização dentro das pastas e arquivos. Sinta-se à vontade para se aventurar nesse projeto. Fico grato.
Para explorar rapidamente, utilize o campo de seções, que dispõe de diversos links que redirecionam para os respectivos assuntos.
REVIEW-1.mp4
REVIEW-2.mp4
Site : https://app.diagrams.net
Ferramenta : FigmaConsiderações O diagrama foi desenvolvido durante o planejamento do banco de dados, com a inclusão da tabela
Login
para incorporar o sistema de autenticação. A estrutura foi totalmente desenvolvida de acordo com os requisitos solicitados com pequenas modificações.
Site : https://www.figma.com
Prototipo : https://www.figma.com/design/lzmbasiMZi5VNsu4Hmtku0
Considerações A prototipagem foi feita logo no início do projeto, com o intuito de definir quais páginas seriam desenvolvidas e com a finalidade de estabelecer um estilo padrão, com um menu mais minimalista/simplista. Ao longo do desenvolvimento, ocorreram algumas pequenas modificações apenas para implementar algumas funcionalidades ou aperfeiçoar o layout.
- Net SDK v8.0.3
- Node.js v20.13
- NPM v10.8.0
-
Visual Studio Code
-
Extensões
- Vue - Oficial
- Prettier
- Eslint
- Visual Studio 2022
Caso queira utilizar a aplicação da forma como foi desenvolvida, mantenha as configurações padrão. Neste projeto, as portas "5173" e "44372" estão em uso, e o diretório "C:\Uploads" está sendo utilizado para armazenar os anexos. Caso queira modificar, há instruções na aba configuração.
Frontend - Etapas
Configuração
Alterar Porta Da AplicaçãoAcessar arquivo
/Frontend/vue-project/vite.config.js
Alterar campo :
server: { host: "0.0.0.0", port: 5173 (campo alvo) }
Alterar Porta Da Api
Acessar arquivo
/Frontend/vue-project/src/services/http.js
Alterar campo :
{ baseURL: "https://localhost:44372/api", (Campo alvo) headers: { "Content-type": "application/json" } }
Executar
Entrar no diretoriocd Frontend/vue-project
Instalar Dependências
npm i
Iniciar Projeto
npm run dev
Backend - Etapas
Configuração
Alterar Configurações Da ApiAcessar arquivo
/Backend/PGE/src/appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"FileSettings": {
"FilePath": "C:\\Uploads"
},
"Settings": {
"SqlConnectionString": "Server=DESKTOP-HROQSP2\\SQLEXPRESS;Database=PGE;User Id=user;Password=user;TrustServerCertificate=True",
"CORSorigin": "http://localhost:5173",
"JWTIssuer": "localhost",
"JWTAudience": "http://localhost",
"JWTIssuerKey": "chave_secreta_3129308123#!@#!#sdasd"
},
"AllowedHosts": "*"
}
Configurações
FileSettings:FilePath Configuração do caminho que os anexos vão ser salvos.
Settings:SqlConnectionString Link de conexão com o banco de dados
Settings:CORSorigin Configuração do cors para aceitar requisições no site.
Settings:JWTIssuer Quem está destinando
Settings:JWTAudience Para quem vai ser destinado
Settings:JWTIssuerKey Chave de segurança para a autenticação JWT
Executar
Instalar Dependênciasdotnet restore
Iniciar Projeto
dotnet run --urls=https://localhost:44372/
/public/
Função : responsável pelos arquivos publicos./src/
Função : responsável pelos principais arquivos./src/assets
Função : responsável pelo armazenamentos dos arquivos e imagens utilizados no site./src/components
Função : responsável por armazenar as estruturas/componentes que possam ser reutilizados em outra parte do projeto./src/components/icons
Função : responsável pelo armazenamento dos componentes de icones para serem utilizados durante a elaboração do projeto./src/services
Função : responsável pelos arquivos que auxiliarão na hora de autenticação e utilização das requisições./src/views
Função : responsável pelo armazenamentos das páginas presentes no projeto./src/router
Função : responsável pelo armazenamento de arquivos para o gerenciamento das rotas do site./ - Página Inicial
Tela inicial, onde recepciona o usuário com um bem-vindo e demonstra algumas funcionalidades básicas do site.
/profile - Perfil
Tela de perfil, permite que o usuário veja algumas informações básicas sobre ele e faça a alteração da senha de login.
/login - Login De Usuário
Tela de login, responsável por autenticar e autorizar o acesso do usuário ao sistema.
/process/:id - Visualizar Processo
Tela de visualização de processo, mostra as informações do processo, permitindo que o usuário faça alterações caso seja necessário.
/process/search - Pesquisar Processo
Tela de busca de processo, permite que você navegue e pesquise processos relacionados a você ou outros advogados através da utilização do número de processo.
/process/register - Registrar Processo
Tela de registro do processo, permite que você registre um novo processo caso seja advogado e adicione um cliente alvo do processo, contendo todas as informações referentes ao processo.
/process/edit/:id - Editar Processo
Tela de edição do processo, permite que você faça alterações nos processos existentes que pertençam a você, além de permitir o anexo de arquivos ao processo.
/Controllers
Função : Responsável por manipular os endpoints da aplicação com a atribuição dos métodos./DTOs
Função : responsável por armazenar todas as propriedades e especificidades de uma tabela./Interfaces
Função : Responsável por garantir que as funcionalidades dos models estejam no contexto da aplicação e sejam incluídas./Mappings
Função : Responsável pelo mapeamento das entidades e dos elementos DTO/Models
Função : Responsável pelos modelos de entradas e saídas de informação, além de abranger o contexto do banco de dados./Repositories
Função : Responsável pelos metodos CRUD básicos, manipulando o contexto do banco de dados./Services
Função : Responsável pelo gerenciamento de serviços, tendo presente o arquivo que fornece a autenticação.appsettings.json arquivo de configuração
Swagger https://localhost:44372/swagger/index.html
Login
/api/Login/Validade - GET
Tem como principal finalidade validar se o token do usuário é valido ou não.
/api/Login - POST
Verifica as informações de login, caso sejam válidas, o usuário receberá o token de autenticação.
/api/Login/Register - POST
Cadastra um novo login ao sistema, definindo qual o usuário que vai ser pertencente.
/api/Login/ChangePassword - POST
Redefine a senha do usuário, apenas necessitando da antiga senha e a nova.
Pessoa
/api/Pessoa - GET
Puxa todas as pessoas cadastradas no sistema, esta rota só é acessível para quem tem permissão de admin.
/api/Pessoa/Info - GET
Puxa as informações do usuário que está chamando essa rota, retornando um json com seus dados.
/api/Pessoa/{id} - GET
Puxa as informações de um usuário específico; esta rota é apenas acessível para quem tem permissão de admin.
/api/Pessoa - POST
Adiciona uma nova pessoa ao sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Pessoa - PUT
Edita as informações de uma nova pessoa ao sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Pessoa/{id} - Delete
Deleta a pessoa do sistema, esta função está apenas acessível para quem tem permissão de admin.
Processo
/api/Processo - GET
Puxa todos os processos do sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Processo/List - GET
Puxa todos os processos pertencentes ao usuário, caso seja advogado, retorna os processos de outros advogados também.
/api/Processo/{id} - GET
Puxa as informações de um processo especifico pelo id.
/api/Processo - POST
Cadastra um novo processo ao sistema, porém tem a necessidade do usuário ser um advodago (ter um código oab).
/api/Processo - PUT
Altera informações do processo, porém há a verificação se o usuário realmente é responsável pelo processo (é o advogado proprietário).
/api/Processo/{id} - DELETE
Deleta o processo do sistema, verificando se realmente é o dono do processo (responsável) que está efetuando a ação.
Documento
/api/Documento - GET
Puxa todos os documentos do sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Documento/{id} - GET
Retorna a informação de um arquivo especifico do sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Documento/Download/{id} - GET
Retorna o anexo do documento em arquivo, verificando se o usuário é o cliente ou advogado.
/api/Documento/Processo/{id} - GET
Retorna todos as informações dos documentos pertecentes a um processo.
/api/Documento - POST
Adiciona um novo anexo ao sistema e registra como documento, além de verificar se o usuário que está executando o upload é pertecente ao processo.
/api/Documento - PUT
Modifica as informações especificas de um documento do sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Documento/{id} - DELETE
Deleta o anexo e o documento do sistema, essa função só pode ser executada pelo usuário proprietário ou pertencente ao processo.
Distribuir
/api/Distribuir - GET
Puxa todas as distribuições do sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Distribuir/{id} - GET
Puxa uma distribuição especifica pelo id no sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Distribuir - POST
Adiciona uma nova distribuição no sistema e executa a alteração do responsável do processo, além de salvar o estado do antigo responsável e o novo.
/api/Distribuir - PUT
Altera as informações de uma distribuição especifica pelo id no sistema, esta função está apenas acessível para quem tem permissão de admin.
/api/Distribuir/{id} - DELETE
Deleta uma distribuição especifica pelo id no sistema, esta função está apenas acessível para quem tem permissão de admin.
Sql Server 2022 - Express
Criar Banco De Dados (DDL)
CREATE DATABASE [PGE];
GO
USE [PGE]
GO
CREATE TABLE Pessoa (
id INT IDENTITY(1,1),
nome VARCHAR(255) NOT NULL,
cpf VARCHAR(11) NOT NULL,
oab VARCHAR(20)
CONSTRAINT PK_Pessoa PRIMARY KEY (id),
CONSTRAINT UQ_Pessoa_CPF UNIQUE (cpf)
);
CREATE TABLE Login (
id INT IDENTITY(1,1),
pessoa_id INT NOT NULL,
nome VARCHAR(255) NOT NULL,
password_hash varbinary(MAX) NOT NULL,
password_salt varbinary(MAX) NOT NULL,
admin BIT DEFAULT 0,
CONSTRAINT FK_Login_Pessoa FOREIGN KEY (pessoa_id) REFERENCES Pessoa(id),
CONSTRAINT PK_Login PRIMARY KEY (id),
CONSTRAINT UQ_Login_Pessoa UNIQUE (pessoa_id),
CONSTRAINT UQ_Login_Nome UNIQUE (nome)
);
CREATE TABLE Processo (
id INT IDENTITY(1,1),
numero_processo INT NOT NULL,
parte_id INT NOT NULL,
responsavel_id INT NOT NULL,
tema VARCHAR(255) NOT NULL,
descricao VARCHAR(255),
valor DECIMAL(15, 2),
CONSTRAINT FK_Processo_Parte_Pessoa FOREIGN KEY (parte_id) REFERENCES Pessoa(id),
CONSTRAINT FK_Processo_Responsavel_Pessoa FOREIGN KEY (responsavel_id) REFERENCES Pessoa(id),
CONSTRAINT PK_Processo PRIMARY KEY (id),
CONSTRAINT UQ_Processo_Numero_Processo UNIQUE (numero_processo)
);
CREATE TABLE Documento (
id INT IDENTITY(1,1),
nome VARCHAR(255) NOT NULL,
caminho VARCHAR(255) NOT NULL,
extensao VARCHAR(10) NOT NULL,
processo_id INT NOT NULL,
CONSTRAINT FK_Documento_Processo FOREIGN KEY (processo_id) REFERENCES Processo(id),
CONSTRAINT PK_Documento PRIMARY KEY (id)
);
CREATE TABLE Distribuir (
id INT IDENTITY(1,1),
processo_id INT NOT NULL,
responsavel_antigo_id INT NOT NULL,
responsavel_novo_id INT NOT NULL,
data DATE DEFAULT GETDATE(),
CONSTRAINT FK_Distribuir_Processo FOREIGN KEY (processo_id) REFERENCES Processo(id),
CONSTRAINT FK_Distribuir_Antigo_Pessoa FOREIGN KEY (responsavel_antigo_id) REFERENCES Pessoa(id),
CONSTRAINT FK_Distribuir_Nova_Pessoa FOREIGN KEY (responsavel_novo_id) REFERENCES Pessoa(id),
CONSTRAINT PK_Distribuir PRIMARY KEY (id)
);
Popular Banco De Dados (DML)
-- Inserir Pessoas
INSERT INTO Pessoa (nome, cpf, oab) VALUES ('João Silva', '12345678901', NULL);
INSERT INTO Pessoa (nome, cpf, oab) VALUES ('Maria Oliveira', '23456789012', 'OAB12345');
INSERT INTO Pessoa (nome, cpf, oab) VALUES ('Carlos Santos', '34567890123', NULL);
INSERT INTO Pessoa (nome, cpf, oab) VALUES ('Ana Paula', '45678901234', 'OAB54321');
INSERT INTO Pessoa (nome, cpf, oab) VALUES ('Lucas Pereira', '56789012345', NULL);
-- Inserir Login (nome:senha)
-- joao:joao
INSERT INTO Login (pessoa_id, nome, password_hash, password_salt) VALUES (1, 'joao', 0xE875E4FD8362E2470CA8957C1CFECFDCCEA5D9ACD7AE64E810A09A968783713EA185452291BA51F19A40E1F87EF30002CEFA3061D2F626525F59F10D17609EF2, 0x8DD64079F6FB2508DA05876C05BDE0BAE48B62394B482FA24EDF329D45046BF2114F220317A444EE9241D6E54E33B86C431389F2F1E29F5F2EB5FBBE040B279085DEF2AC17083AEAE0C6133BA19BE21274CC9C89FCBB46228D5748600BE6C4D34BD6F294B763CAC27A4B881126A006C152308E715D52C228949B0503B1E06CFF);
-- maria:maria
INSERT INTO Login (pessoa_id, nome, password_hash, password_salt) VALUES (2, 'maria', 0xC6FE7BAB6582C31DBD22FCBB43BB039D937F97A6B6E9906BC09522C8C3F3A97B8A769C79FC2B79B67FA93856083A6BD8C8E6D5DE183F510F6754EDC0158160A7, 0xDD3EAE07B316B1F8C6B29F8DF1479683498358AF83BB3C7E220172AD47910566F4FD84193DFD3A27B13B89926D5DBED2E19A588A915048FA62C670A58EA7DD25B4F27B9258A171B3BAD9FFC57B0FB88D7FE4A74A85C865CE446D2EE9D630C84FE42C894DC07731F0A79A986E5353E723D4FCCC2E41D4F8AE22FCE2720AD79FD0);
-- carlos:carlos
INSERT INTO Login (pessoa_id, nome, password_hash, password_salt) VALUES (3, 'carlos', 0x269592401A733C657B6B59D9719EF732975CA5CA07E48CED44592C1EAAF986B0355CA75946B726E4F814D56EE6A8F0352C0CAAA59111EE46908D04C6E45379BC, 0xF6B55F083E3525C619C323062FD1BF81794F9A5117A57E12EBD8DD922F3738BB1D87BFA05B9A8130CF689F7E22CAEB603884A0500F1D5C91C14BC39AC53203E817D1204CCF6C1499EC9CA05B614D09831FCEEFEA416061A53C9836320593C5FF631965B3956F27AAF404866704FCA1FAB2C620EBF4B14A1C6AE7038A83B35820);
-- ana:ana (permissão de admin)
INSERT INTO Login (pessoa_id, nome, password_hash, password_salt, admin) VALUES (4, 'ana', 0x8E436DF4F75CDAC326EEA5764D0EF2D5C0C1C639A8C955304CCAB2B065569222C33740A3AE1D4D082A61FEC99BA7ED90EA843A4C21592CF2B4600433D7227257, 0x8427C8D9726A725E601F077A08A0311C8AD7EF96D2785E1737C29AF401CEEE8FA7729A24CF4495A127823EBAD6FBD05EE28CC04E1C060601F6B6B1931E2A78553C6E7609E65004EA8DC44852050C6A41442369E674DDD1005565FA6D442E07A8659D46C3D9AE56A8760488F8865BE07F5DA58F7E60A833AB1DB619A54BD3C19D, 1);
-- lucas:ucas
INSERT INTO Login (pessoa_id, nome, password_hash, password_salt) VALUES (5, 'lucas', 0x96AB305DE5D70C806A479A9151761D8B92DDA7FFD464060268FD3670546A2E248AF53AE08D916B70D7AD8BB14B4490275FD73ACC77EBA7B9DBED1B88580558AD, 0x7B6C192A36FBE64E8A727526DD23D46FE2B67D7C77B2E019BFCE0F4B2E674DD4C099C75CA03138AFBCC9187B1A7FE10340838D7442C96EA1D01E4100842A12AF3C4BDB6FB536C77E9C655B03089336F373CFB2B8FD8A1FF5F1FD4FB7F8799AA4F2B1B8D177F0B7A92B73766283ADC1B8213739B2BD2A5B2B8C6957338AFD742B);
-- Inserir Processos
INSERT INTO Processo (numero_processo, parte_id, responsavel_id, tema, descricao, valor) VALUES (12345, 1, 2, 'Divórcio', 'Processo de divórcio consensual', 5000.00);
INSERT INTO Processo (numero_processo, parte_id, responsavel_id, tema, descricao, valor) VALUES (67890, 1, 2, 'Ação Trabalhista', 'Reclamação trabalhista por horas extras', 15000.00);
INSERT INTO Processo (numero_processo, parte_id, responsavel_id, tema, descricao, valor) VALUES (93128, 3, 2, 'Ação Trabalhista', 'Reclamação trabalhista por horas extras', 20000.00);
INSERT INTO Processo (numero_processo, parte_id, responsavel_id, tema, descricao, valor) VALUES (11223, 1, 4, 'Ação de Cobrança', 'Cobrança de dívida não paga', 8000.00);
INSERT INTO Processo (numero_processo, parte_id, responsavel_id, tema, descricao, valor) VALUES (39283, 5, 4, 'Ação de Cobrança', 'Cobrança de dívida não paga', 10000.00);