GithubHelp home page GithubHelp logo

sgec's Introduction

Hey there! I'm Gustavo Henrique.

GIF

👨🏻‍💻 About Me

- 🔭   I’m currently learning AngularJS, Node, TypeScript and Java.
- 🎓   Studying at school E.E.E.P. Flávio Gomes Granjeiro.
- ✍️   Watching Series and study math as hobbies/side hustles.
- ☕   I belive, a perfect cup of coffee can be the ultimate solution for any stress.

🛠 Tech Stack

- 💻   JavaScript | Java | Nodejs
- 🌐   HTML | CSS | JavaScript | Angular
- 🛢   MySQL | PostgressSQL
- 🔧   Visual Studio code | NetBeans

Quadrified's stats Quadrified's stats



🤝🏻 Connect with Me

Gmail Badge

sgec's People

Contributors

ceulazur avatar francisco-paulino-arruda-filho avatar gustavohenriquefs avatar joao-pedro-p-holanda avatar robsonad07 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

ceulazur naliat

sgec's Issues

Configuracoes (controller)

ConfiguracoesController

  • adicionar atributo
private User usuario;

em initialize

  • setar usuario para App.getUsuario();

  • adicionar método

public void alterarEmailESenha

que seta o autocommit para false, chama a operação de atualizar de UserDAO e realiza rollback em caso de SQLException. Setar autocommit para true. Verificar se o nome e o email nos textfields não é vazio

  • adicionar método que realiza a modificação da senha
public void alterarSenha;

que seta o autocommit para false, chama a operação de atualizar de UserDAO e realiza rollback em caso de SQLException. Setar autocommit para true. Verificar se a senha antiga é válida para o usuário, e separadamente, se a senha nova foi inserida corretamente nos campos de 'nova senha' e 'confirmar senha'

refactor css

  • distribuir arquivos css nos pacotes page, preview, dialog e componente, todos com letra minúscula
  • atualizar imports com os novos caminhos

Melhorar validação de input

Link útil: https://www.youtube.com/watch?v=9D81AP_RePo

Login Controller

  • Alterar verificacao de usuario para mostrar uma mensagem de erro caso o usuário não exista e outra para caso o usuário exista mas a senha esteja incorreta

Cadastrar Evento

  • Refatorar camposObrigatoriosPreenchidos, destacando o campo que não foi preenchido
// para cada condicao aplicar setStyle("-fx-border-color: red; -fx-border-width: 1px;");
classificacaoEtaria.getSelectionModel().getSelectedItem() == null;
titulo.getText().isEmpty();
dataInicial.getValue() == null;
dataFinal.getValue() == null;
  • Adicionar validação para verificar se existe pelo menos um colaborador informado, no caso da meta 4 estar selecionada
  • Adicionar validação para restringir a data final para valores iguais ou depois da data inicial
# Exemplo bing ai
DatePicker datePicker1 = new DatePicker();
DatePicker datePicker2 = new DatePicker();

datePicker1.valueProperty().addListener((observable, oldValue, newValue) -> {
    datePicker2.setDayCellFactory(picker -> new DateCell() {
        @Override
        public void updateItem(LocalDate date, boolean empty) {
            super.updateItem(date, empty);
            LocalDate currentDate = datePicker1.getValue();
            setDisable(empty || date.compareTo(currentDate) > 0 );
        }
    });
});
  • Remover campo de minutos e aplicar um textFormatter no campo de horário (não carga horária) do evento

FieldLocalizacaoController

  • Realçar campos não preenchidos (nome, estado, cidade e país) após chamada do método getLocalizacao

hotfix localizacao

interface EventoController

  • Adicionar métodos
public void adicionarLocalizacao();
public void removerLocalizacao(Parent localizacaoField);

Classe LocalizacaoDAO

  • Alterar operações de inserir, get e update no DAO. Incluir a coluna 'nome_localizacao' em todas
  • Adicionar operação de get utilizando apenas o nome do local
  • Adicionar método
public List<String> getListaLocais();

Classe FieldLocalizacaoController

  • Adicionar atributo
EventoController parentController;

Setado ao carregar o field na página de cadastrarEvento.

  • Adicionar um campo para inserção do nome da localizacao no GridPane
  • retirar a responsabilidade de inserir localizações com o DAO
  • Implementar método de remover o local atual da página onde ele está carregado.
  public void remover(){
    parentController.removerLocalizacao(getLocalizacao());
  }
  • Adicionar atributo
ObservableList<String> nomesLocais;
  • Adicionar autocomplete no campo de localização, que lê da lista de locais, e realiza um get utilizando o nome, preenchendo e desabilitando todos os texts fields

CadastrarEventoController

  • Implementar interface EventoController
  • Adicionar observableList<FieldLocalizacaoController> controllersFieldsLocalizacoes
  • Adicionar observableList<Localizacao> listaLocalizacoes

Nota: listaLocalizacoes só é preenchida no método criarEvento, utilizando o método getLocalizacao definido no controller de FieldLocalizacao. Ao clicar no button de adicionarLocalizacao, um novo controller é adicionado, e ao clicar em remover, o Parent é removido da secao de Locais

Localizacao

  • Alterar toString

refactor HomeController

home.fxml

  • Substituir HBox listaEventos por FlowPane secaoUltimosEventos

HomeController

  • Remover idxEvento nao utilizados em adicionarEventoEmGrid

telaPesquisar (controller)

PesquisarEventoController

  • Adicionar atributos
MenuButton opcoesMetas;
DatePicker dataInicio, dataFim;
TextField nomeLocalizacao;
FlowPane resultados;
  • Alterar os fx:ids necessários
  • Adicionar atributo
ObservableMap<Evento, FXMLLoader> mapEventos 
  • Adicionar listener ao mapEventos que carrega um preview de evento quando um elemento é adicionado e remove do FlowPane resultados quando algum elemente é removido.
/**
Exemplo de listener, previewParticipante
*/
public void addListenersParticipante(ObservableMap<Participante, FXMLLoader> observablemap) {
        CadastrarEventoController superController = this;
        observablemap.addListener(new MapChangeListener<Participante, FXMLLoader>() {
            @Override
            public void onChanged(
                    MapChangeListener.Change<? extends Participante, ? extends FXMLLoader> change) {

                if (change.wasAdded()) {
                    Participante addedKey = change.getKey();
                    // carregar o fxml de preview e setar o participante deste para o
                    // participante adicionado
                    try {
                        Parent previewParticipante = change.getValueAdded().load();
                        PreviewParticipanteController controller =
                                change.getValueAdded().getController();
                        controller.setParticipante(addedKey);
                        controller.setParentController(superController);

                        secaoParticipantes.getChildren().add(previewParticipante);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (change.wasRemoved()) {
                    PreviewParticipanteController removedController =
                            change.getValueRemoved().getController();
                    // Remover o Pane de preview ao deletar um Participante da lista
                    secaoParticipantes.getChildren().remove(removedController.getContainer());

                }
            }
        });
    }
  • Adicionar ao método pesquisar
mapEventos.clear(); // limpar os resultados anteriores
listaResultados 
for(Evento  evento : listaResultados){ //adicionar resultados na lista
     mapEventos.put(evento, new FXMLLoader(App.class.getResource("view/preview/previewEventoExistente.fxml")));

pesquisarEvento.fxml

  • Substituir VBox resultados por um FlowPane
  • Substituir ChoiceBox metas por MenuButton opcoesMetas e adicionar checkMenuItem para cada meta

Image


EventoDAO

  • expandir métodos obterEventos para utilizar uma lista booleana de metas selecionadas, data inicial e data final e o nome de um local.

fix tratamento de excecoes DAO

Tipos de exceções a utilizar

Camada da aplicação Principal Exceção
Service ServiceOperationException
DAO SQLException
Outras Em operações com arquivos java.io.File: FileNotFoundException

Classe DAO

  • Adicionar atributo Connection connection

  • adicionar método

public DAO(Connection connection){
    this.connection = connection
}
  • adicionar método concreto
private void logException(Exception exception) {
    if (exception instanceof SQLException) {
      Logger erro = Logger.getLogger("erroSQL");
      erro.log(Level.SEVERE, "excecao levantada:", exception);
    } else if (exception instanceof ServiceOperationException) {
      Logger erro = Logger.getLogger("erro service");
      erro.log(Level.SEVERE, "excecao levantada:", exception);
    } else if (exception instanceof IOException) {
      Logger erro = Logger.getLogger("erro arquivo");
      erro.log(Level.SEVERE, "excecao levantada:", exception);
    }
  }

Todas as classes DAO

  • implementar classe abstrata DAO
  • Chamar método logException em todo bloco catch e relançar como SQLException
catch (Exception e) {
      logException(e);
      throw new SQLException("message",e);
    }
  • EventoDAO
  • InstituicaoDAO
  • LocalizacaoDAO
  • ParticipanteDAO
  • MetaDAO
  • ServiceFileDAO
  • UserDAO

hotfix preview

Todos os previews

  • Adicionar efeito drop shadow

PreviewEventoExistente

  • Reduzir comprimento para menos do que a altura
  • Fazer ImageView ocupar uma porcentagem maior da tela
  • Adicionar efeito de zoom on hover, testar com fx-scale:
.component:hover{
-fx-scale-x : 1.1;
-fx-scale-y : 1.1;
-fx-scale-z: 1.1;
}

PreviewInstituicao

  • Mudar layout para a vertical, com ImageView à esquerda e Labels à direita
  • Adicionar Label com nome da instituição abaixo da ImageView
  • Diminuir ambas as dimensões proporcionalmente
  • Reduzir espessura das bordas ou utilizar outra cor

PreviewParticipante

  • Diminuir comprimento
  • Fazer ImageView ocupar uma porcentagem maior da tela
  • Adicionar Label com propriedade Wrap para miniBio do artista
  • Reduzir espessura das bordas ou utilizar outra cor

Documento de Requisitos

  • Primeira Entrega (06/09)
  • Primeira Revisão (04/10)
  • Segunda Revisão (01/11)
  • Entrega Final (29/11)

Card evento (controller)

  • adicionar atributo evento e método setEvento à classe
  • adicionar método verDetalhes que transita a página de visualização e chama setEvento de visualização
  • Incluir atributos titulo e dataEvento (ou outros nomes dependendo do fx:id que esteja no fxml)
  • no método initialize carregar o texto dos atributos, usando setText, com o titulo e data do atributo evento

ServiceFileDAO

Classe ServiceFile

  • adicionar atributo
String suffix;
  • mudar tipo do atributo service
ServiceType service;
  • no construtor de `ServiceFile(File content, String bucket) setar o ServiceType como S3
service = ServiceType.S3;

Classe ServiceFileDAO

Image Image

  • adicionar atributos
Connection connection;
Service service;
String bucket;
  • adicionar método
public void setConnection(){...}
  • adicionar construtor
ServiceFileDAO(String bucket, Service service){...}

  • adicionar método
 public boolean inserirArquivo(ServiceFile arquivo){...}

que primeiro chama a função

service.enviarArquivo(bucket, arquivo.getFileKey(), arquivo.getContent());

e se essa operação for sucedida então salva arquivo no banco.

  • incluir atualização de id no parâmetro passado em inserir, ou seja, caso um ServiceFile seja inserido com sucesso, o model dele deve incluir o id criado.
ResultSet rs = stmt.getGeneratedKeys();
      //caso a insercao seja realizada, atualiza o parametro com o id  
      if (rs.next()) {
          obj.setIdServiceFile(rs.getInt("id_service_file"));
      }

  • adicionar método
public ServiceFile getArquivo(ServiceFile arquivo){...}

que primeiro chama a função para carregar o conteúdo do arquivo

service.getArquivo(arquivo.getBucket(), arquivo.getFileKey());

depois adiciona os atributos restantes usando a referência no banco


  • adicionar método
public boolean deleteArquivo(ServiceFile arquivo);

que primeiro chama a função

service.deletarArquivo(arquivo.getBucket(), arquivo.getFileKey())

  • adicionar método
public boolean vincularAllArquivos(Evento evento){...}

que recebe um evento com id e tenta vincular todos os arquivos no atributo arquivos ao evento usando o método vincularArquivo


  • adicionar método
public boolean vincularArquivo(int idServiceFile, int idEvento){...}

que vincula um único arquivo a um evento


  • adicionar método
public boolean desvincularAllArquivos(Evento evento) {...}

que desvincula e remove da lista todos os arquivos da lista


  • adicionar método
public boolean desvincularArquivo(int idServiceFile, int idEvento) {...}

que desvincula um único arquivo de um evento

Documento de Escopo

  • Primeira Entrega (06/09)
  • Primeira Revisão (04/10)
  • Segunda Revisão (01/11)
  • Entrega Final (29/11)

Hotfix/EventoDAO

  • adicionar método de listar últimos n eventos cadastrados
  • adicionar coluna cadastrado_em (valor default, today) na tabela de evento
  • adicionar vinculoMetas
  • modificar inserirEvento para aceitar eventos sem participantes, colaboradores ou organizadores vinculados

hotfix evento

  • adicionar colunas nos métodos inserir,update e get da classe EventoDAO
num_municipios_alcancado,
num_participantes_alcancado,
num_colaboradores_esperado,
num_colaboradores_alcancado,
id_grupo_evento
  • alterar métodos de vincular instituições, participantes e arquivos para chamar essas funções nos respectivos DAOs

EventoDAO

  • Remover sets desnecessários em listarUltimosEventos, manter set de id, nome, data_inicial e horário
  • Adicionar método getPreview(Evento evento) para capturar somente id, nome, horario e data_inicial do evento
  • Adicionar método getEvento(String nomeEvento) que captura um evento utilizando o nome
  • Utilizar builder para setar atributos necessarios em getPreview e listarUltimosEventos
EventoBuilder eventoBuilder = new EventoBuilder();
        eventoBuilder.setDataInicial(resultSet.getDate("data_inicial"))
                     .setNome(resultSet.getString("nome_evento"))
                     .setHorario(resultSet.getTime("horario"))
                     .setId(resultSet.getInt("id_evento"));

CadastrarEvento

  • Realizar a inserção de um evento e das entidades vinculadas em uma única transação usando autoCommit=false, caso algum dos vínculos falhar realizar rollback, se não commit

fix layout

VisualizarEvento

  • Substituir stackPane de arquivos por FlowPane
  • Substituir StackPane de participantes, colaboradores e organizadores por FlowPane
  • Adicionar HGap e VGap a todos os flow Panes

CadastrarEvento

  • corrigir layout de arquivos
    Image

Home

  • Adicionar Scroll

  • Aumentar HGap e VGap na secaoUltimosEventos

PreviewEvento

  • Adicionar valor default pra data e horário caso sejam nulos

PreviewArquivos

  • Diminuir proporção da imagem
  • Destacar nome do arquivo (negrito e texto maior) e usar wrap text no label
  • Adicionar conteúdo como preview no caso de arquivos de imagem (Controller)

GrupoEventosDAO

  • Adicionar método
public ArrayList<GrupoEventos> pesquisarGrupoEventos(String nome, String classificacaoEtaria, String nomeCidade , Date dataInicio, Date dataFim, boolean acessivelLibras, ArrayList<Meta> metas ){...}
  • Adicionar método
public Optional<GrupoEventos> getGrupoEventos(GrupoEventos grupoEventos){...}
  • Adicionar método
public boolean insertGrupoEventos(GrupoEventos grupoEventos){...}
  • Adicionar método;
public boolean updateGrupoEventos(GrupoEventos grupoEventos){...}
  • Adicionar método;
public boolean deleteGrupoEventos(GrupoEventos grupoEventos){...}
  • Adicionar método;
public ArrayList<Evento> listEventos(GrupoEventos grupoEventos){...}
  • Adicionar método
public boolean vincularEvento(int idGrupoEventos,int idEvento){...}
  • Adicionar método
public boolean desvincularEvento(int idGrupoEventos,int idEvento){...}
  • Adicionar método
public ArrayList<GrupoEventos> listUltimosGrupoEventos(int idGrupoEventos,int idEvento){...}

Que mostra os 5 últimos grupos de eventos

  • Construir preview Utilizando builder
       GrupoEventosBuilder grupoEventosBuilder = new GrupoEventosBuilder();
       Grupoeventos result = grupoEventosBuilder.setIdGruposEventos(<id>)
                                                .setNome(<nome>)
                                                .setData(<data>)
                                                .setMetas(<metas>)
                                                .setImagemCapa(new ServiceFile(<id_arquivo>));

Adicionar copiar descrição para área de transferência

Links úteis:

https://www.youtube.com/watch?v=zRmNT39eNU8

VisualizarEvento e VisualizarGrupoEventos (view)

  • Adicionar ícone de cópia acima da descrição (alinhamento top-right)
  • adicionar onAction="copyToClipboard" no ícone de cópia

VisualizarEvento e VisualizarGrupoEventos (controller)

  • Adicionar método que adiciona o texto da descrição à área de transferência (método getText())
public void copyToClipboard(){...}
//exemplo bing.ai
import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;

Clipboard clipboard = Clipboard.getSystemClipboard();
ClipboardContent content = new ClipboardContent();
content.putString("Hello World");
clipboard.setContent(content);
 
  • Mostrar Tooltip após clique
//Exemplo BingAI
public void copyToClipboard(){
      ...
      Tooltip tooltip = new Tooltip("Confirmation message");
      // Show the Tooltip immediately when the button is clicked
      tooltip.show(button, 500, 500);
      
      // Hide the Tooltip after 5 seconds
      javafx.util.Duration duration = javafx.util.Duration.millis(2000);
      javafx.animation.PauseTransition pause = new javafx.animation.PauseTransition(duration);
      pause.setOnFinished(e -> tooltip.hide());
      pause.play();
}

Acesso a API do Mapas Culturais

- REQUEST

  • GET: http://mapas.cultura.gov.br/api/agent/find?@select=id, name, files&@order
  • RESPONSE:
[
    {
        "id": 20991,
        "name": "",
        "files": null
    },
    {
        "id": 21947,
        "name": "",
        "files": null
    },
    {
        "id": 19589,
        "name": "Frame",
        "files": null
    },
    {
        "id": 18417,
        "name": "Culturada",
        "files": null
    },
    {
        "id": 18441,
        "name": "Clube de contadores de historias",
        "files": null
    },
    {
        "id": 21948,
        "name": "",
        "files": null
    },
    {
        "id": 21956,
        "name": "",
        "files": null
    },
    {
        "id": 21957,
        "name": "",
        "files": null
    },
    {
        "id": 20726,
        "name": "Manoel Antônio dos Santos ",
        "files": null
    },
    {
        "id": 25133,
        "name": "Nome do Ponto",
        "files": null
    },
    {
        "id": 27240,
        "name": "Chinelado da Bahia",
        "files": null
    },
    {
        "id": 21993,
        "name": "",
        "files": null
    },
    {
        "id": 21994,
        "name": "",
        "files": null
    },
    {
        "id": 20140,
        "name": "OSCIP VENTRE LIVRE",
        "files": null
    },
    {
        "id": 18949,
        "name": "MUSEU BI MOREIRA ",
        "files": null
    }, **[...]**

feature/meta

Meta

  • adicionar classe Meta
  • adicionar atributos
private int idMeta, String nomeMeta; 
  • adicionar construtor
public Meta(int idMeta);

MetaDAO

  • adicionar métodos
public Meta getMeta(Meta meta); //completa o nome de uma meta a partir do registro no banco
public boolean inserirMeta(Meta meta); // cria uma nova meta com o nome especificado, seta o id da meta passada para corresponder ao do novo registro
public boolean updateMeta(Meta meta); // atualiza o nome de uma meta
public boolean deletarMeta(Meta meta);
  • adicionar métodos
public boolean vincularEvento(int meta, int idEvento);
public boolean desvincularEvento(int meta, int idEvento);

Justificativa: Usando uma classe DAO específica para metas torna mais fácil vincular metas a possíveis novas entidades, para corrigir defeitos no vínculo ou acrescentar informações a uma meta apenas uma classe precisa ser modificada.

EventoDAO

  • adicionar métodos
public boolean vincularMeta(int meta, int idEvento);
public boolean desvincularMeta(int meta, int idEvento);

que chamam as funções respectivas de MetaDAO

fix ServiceFile

CadastrarEventoController

  • Impedir a inserção de dois arquivos com mesmo nome

ServiceFileDAO

  • atualizar métodos get para capturarem id_service_file, file_key, bucket e service do banco, e preencher o resto dos dados com getMetadata

ServiceFile

  • Atualizar model com construtor

Refatoração

atributos sufixo, tamanho do arquivo e última modificação são todos coletados pelo getMetadata na camada service

  • Remover colunas suffix e ultima_modificação dos métodos DAO
  • Caso o atributo suffix não seja utilizado em nenhuma classe, remover do model (identificação do tipo na tela de mídia usa o nome completo do arquivo)

fix transacao insertEvento

CadastrarEvento

  • Setar autocommit para false no método criarEvento
  • Mover responsabilidade de construir o model de novo evento para um método separado
  • Realizar todas as operações de inserir evento e vínculo de arquivos, metas, participantes e instiuições em um bloco try , realizar rollback no bloco catch e commit em finally

Refatoração da classe

  • Adicionar sufixo aos atributos pertencentes à view ( Field para TextField e TextArea, Picker para DatePicker, Choice para ChoiceBox, Check para CheckBox e RadioCheck para RadioButton)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.