07 Software Relatorio TrainEnergy
07 Software Relatorio TrainEnergy
07 Software Relatorio TrainEnergy
Informáticos (TGPSI)
2015/2018
TrainEnergy - Store
TrainEnergy – Store
Relatório referente à Prova de Aptidão Profissional
Prova de Aptidão Profissional (PAP) – TrainEnergy – Bruno Gabriel Nunes Martins 3P2
Nº32956
Prova de Aptidão Profissional (PAP) – Bruno Martins Nº32967 2015/2018
Dedicatória
Dedico este trabalho principalmente a todos os intervenientes que me ajudaram nesta jornada na
programação, pais, amigos, colegas de trabalho, principalmente a um amigo cujo o seu nome é Luís.
Embora não seja um colega de turma, foi uma das pessoas que sempre esteve comigo e que de
alguma forma conseguiu mudar a minha forma de ver e pensar para um determinado
problema/solução.
Para finalizar a dedicatória, quero agradecer ao meu colega de trabalho, amigo e mentor, João
Emídio Cortes. Sem os ensinamentos desta pessoa não conseguia de forma nenhuma evoluir de
forma clara e simples na programação.
Agradecimentos
Gostaria de agradecer à empresa Linkare TI - Tecnologias de Informação, Lda. por me ter dado a
possibilidade de participar no mundo de trabalho e perceber o nível dos desafios que a vida nos
proporciona. E claro, por ter conhecido pessoas excelentes e competentes com quem tive o prazer de
trabalhar/aprender.
Finalmente, agradecer à minha família por toda a preocupação que tiveram comigo durante a
realização deste curso profissional.
Indice
Dedicatória............................................................................................................................................. 1
Agradecimentos..................................................................................................................................... 2
Resumo................................................................................................................................................. 4
Estrutura técnica.................................................................................................................................... 5
1 Introdução...................................................................................................................................... 6
1.1 Ideia do tema e fundamento teórico................................................................................... 6
1.2 Problema e/ou sugestão.................................................................................................... 6
1.3 O pretendido do projeto...................................................................................................... 6
1.4 Tipos de Utilizador.............................................................................................................. 7
1.5 Indicação das linguagens utilizadas................................................................................... 7
1.6 Segurança e integridade dos dados................................................................................... 7
1.7 Objetivos a alcançar após aprendizagem........................................................................... 7
1.8 Propostas de ações........................................................................................................... 8
1.9 Apresentação da ideia para o pagamento.......................................................................... 9
1.10Apresentação visualmente do website............................................................................... 9
2 Desenvolvimento.......................................................................................................................... 10
2.1 Fundamento téorico......................................................................................................... 10
2.1.1 Front-End............................................................................................................. 10
2.1.2 Back-End............................................................................................................. 10
2.1.3 Sistema de Informação........................................................................................ 10
2.2 Linguagens, técnicas e frameworks utilizadas.................................................................. 11
2.2.1 Cliente (Front-End)............................................................................................... 11
2.2.1.1.1 AJAX (Asynchronous Javascript and XML).................................. 11
2.2.1.1.2 jQuery – extensão de javascript................................................... 11
2.2.1.1.3 Javascript..................................................................................... 11
2.2.2 Servidor (Back-End e base de dados).............................................................................. 12
2.2.2.1.1 PHPMailer.................................................................................... 12
2.2.2.1.2 TCPDF......................................................................................... 12
2.2.2.1.3 PHP Data Objects (PDO)............................................................. 12
2.2.2.1.4 PHP: Hypertext Preprocessor...................................................... 13
2.2.2.1.5 SQL – Structure Query Language................................................ 13
2.2.2.1.6 Conceito de portlet ou isolamento................................................ 13
2.3 Continuação do desenvolvimento........................................................................................ 14
3 Lista de Eventos........................................................................................................................... 17
4 Diagrama de Entidades e Associações – pt.1.............................................................................. 18
4.1 Diagrama de Entidades e Associações – pt.2.................................................................. 19
5 Wireframes................................................................................................................................... 20
6 Melhorias e correções ................................................................................................................. 21
7 Conclusão.................................................................................................................................... 23
Bibliografia........................................................................................................................................... 24
Resumo
Este projeto tem como finalidade promover mais sobre loja de brinquedos onlines, isto é,
brinquedos de coleção. Neste caso, artefactos de miniaturas de comboios bem como os seus
acessórios.
Para a realização desta loja online, foi feito criado ao longo destes 5/6 meses um website
desenvolvimento na escola, casa e local de trabalho.
Para a descrição de objetos não ficar confuso, foi dividido em pequenos tópicos com uma breve
explicação para cada argumentação.
Estrutura técnica
◦ Lista de Eventos
1 Introdução
Com este projeto quero aprofundar mais em desenvolvimento web estudando mais javascript que
me levará a outras frameworks como por exemplo, AngularJS, Angular +6 (…), CSS, que me
permitirá estudar pré-processadores de CSS como por exemplo, SASS e SCSS e PHP, utilização de
objetos com uma maior frequência.
Cada uma destas linguagens serão detalhas mais para a frente, bem como técnicas associadas à
mesma para a consecução de algumas tarefas.
• Menu horizontal
◦ Aponta para as diversas áreas da página principal isto é, um item que ao ser clicado, a
página redireciona o utilizador ao conteúdo pretendido.
◦ Lançamentos
O site está programado de forma a ser o mais simples com o utilizador. Praticamente, todas as
ações realizadas entre cliente e servidor são feitas em background, ou seja, sem precisar que o
utilizador precise “refrescar” a sua página, isto é, carregar novamente um conteúdo para que
alterações feitas previamente sejam persistidas.
2 Desenvolvimento
Entrando agora para uma parte mais técnica, vamos entender primeiro o que é que se entende
por Back-End e Front-End
2.1.1 Front-End
O Front-End é o ambiente proposto para o utilizador, ou seja, será a informação resultante entre
a comunicação de um cliente, o Front-End, com o servidor, Back-End ou Base de Dados.
O FE. é uma das páginas mais importantes para o utilizador porque será aquela onde deverá
despertar o interesse do utilizador estando concisa, simples e de agradável aspecto. Pegando neste
argumento, podemos afirmar que o Front-End deverá ser uma página trabalhada com mais calma e
com uma vertente simples destinado ao utilizador
2.1.2 Back-End
O Back-End por outro lado, já exige um conhecimento mais programático, isto é, com alguns
mecanismos/técnicas/linguagens mais aprofundado(a)s para fazer a administração do website.
O Back-End deverá conter uma maior segurança do que o Front-End justamente para a proteção de
dados, já que tem como função fazer o preenchimento de tabelas no nosso sistema de informação.
• Exemplo prático: Comunicação de dados entre JavaScript e PHP sem precisar aceder
diretamente a um ficheiro PHP. Com isto, consegue-se evitar o famoso “refrescamento” nas
páginas. Dando um ar mais profissional e simples para o utilizador
2.2.1.1.3 Javascript
Para terminar, nada melhor do que falar na linguagem “principal” que deu origem às demais
referidas acima. O javascript é uma linguagem de programação que corre no lado do cliente e tem
como função o total controlo personalizado e acesso à nossa página de forma a concretizar as
vontades do programador.
2.2.2.1.1 PHPMailer
Como mecanismo para o envio de e-mails, utilizados na faturação e ativação de contas no web
site, o PHPMailer ficou responsável por essas ações.
É um classe em PHP permitindo o envio de e-mails a e-mails válidos. Esta classe tem por
exemplo, alguns métodos para fazer o envio a múltiplos e-mails, anexo de ficheiros e codificação em
utf8. Tendo muito mais que são mais para configuração.
2.2.2.1.2 TCPDF
Para fazer a criação de faturas em modo *.pdf, o TCPDF é uma classe de PHP responsável por
carregar e criar novos documentos que podem ser vistos em modo: view, transferência ou anexo para
e-mails.
Com o passar do tempo, o mysqli (uma das forma de se conectar à base de dados), acabou por
ser bastante inseguro e com uma sintaxe um pouco desagradável.
Inseguro, porque se o utilizador injetar código html como data a ser inserida na base de dados, o
mysqli não consegue fazer essa validação. Não consegue de igual forma evitar as formas de
“danificar” uma base de dados, como por exemplo, SQL Injection. Exemplo: “OR 1 = 1” → Se for
inserida como password, o mesmo poderá iniciar sessão de uma forma ilegal, pondo em causa a
integridade dos dados.
O BindValue é uma função desta classe que permite retirar o significado html, convertendo-a a
uma string normal. (“<script>teste123();</script>” → “teste123()”)
O PHP é uma linguagem de programação que corre no lado de servidor e tem como função
receber pedido do cliente isto é, dados para processar. Podendo ou não retornar uma resposta de
volta para o cliente. É responsável igualmente por estabelecer ligação à base de dados.
O SQL é uma linguagem estruturada, justamente por ser uma linguagem capaz de armazenar,
manipular e consultar dados em uma base de dados. Compostas por três sub-linguagens:
• DML – Data Manipulation Language, responsável pelos comandos de manipulação:
◦ SELECT
◦ INSERT
◦ UPDATE
◦ DELETE
◦ CREATE
◦ ALTER
◦ DROP
◦ GRANT
◦ REVOKE
Um portlet é um “bocado de um todo”, ou seja, são pequenos programas que funcionam de forma
independente sem precisar estar dependente de respostas ou funcionamento dos outros. Consegue-
se obter um melhor controlo, evitando criar páginas desnecessárias para apenas um conteúdo.
(Inspirado do Liferay – conceito de portal)
Os produtos colocados no site não são reais, ou seja, são produtos simulados justamente por
este projeto ser pedagógico. Para começar, o utilizador deverá criar uma conta com dados válidos.
Ou seja, o utilizador necessitará de colocar um NIF e um e-mail válido caso contrário, o sistema
detectará mais tarde e procederá à remoção da conta. Ao registar, a conta deverá ser confirmada.
Para proceder a isto, o utilizador deverá ativar a mesma a partir do seu endereço eletrónico,
recebendo uma chave única que identificará a sua conta.
O utilizador, uma das entidades do nosso sistema, terá acesso a editar os seus dados de perfil
contando com 3 formulários totalmente independentes à sua disposição: Dados gerais, e-mail e
password.
Neste sistema não serão admitidos e-mails duplicados, ou seja, o e-mail acaba por ser uma
segunda opção que irá identificar o utilizador univocamente. (A primeira será a chave primária em termos de base
de dados.)
A password contará com uma expressão regular, evitando assim passwords comuns, isto é,
fáceis de serem roubadas. Segue-se a política de passwords estabelecida: Mínimo de 8 caracteres,
estando presentes pelo menos uma letra maiúscula ou minúscula, com letras e números seguindo de
simbolos. “ (!..@# entre outros..)
Em relação aos produtos, o utilizador poderá usar o carrinho de compras como forma de
“desejos”, ou seja, pedidos que provavelmente serão comprados. Pode-se adicionar vários produtos e
no final ser realizado um pagamento geral para todos.
Um produto tem várias fotos juntamente com a categoria, corpo de detalhes, breve descrição e preço
Ao realizar o pagamento, o sistema de paypal será ativado. Para o teste do pagamento são
disponibilizados duas contas em que só vamos usar apenas duas: cliente e vendedor.
O vendedor será aquele que irá receber o pagamento e o cliente procederá com a compra.
Por cada produto, o utilizador terá a capacidade de comentar e responder a outros comentários
previamente inseridos. Tendo um tempo máximo de duas horas para poder apagar o seu comentário.
Seguindo a mesma metodologia dos produtos, as noticias também têm o mesmo sistema.
As noticias serão também alvo de comentários. O utilizador poderá pesquisar e selecionar a noticia
pretendida. A noticia conta com apenas uma fotografia com os campos: síntese, título, data e
descrição completa.
3 Lista de Eventos
Administrador de sistemas:
• Controlo absoluto ao sistema. Deverá criar a base de dados e as tabelas necessárias com as
devidas configurações. De modo a ficar funcional, ou seja, permitir inserir, atualizar, remover e
consultar.
• Criação do sistema de compras. Deverá ter em conta que um cliente pode pagar em uma só vez,
vários pedidos.
• Criação de um sistema de Login/Logout – necessário para que uma compra seja válida e legal.
• Criação de um sistema de recibo após a compra.- Deverá enviar um email com a compra
finalizada ou então um ficheiro para imprimir.
• Sistema de stock.
• Possibilidade de manutenção pelo site – criação de um painel de controlo.
Cliente
• Possibilidade de criação de uma conta/identificação para concretizar as suas compras.
• Registar sugestões – poderá apresentar queixa/sugestões.
• Fazer alterações/definições – Poderá alterar todos os seus dados no painel de
controlo. (Exemplo: redefinir a palavra passe ou mudar o email).
• Sistema de carrinho de compras – juntar todas as compras e pagar uma só vez.
Moderador/Funcionário:
• Fazer a manutenção do site – acesso à base de dados para auxiliar as contas dos clientes, ou
seja, ficar responsável por este setor.
5 Wireframes
Serão apresentados 4 modelos idealizados para ser colocado no site: Menu inicial, produtos,
comentários e modal de login.
Anexos 5 e 6– Maquete para os comentários: noticias e produtos, modal para a parte do login.
Planeamento
De momento, todas as tarefas encontram-se finalizadas exceto android.
Para que eu pudesse ter um mais controlo do projeto, fiz diversas auditorias e avaliações ao projeto para que
pudesse ter o feedback atual do estado do projeto.
Melhorias e correções
O projeto não é perfeito, ou seja, possui algumas falhas em relação a: semântica de código e
uniformização de técnicas/hábitos.
Ao longo desde projeto fui aprendendo várias formas de resolver um problema, ou seja,
adquirindo vários conhecimentos de frameworks, etc..
Ou seja, a estrutura de código do projeto acabou por se tornar irregular e não tem uma estrutura
fixa para que por exemplo, outras pessoas poderem perceber o código de forma mais clara e simples.
Como eu fiz o projeto dividindo em partes, utilizei diversos “requires” para embeber várias páginas em
uma só, o que acabou por desregular o formato quando se vê no editor do browser.
Para futuras correções, melhoraria todo o CSS aplicando pré-processadores de CSS: SCSS.
Trocava a maior parte para fazer comunicações AJAX. Fazia uma nova organização de código, para
que o meu código pudesse ficar mais limpo, simples e fácil de compreender, caso outro aluno queira se
inspirar ou tirar apontamentos. Foi um ponto que infelizmente não consegui resolver a tempo.
Conclusão
Nos dias de hoje, cada vez mais as tecnologias estão em evolução tornando-se mais simples de
se compreender. Durante a consecução desde projeto, consegui perceber que um programador não
deve apegar-se a certas linguagens, isto é, manter-se na sua zona de conforto. Devemos sempre
apostar em mais conhecimento, nas linguagens mais recentes e modernas para que a nossa qualidade
de trabalho seja ainda melhor.
Eu gostei bastante de usar a linguagem PHP todavia não será uma linguagem que eu irei
prosseguir no futuro visto que atualmente existem melhores opções para melhor qualidade, sem querer
desmerecer claro, todo o ensinamento que tive por parte dos professores. Graças a esta nova visão,
consegui seguir em frente para buscar uma nova qualidade de código e de programação.
Em termos de trabalho, não senti muitas dificuldade durante a consecução desde trabalho. Apenas tive
uns momentos onde o meu projeto atrasou-se bastante a ponto de eu ter que abdicar de algumas noites
para repor todo o trabalho planeado para aquela semana em falta.
Graças aos meus estudos extra-curso, pude realizar este projeto da forma como tinha pensado e
idealizado, ficando até surpreendido com o resultado mas sempre com aquela incerteza de que
realmente este website é exequível ou não.
Gostaria de agradecer ao Professor Vitor Alves por todo o apoio prestado no e-mail em relação a
algumas frameworks, nomeadamente sobre a questão do PHPMailer e permissões de
pastas/ficheiros em linux.
Sem esforço, dedicação e empenho e o mais importante, motivação, era impossível terminar
este projeto que para mim já foi uma vitória tê-lo construido.
Dar também créditos a todos os meus colegas de trabalho e de curso pela motivação que me deram ao
longo do tempo para que eu pudesse ter novas ideias e implementá-las no projeto.
Bibliografia
[PortugalAProgramar - https://www.portugal-a-programar.pt/forums/topic/52752-codigo-valida
%C3%A7%C3%A3o-nifcontribuinte/ ]
[PHPMailer - https://github.com/PHPMailer/PHPMailer]
[PDO - http://php.net/manual/en/book.pdo.php]