{"id":17912548,"url":"https://github.com/micalevisk/pw2-2019-2","last_synced_at":"2025-03-23T22:34:45.391Z","repository":{"id":55674324,"uuid":"202606800","full_name":"micalevisk/PW2-2019-2","owner":"micalevisk","description":":mortar_board: :books: Programação para Web II (ICC008) :house: :octocat: :white_check_mark:","archived":true,"fork":false,"pushed_at":"2020-12-13T17:00:15.000Z","size":3361,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-08T20:47:26.157Z","etag":null,"topics":["icomp","ufam"],"latest_commit_sha":null,"homepage":"https://micalevisk-chessapp.herokuapp.com","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/micalevisk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-15T20:26:01.000Z","updated_at":"2023-08-28T00:56:14.000Z","dependencies_parsed_at":"2022-08-15T06:10:42.969Z","dependency_job_id":null,"html_url":"https://github.com/micalevisk/PW2-2019-2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/micalevisk%2FPW2-2019-2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/micalevisk%2FPW2-2019-2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/micalevisk%2FPW2-2019-2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/micalevisk%2FPW2-2019-2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/micalevisk","download_url":"https://codeload.github.com/micalevisk/PW2-2019-2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245180280,"owners_count":20573642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["icomp","ufam"],"created_at":"2024-10-28T19:45:48.250Z","updated_at":"2025-03-23T22:34:44.462Z","avatar_url":"https://github.com/micalevisk.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://www.colegioweb.com.br/wp-content/uploads/2017/12/Liberados-os-gabaritos-do-PSC-2018-da-UFAM.png\" width=\"150\" align=\"right\"\u003e\n\n\n\u003e ICC008 ~ **Programação para a Web II** ~ 2019/2\n\n----------------------------------------\n\n**Curso:** Ciência da Computação \u003cbr\u003e\n**Professor:** David Fernandes de Oliveira \u003cbr\u003e\n**Aluno:** Micael Levi ― 21554923 \u003cbr\u003e\n\n----------------------------------------\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://micalevisk-chessapp.herokuapp.com/\"\u003e\u003cimg src=\"http://heroku-badge.herokuapp.com/?app=micalevisk-chessapp\u0026style=flat\" /\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n## Uso local\n\n```bash\ncd Chess\n\ncp .env.prod.example .env\nvim .env # Informe as credenciais da sua instância MySQL\n\n# Instanciar o Redis em um container Docker (ou baixe em https://redis.io/download)\ndocker run -d --name mllc_redis -p 6379:6379 -it redis:alpine # a SESS_URI será `redis://localhost:6379`\ndocker run -it --network=host --rm redis:alpine redis-cli  # Container para usar o `redis-cli` do conectado à instância anterior\n# para apagar o container criado\ndocker container rm -f mllc_redis\n\n\nnpm install\n\nnpm run prod:db:migrate\n\nnpm run prod:db:seed\n\nnpm start\n```\n\n## Uso local para desenvolvimento\n\n```bash\nnpm install\n\ncd Chess\n\ncp .env.dev.example .env.dev\nvim .env.dev # Informe as credenciais da sua instância MySQL\n\nnpm run dev:db:migrate\n\nnpm run dev:db:seed\n\nnpm run dev\n```\n\n## Sobre as _seeders_\n\nUsuários criados (todos com a senha `123456`):\n- 1. `mllc@icomp.ufam.edu.br`\n- 2. `ana@gmail.com`\n- 3. `jb@gmail.com`\n\u003c!-- WIP --\u003e\n\n\n\n## Regras do Trabalho Prático\n\u003e vide [trabalho_pratico](./trabalho_pratico.pdf)\n\n1. [x] :one: A aplicação deverá ter uma rota `/sobre`, que deverá conter o conteúdo da seção Sobre o jogo de Xadrez deste documento. Essa página também deverá conter uma imagem das peças de xadrez, tal como mostrado em https://xadrezapp.herokuapp.com/sobre.\n\n2. [x] :two: Os usuários poderão se cadastrar na aplicação através da rota `/signup`. Os campos do formulário de cadastro são: nome completo (precisa ter entre ? e 100 caracteres), endereço de e-mail (precisa ser um email válido), curso na UFAM, senha de acesso e confirmação de senha. A senha precisa ter 6 caracteres ou mais, e é importante verificar se a senha digitada pelo usuário é igual à senha digitada no campo de confirmação.\n\n3. [x] :three: O banco de dados deverá obedecer o esquema da Figura 2. Cada uma das tabelas deverá conter um Modelo e ao menos uma Migração. A tabela area deverá ser alimentada através de um _seeder_ do Sequelize.\n\n4. [x] :four: As senhas deverão ser armazenadas no banco de dados de forma criptografada, através do módulo **bcrypt** (vide slides da disciplina).\n\n5. [x] :five: Quando o usuário não estiver logado na aplicação, o menu superior deverá conter apenas as opções: **Sobre** (rota `/sobre`), **Login** (rota `/login`) e **Sign Up** (rota `/signup`). Ao acessar a tela de login (que deverá conter apenas os campos email e senha) e informar as credenciais corretamente, o menu superior deverá passar a conter as seguintes opções: **Nova Partida** (rota `/partida`), **Ranking** (rota `/ranking`), **Curso** (rota `/curso`), **Sobre** (rota `/sobre`) e **Logout** (rota `/logout`).\n\n6. [x] :six: A opção **Nova Partida** (rota `/partida`) irá iniciar uma nova partida de xadrez. No entanto, o jogador que iniciou a partida deverá aguardar a chegada de algum oponente (vide Figura 4). As peças brancas serão do jogador que iniciou a partida, enquanto as peças pretas serão do oponente. A Figura 3 mostra a página que é carregada quando a usuária Mariana Mozart clica em **Nova Partida**.\n\n7. [x] :seven: A página principal de todos os usuários irá apresentar uma listagem das partidas aguardando oponentes. A Figura 4 mostra a página principal de um usuário fictício chamado Eduardo Berlot. Quando o Eduardo aceita o desafio da Mariana (clicando na partida mostrada na página principal), ele será direcionado para a página contendo o tabuleiro e poderá iniciar o jogo com a Mariana (vide Figura 5). Note que, como o Eduardo Berlot ficou com as peças pretas, então a parte de baixo de seu tabuleiro deverá conter as peças pretas. Por outro lado, como a Mariana ficou com as peças brancas, a parte de baixo de seu\ntabuleiro deverá conter as peças brancas.\n\n8. [x] :eight: A implementação do chat apresentado nas Figuras 3 e 5 não é obrigatória. No entanto, o desenvolvimento do chat irá render alguns pontos extras para o aluno. A ideia do chat é a troca de mensagens entre os dois competidores da partida.\n\n9. [x] :nine: A opção **Ranking** do menu superior (rota `/ranking`) deverá mostrar uma página contendo uma listagem dos usuários com seus respectivos números de vitórias. O ranking deve mostrar apenas usuários que já venceram ao menos uma partida, e é ordenado de forma decrescente de acordo com o número de vitórias de cada um.\n\n10. [x] :one::zero: Todos os acessos à aplicação deverão gerar logs  través do middleware `Morgan` com a opção short.\n\n11. [x] :one::one: Os pacotes `@fortawesome/fontawesome-free`, `jquery`, `popper.js` e `bootstrap` deverão ser instalados na aplicação. Esses pacotes serão usados pelo template da aplicação (vide regra 08). Para maiores informações sobre esses pacotes, favor consultar os slides da disciplina.\n\n12. [x] :one::two: O site [Bootswatch](https://bootswatch.com) – possui um conjunto de templates baseados no Bootstrap. Vá até esse site, escolha um dos temas disponíveis e instale ele em sua aplicação.\n\n13. [x] :one::three: Deverá ser implementado um **CRUD** para o modelo `Curso`, nos moldes do que fora implementado pelo professor durante as aulas. As páginas do CRUD deverão usar ícones do pacote @fortawesome/fontawesome-free. Todos os formulários deverão usar o **CSRF** - Cross-Site Request Forgery.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicalevisk%2Fpw2-2019-2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicalevisk%2Fpw2-2019-2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicalevisk%2Fpw2-2019-2/lists"}