Skip to content

SenaCrono/senacronogama

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

banner

Note

pendencia urgente

  • Autenticar ações administrativas Ex: Apenas usuários administradores podem ver o botão de adicionar uma nova sala/curso/turma |

  • Validação de segundo nivel: Validar no Controller se a ação recebida contém um usuário com as devidas permissões.

  • Reescrever/refatorar alguns componentes onde o nome do mesmo não é objetivo.

  • Mover a pasta globals para dentro de components.

  • Criar design patterns de códigos tanto para blade.php e tanto para Controller Ter um código mais claro e legivel. Criar blocos de códigos reutilizaveis em qualquer outra > página/controller.

  • Aplicar ativação de usuário disponivel para Admin.

Sumario

⚙️ Setup

1 - Clonar repositorio para maquina local

git clone https://github.com/senaCrono/senacronogama.git

2 - Instalar as dependencias do projeto

Ao clonar o repositorio, não temos as dependencias "upadas" mas sim um arquivo que informa quais dependecias o projeto usa, nesse caso, temos uma stack(NodeJS & PHP). O Arquivo que informa quais dependencias estamos utilizando no projeto são:

package.json - NodeJS

composer.json - PHP Composer

Como instalar as dependencias informadas de cada um?

1 - Composer

composer install

2 - NodeJS

npm install

[!INFORMATION] A abreviação de NPM em português é Gerenciador de pacotes do node ou nó, do inglês Node Package Manager

Após executar estes comandos você tera o suas dependencias instaladas.

3 - Copiar .env.example para .env

4 - Gerar APP_KEY com artisan

php artisan key:generate --ansi

🤝 Contribuir

🤝 Boas práticas

Antes de começar a criar divisões do código branches você deve verificar se há alterações no código dev e novos branches e atualizar seu repositorio local.

Note

Todas os pushs deverão ser feitos no branch DEV antes de subirem para a master

Important

Antes de iniciarem suas atividades e alteraçãoes certifiquem-se de ter a versão do código mais atualizada

🔎 Buscar atualizações

git fetch origin

Origin é o remoto principal do projeto https://github.com/SenaCrono/senacronogama.git

📦 Atualizar código local com as alterações buscadas

git pull

Antes de contrubuir siga os passos abaixo:

Important

  • Pull requests na master serão recusados
  • Pull requests que nao seguirem o padrão do projeto serão recusados
  • Códigos destruturados saindo do padrão do projeto serão recusados

1 - Criação de branch para cada parte que for alterada do código

# criar um branch e mudar para o mesmo
git checkout -b nome_do_recurso

O parametro -b é para informar qual é o nome do branch que você deseja criar, e em seguida o checkout mudara para o mesmo.

Como saber meu branch atual?

Para saber em qual branch você esta operando:

git branch

O item que retornar marcado com um * e na cor verde é o atual.

2 - Confirmar alterações

# adicionar todos os arquivos alterados para o repositorio local
git add *
# confirmar alterações
git commit -m 'Titulo que descreve a função' -m 'Mensagem completa que descreve todas as alterações'
# enviar para o repositorio e aguardar uma avaliação
git push

🧪 Guia de comandos

O comando npm run dev inicia um dev server do asset builder Vite. veja mais

O comando php artisan serve inicia um dev server do projeto, servindo como base a url / a mesma coisa de 127.0.0.1:8000/ e caso fosse um servidor estático 127.0.0.1:8000/public/

🧩 Estrutura de projeto

Deve se manter a estrutura original do projeto e qualquer criação de nova pasta na source tree deve ser planejada antes.

Qualquer novo recurso que exija uma alteração na estrutura também deve ser planejada e avisada.

🖥️ Padrão para criação de views

Siga os passos abaixo para criar views dentro do padrão do projeto resouces/views

O nome deve ser resumido e descritivo, um exemplo bem simples:

users.blade.php;

Note

Agora já sabemos que users.blade se refere a uma página que exibe usuários

Organização com pastas, seguindo o padrão:

users / list.blade.php;

Note

Sabemos que dentro da pasta views/users/list.blade faz referencia a página de usuários e que será exibido uma lista, ou um componente de lista.

Seguindo esses padrões podemos desenvolver um projeto onde todos já sabem o que devem fazer apenas dependendo deste documento

[!WARNING] > Seguir esses padrões não é obrigatorio, mas devemos manter um padrão de organização para que todos tenham o conhecimento do projeto

💻 Criando views

Para criar uma view, temos o padrão base abaixo:

  @extends('components.layout.padrao')
    @section('content')
        @include('components.home.index')
   @endsection

Esse padrão servirá para você poder incluir partes básicas da página sem precisar repetir muitas linhas, essas partes são elas: sidemenu, navbar/header, layout responsivo. Essa base ajudará a manter as páginas consistentes, diminuindo problemas ao mudar o padrão de design.

extends - Esta extenção serve para usar um padrao de layout components/layout/padrao.blade.php

section - Onde colocara o conteudo dentro de uma Seção

content Serve para posicionar o conteudo dentro da sua Seção section('content') > resources/views/components/users/index.blade.php

include - Incluindo algo dentro da sua seção como componentes etc

endsection - Fecha sua Seção

🧠 Boas práticas - Views

  @include('components.home.index')
  // Para deixar seu codigo mais limpo voce usa o include puxando os componentes da sua pagina toda usando um só comando

  @vite ('resources/js/views/welcome.js')
  // Caso queira carregar um arquivo estatico de CSS e JavaScript esse comando ajudara a puxar os arquivos rapidamente

Adicionando titulo a página

Por padrão observe o codigo a cima a pagina nao vira com um titulo padrão

Para fazer isso voce pode seguir o exemplo abaixo

    @section ('tittle')

📦 Componentes

Modal

Modal base foi implementado na plataforma e pode ser usado em qualquer página Basta apenas utilizar o elemento:

<x-modal> </x-modal>

Esse elemento criará todos as divs necessarias para criar um backdrop e a caixa de dialogo do modal

Podemos também adicionar um id nesse modal, para identifica-lo mais tarde com ações. Essas propriedades lembram bastante o bootstrap, o funcionamento é parecido, mas com codigos nativos.

<x-modal id="my-modal-info"> </x-modal>

E podemos abrir o modal com:

<!-- BOTÃO PARA ABRIR O MODAL -->
<button data-open-modal="#my-modal-info"></button>

E fechar com:

<button data-modal-recuse="#my-modal-info"></button>

data-open-modal será mapeado ao carregar a página, então garanta que o app.js esta incluido, poís é ele que fara esta função. A mesma coisa serve para data-modal-recuse

Modal com conteúdo

Para criar um modal com um body, podemos fazer o seguinte:

<x-modal id="my-modal-info">
    <!-- CONTÉUDO -->
    <div class="flex flex-col"></div>
</x-modal>

Você pode definir o conteúdo da forma como quiser com divs, forms ou qualquer outra coisa, o modal é bem diversificado para aceitar childrens(parents nodes internos)

Modal com conteúdo e com actions

Para criar um modal com um body e bottom actions(utilizar a parte de baixo do modal), podemos seguir:

<x-modal id="my-modal-info">
    <!-- CONTÉUDO -->
    <div class="flex flex-col"></div>

    @slot('actions')
    <button class="p-3 border rounded">Enviar</button>
    <button class="p-3 border rounded" data-modal-recuse="#my-modal-info">
        Close
    </button>
    @endslot
</x-modal>

Definimos um modal que tem um slot que seria a mesma coisa que uma div, essa que aponta para o slot actions do modal, ou seja, é para criarmos um conteudo dentro de uma parte desejada de um componente. Nesse mesmo modal definimos um botão de close que aponta para o modal.

Sidemenu

O Sidemenu(menu lateral) define as páginas disponiveis para um usuário comum e condicional para um usuário com permissões' elevadas

Como funciona ?

De forma básica os links são incluidos manualmente no Sidemenu através do arquivo globals.sidemenu, por enquanto não há nenhuma condição para não mostrar páginas de permissões elevadas, ou seja, todas estão sendo exibidas

Como adicionar um link ao globals.sidemenu

Para adicionar um novo link(referenciada a uma nova página) você pode editar o arquivo globals.sidemenu.

Observe o cógido abaixo:

<x-sidemenu.option
    link="{{route('index')}}"
    option="Tela inicial"
    active="{{Matcher::match('index')}}"
>
    @slot('icon') 🖥️ @endslot
</x-sidemenu.option>

Veja que x-sidemenu.option criará uma nova opção para a sidemenu como se fosse uma div e de fato x-sidemenu.option por trás "das caras" é uma div que contém pre-definições de classes do tailwindcss para poder ecomizar linhas no código final.

link - Qual é a ancora de referencia ou o link da página que o usuário será redirecionado ao clicar

option - Nome da opção que aparecera no menu

active - Verifica se a a rota atual for igual a que esta selecionada ao menu, por exemplo:

Se o link for igual a /home e der match com a rota nomeada de home, o item do menu ficara marcado como ativo.

icon - O slot icon serve para encaixar um icone ao menu e quando o mesmo estiver minimizado, apenas o icone será mostrado.

web.php

Route::get('/home', [...])->name('home')

globals.sidemenu

<x-sidemenu.option
    link="{{route('home')}}"
    option="Tela inicial"
    active="{{Matcher::match('home')}}"
>
    @slot('icon') 🖥️ @endslot
</x-sidemenu.option>

A Facade Matcher faz exatamente o trabalho de verificar se a rota atual é exatamente a mesma que está selecionada no sidemenu.

Custom Facades

Matcher - Class comparadora de URL - página O matcher é usado para verificar se a url atual corresponde ao item informado como parametro da função match

Matcher::match('my-route-name')

my-route-name - Alguma rota definida em seu web.php e a rota que deseja fazer um 'match' com a url atual, então:

Se a URL /minha-pagina for igual a web.php -> Route::<method>()->name('my-route-name'), match() retornará true caso não 'tenha dado match', false.

Custom Helpers

match - Função comparadora de URL - página

Snippets

  • Snippet para base de página indice
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />

        <title>Laravel</title>

        <!-- Fonts -->
        <link rel="preconnect" href="https://fonts.bunny.net" />
        <link
            href="https://fonts.bunny.net/css?family=figtree:400,600&display=swap"
            rel="stylesheet"
        />

        @vite("resources/css/app.css")
    </head>
    <!-- Styles -->

    <body style="background-color: white">
        <div class="flex flex-row w-full">
            @include('globals.sidemenu')
            <div class="mx-3 w-full">
                <div class="flex flex-col mt-3 gap-3">
                    @include('globals.navbar')
                </div>
            </div>
        </div>
    </body>
</html>
  • Botão com tooltip
<div class="group relative">
    <span
        class="group-hover:visible invisible absolute bg-white shadow ps-3 px-3 border rounded left-0 z-50 -translate-y-5"
    >
        My tooltip
    </span>
    <button
        class="border p-3 rounded-lg hover:bg-slate-100 transition-all active:bg-slate-300"
    >
        Get started
    </button>
</div>

Git Utilities

  • git add *

    Prepara todas suas alterações locais para subi-lás no código master

  • git commit

  • git branch (nome_do_branch)

    Define a "Fatia" do código em que você está trabalhando

  • git push

    "Empurra" as alterações para o código principal #Após isso atentar-se ao Pull Request no GITHUB

  • git branch (nome_do_branch)

    Define a "Fatia" do código em que você está trabalhando

  • git fetch

    Atualiza todas as alterações feitas por outros colaboradores no código

  • git pull

    Puxa todas as atualizações disponíveis no branch master

  • git merge

    Faz a integração dos branchs(fatias) entre elas

    git merge (nome_do_branch)

TASK - Pendencias do projeto

Login e Registrar

  • - Criação da view login e com Controller

Para a tela de login deve-se ter os campos para digitar o numero de registro do professor ou E-Mail e senha, com um checkbox para esconder ou exibir a senha, após isso fazer o botão que será responsável por enviar o formulario.

  • - Criação da view register e usando o mesmo Controller de login

Para a tela de registro deve-se ter campos: Nome de usuário, E-Mail/Numero de registro, senha e repetir senha, após isso fazer o botão que será responsável por enviar o formulario.

Para questões de lógica, segue:

  • O primeiro usuario cadastrado na plataforma sempre será o responsável por configura-la após o processo de cadastro ou seja:

No banco de dados para as propriedades de usuário podemos ter um campo do tipo Enum que determina se esse usuário é um usuário padrão ou administrador.

CREATE TABLE users(..., ...., ...., AccountType ENUM('default', 'admin'))

Após o primeiro usuário ser cadastrado o mesmo será responsavel por aceitar o pedido de cadastro dos demais, então podemos determinar se o usuário default tem permissão para usar a plataforma pós-cadastro:

CREATE TABLE users(..., ..., ..., AccountType ENUM('default', 'admin'), AccountActivated BOOL)

Onde AccountActivated será alterada para true quando a requisição de cadastro for aceita pelo Administrador, então precisamos filtrar telas onde serão exibidos os usuários cadastrados e outra com uma lista de usuários pendentes. Uma feature que pode ser incluida é a possibilidade do próprio Administrador cadastrar um usuário manualmente e passando a opção de AccountActivated para true.

Feito os passos anteriores, agora o estado da página de login mudará, pois um novo usuário foi criado.

# Exemplo de busca
SELECT * FROM users
$varusers = User::all();
if (sizeof($varusers) == 0) {
    // mostrar apenas a tela de cadastro
    return;
}

// mostrar a página de cadastro e login

Isso é um exemplo de código usado em um AuthController que seria responsável por lidar com as autenticações na plataforma.

Para poder fazer um AuthController e um sistema de autenticação, você pode buscar na documentação do Laravel de como autenticar um usuário usando o Model User e extendendo a class Authenticable. Veja mais apartir da seção retornando um usuário autenticado.

Todo e qualquer sistema de autenticação deve dar a opção para o usuário trocar de senha com um token temporario gerado ao clicar no campo esqueci minha senha. Por isso é importante a plataforma ter algum tipo de verificação para validar se realmente é o usuário que está tentando fazer login, como uma palavra chave para recuperar a senha ou usando o token citado anteriormente.

Seguindo a lógica de como recuperar uma senha:

1 - O usuário clica em esqueci minha senha e é redirecionado para uma página onde terá uma input para digitar o código enviado ao E-Mail do mesmo ou em um sistema interno de E-Mail da plataforma onde um administrador seria responsavel por fazer a recupreção da conta.

2 - Ao digitar o código gerado e o mesmo sendo válido(função de um Controller para válidar se o código fornecido é o mesmo que foi gerado pela plataforma) o usuário será novamente redirecionado, mas agora para a página para criar uma nova senha.

Resolução de problema

Para contornar o gigante caminho citado nas seções anteriores, podemos fazer uma página referente ao usuário, ou seja, quando ele clicar em esqueci minha senha, seria redirecionado para uma página onde mostraria algumas informações básicas de login do própio usuário, seria essas informações: dica de senha, ultima senha usada, palavra chave. Devemos dar ajuda para que o usuário possa lembrar de sua esquecida senha.

Note

Lembrando que tudo isso é apenas um exemplo para ajudar no desenvolvimento do projeto e não precisa ser seguido.

Exibir informações do usuário

  • - Criação da view de exibição do usuário(perfil) - O nome do Controller pode ser qualquer um desde que siga o padrão.
  • - Modal ou página para dar a opção do usuário editar as informações ou fazer campos editáveis na propria página de exibição
  • - Opcional - Popup/Modal de confirmação das alterações feitas e um botão de submeter-se

O responsável por fazer a página deve documentar os campos passados via POST, ou seja, apenas especificar os nomes atribuidos nas inputs.

  • - Opção para o usuário deletar a conta

Ações administrativas

Todas as opções listadas devem apenas serem mostradas para usuários administradores, e o que determinará essa exibição é apenas um @if ou @auth no blade.

View de usuários

  • - Opção para ver a informação do usuário, editar e deletar ou opções para ativar ou desativar a conta do mesmo.
  • - Exibição do status da conta(se está autorizado a fazer login ou não: Login e registrar)

View de salas

  • - Opção de criar nova sala, editar ou deletar.

View de cursos

  • - Opção de criar novo curso, editar ou deletar.

Padrão nomear para receber os Dados

🧠 Boas práticas

- [ ] - Exemplo:  name="nameroom"
  // Voce esta nomeando sua input que ira receber o dado quando for cadastrado

Criação da rota para tela de cadastro

- [ ] - Use o mesmo padrão acima  que agora sera com rotas
- [ ] - Exemplo: Route::view('/create', 'users/create')->name('users.register');
     // Nomeando essa rota você ira puxar esse nome no seu href
- [ ] - Exemplo: href="{{route('users.register')}}
     // Aqui voce estara puxando sua rota para exibição da tela de cadastro

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6