{"id":1071,"date":"2019-10-18T09:14:24","date_gmt":"2019-10-18T12:14:24","guid":{"rendered":"http:\/\/web.inf.ufpr.br\/didonet\/?page_id=1071"},"modified":"2019-10-25T11:48:50","modified_gmt":"2019-10-25T14:48:50","slug":"ci1163-trabalho-2019-2","status":"publish","type":"page","link":"https:\/\/web.inf.ufpr.br\/didonet\/teaching-disciplinas\/ci1163-2019-2\/ci1163-trabalho-2019-2\/","title":{"rendered":"CI1163 Trabalho 2019 2"},"content":{"rendered":"\n<h1>CI1163-CI163 Design\/Projeto de Software<\/h1>\n<h1>Trabalho II<\/h1>\n<p>O trabalho consiste em realizar o projeto e implementa\u00e7\u00e3o de uma <strong>extens\u00e3o<\/strong> da API do sistema\u00a0 de ensalamento, para exercitar o cen\u00e1rio de aprimoramento de um projeto existente.<\/p>\n<p>Os integrantes do grupo dever\u00e3o baixar o c\u00f3digo da \u00faltima vers\u00e3o do GitLab do Ensalemento, instalar em sua m\u00e1quina, e projetar e implementar um conjunto de classes para cria\u00e7\u00e3o de um Mural de informa\u00e7\u00f5es (vers\u00e3o digital do <em>&#8220;mural do DInf&#8221;<\/em>). As classes e API implementadas dever\u00e3o ser integradas com as classes j\u00e1 existentes.<\/p>\n<h3>1. Especifica\u00e7\u00e3o do mural<\/h3>\n<p>O mural ser\u00e1 um agregador de informa\u00e7\u00f5es\/avisos \u00fateis para os usu\u00e1rios do Departamento (alunos, servidores e professores), relativos \u00e0s turmas (cancelamentos\/provas\/etc.), salas (troca de sala\/sala em laborat\u00f3rio), dias de aula (cancelamentos\/mudan\u00e7a de hor\u00e1rio), entre outros. O mural dever\u00e1 conter:<\/p>\n<ul>\n<li><strong>Informa\u00e7\u00f5es:<\/strong> mensagem de exibi\u00e7\u00e3o; respons\u00e1vel pela mensagem (servidor ou professor); sala (n\u00e3o obrigat\u00f3rio); turma (n\u00e3o obrigat\u00f3rio); \u00f3rg\u00e3o; data; indica\u00e7\u00e3o se o aviso ainda est\u00e1 v\u00e1lido.<\/li>\n<li><strong>Funcionamento: <\/strong>o mural implementado dever\u00e1 ser acessado atrav\u00e9s de API RESTful. O mural dever\u00e1 ter funcionalidades CRUD: cria\u00e7\u00e3o, leitura (todas as ocorr\u00eancias, ou filtrado por cada um dos itens acima separadamente), altera\u00e7\u00e3o e exclus\u00e3o.<\/li>\n<li><strong>Interface gr\u00e1fica: <\/strong>n\u00e3o ser\u00e1 necess\u00e1ria a implementa\u00e7\u00e3o de interface gr\u00e1fica, todos os acessos dever\u00e3o ser feitos atrav\u00e9s de chamadas diretas a API implementada.<\/li>\n<\/ul>\n<h4>1.1 Especifica\u00e7\u00e3o das classes<\/h4>\n<p>As novas classes dever\u00e3o ser definidas em UML, usando um editor (escolha livre). O modelo de classes dever\u00e1 extender o <em><a href=\"http:\/\/www.inf.ufpr.br\/didonet\/files\/diagrama_ensalamento.png\">modelo existente, dispon\u00edvel neste link<\/a>. <\/em>O modelo criado dever\u00e1 ser gravado em formato .PNG.<\/p>\n<h4>1.2 Implementa\u00e7\u00e3o das classes<\/h4>\n<p>As classes podem ser geradas usando o <a href=\"https:\/\/loopback.io\/doc\/en\/lb3\/Application-generator\">gerador de aplica\u00e7\u00f5es do Loopback<\/a>, atrav\u00e9s do comando <strong>lb. <\/strong><\/p>\n<p>O gerador de aplica\u00e7\u00f5es gera as classes e os arquivos JSON com os atributos especificados.<\/p>\n<p>Um dos pontos centrais do trabalho ser\u00e1 entender como s\u00e3o criadas as rela\u00e7\u00f5es entre as classes, pois h\u00e1 diferentes tipos de rela\u00e7\u00f5es poss\u00edveis. A cria\u00e7\u00e3o de rela\u00e7\u00f5es <a href=\"https:\/\/loopback.io\/doc\/en\/lb3\/Define-model-relations.html\">\u00e9 descrita neste link.<\/a><\/p>\n<h3>2. Instala\u00e7\u00e3o da vers\u00e3o atual<\/h3>\n<p>Uma parte importante do trabalho \u00e9 a compreens\u00e3o do sistema existente e das ferramentas usadas no seu projeto e implementa\u00e7\u00e3o. O trabalho \u00e9 uma extens\u00e3o de um projeto j\u00e1 existente, sendo necess\u00e1rio instalar a vers\u00e3o atual, seguindo os seguintes passos:<\/p>\n<h4>2.1 Executando com Docker e Postgres<\/h4>\n<p>Esta execu\u00e7\u00e3o segue os passos de desenvolvimento e disponibiliza\u00e7\u00e3o da vers\u00e3o completa, com banco de dados PostgreSQL.<\/p>\n<ul>\n<li>Clonar o reposit\u00f3rio do GitLab <a href=\"https:\/\/gitlab.c3sl.ufpr.br\/ensalamento\/ensalamento-back\/\">https:\/\/gitlab.c3sl.ufpr.br\/ensalamento\/ensalamento-back<\/a> . Ap\u00f3s a clonagem, o grupo ter\u00e1 acesso ao c\u00f3digo j\u00e1 existente. O link para clonagem est\u00e1 dispon\u00edvel no reposit\u00f3rio.<\/li>\n<li>As instru\u00e7\u00f5es para instala\u00e7\u00e3o est\u00e3o dispon\u00edveis no arquivo <em>README.md<\/em> do reposit\u00f3rio. \u00c9 necess\u00e1rio instalar o <strong>Node.js, npm <\/strong>e a biblioteca do <strong>Loopback. N\u00e3o \u00e9 necess\u00e1rio (<\/strong>nem recomendado) instalar o IBM API connect.<\/li>\n<\/ul>\n<p><strong>Resultado da instala\u00e7\u00e3o:<\/strong> os passos da instala\u00e7\u00e3o ir\u00e3o baixar o c\u00f3digo do GitLab e criar 2 containers Docker, 1 para o servidor de aplica\u00e7\u00e3o, e 1 para o banco de dados PostgreSQL.<\/p>\n<p><strong>Poss\u00edvel problema: <\/strong>pode acontecer erro de permiss\u00e3o na execu\u00e7\u00e3o do container, que poder\u00e1 ser corrigido com o comando: <strong>sudo usermod -a -G docker $USER<\/strong><\/p>\n<h4>2.2 Execu\u00e7\u00e3o sem o Docker e Postgres, com banco local<\/h4>\n<p>O projeto pod ser executado sem o Docker e o Postgres instalados. Para isso, ser\u00e3o necess\u00e1rias algumas modifica\u00e7\u00f5es no projeto atual, para que use (1) um banco de dados em mem\u00f3ria e (2) execu\u00e7\u00e3o direta com o <strong>NPM.<\/strong><\/p>\n<ul>\n<li>Clonar o reposit\u00f3rio do GitLab <a href=\"https:\/\/gitlab.c3sl.ufpr.br\/ensalamento\/ensalamento-back\/\">https:\/\/gitlab.c3sl.ufpr.br\/ensalamento\/ensalamento-back<\/a> .<\/li>\n<li>Instalar Node.js, npm e Loopback<\/li>\n<li>Instalar depend\u00eancias, atrav\u00e9s do comando : <strong>npm i<\/strong><\/li>\n<li>Modificar os arquivos abaixo:\n<ul>\n<li><em>.\/server\/datasources.development.json:<\/em>\n<ul>\n<li>substituir o conector &#8220;postgresql&#8221; por &#8220;memory&#8221;<\/li>\n<\/ul>\n<\/li>\n<li>Remover o elemento &#8220;container&#8221; dos arquivos\n<ul>\n<li><em>.\/server\/<\/em>model-config.json<\/li>\n<li><em>.\/server\/<\/em>datasources.development.json<\/li>\n<\/ul>\n<\/li>\n<li>.\/server\/boot\/authentication.js\n<ul>\n<li>Comentar a linha <em>server.enableAuth();<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Esta instala\u00e7\u00e3o iniciar\u00e1 a API servidora, sem necessidade de autentica\u00e7\u00e3o e de um banco de dados persistente em disco. Os dados ficar\u00e3o dispon\u00edveis na mem\u00f3ria, e ser\u00e3o exclu\u00eddos quando o servidor for parado.<\/p>\n<h4><strong>2.3 Execu\u00e7\u00e3o com o SQLite<\/strong><\/h4>\n<p>O ensalamento pode ser executado com o SQLite, para que os dados fiquem gravados localmente. \u00c9 uma vers\u00e3o &#8220;light-weight&#8221; da instala\u00e7\u00e3o completa. Para execu\u00e7\u00e3o o tuturial abaixo deve ser seguido. O script abaixo cont\u00e9m todas as linhas de comando, exceto a cria\u00e7\u00e3o do banco SQLite e a inclus\u00e3o dos dados (\u00faltima tarefa do tutorial)<\/p>\n<ul>\n<li><a href=\"http:\/\/www.inf.ufpr.br\/didonet\/files\/Executando_ensalamento_nos_labs.pdf\">Tutorial para execu\u00e7\u00e3o do ensalamento nos Labs<\/a>, com SQLite<\/li>\n<li><a href=\"http:\/\/www.inf.ufpr.br\/didonet\/files\/ensalamento-labs.sh\">Script com lista dos comandos<\/a><\/li>\n<\/ul>\n<p>O banco de dados do ensalamento pode ser acessado executando o comando abaixo. Os comandos poss\u00edveis est\u00e3o no <a href=\"https:\/\/www.sqlite.org\/cli.html\">manual do CLI SQLite3<\/a><\/p>\n<ul>\n<li>sqlite3 ensalamento.db<\/li>\n<\/ul>\n<h3>3. Entrega do trabalho<\/h3>\n<p>O projeto poder\u00e1 ser entregue em duas modalidades:<\/p>\n<p><strong>3.1 Disponibiliza\u00e7\u00e3o em reposit\u00f3rio aberto: <\/strong>o grupo poder\u00e1 disponibilizar a implementa\u00e7\u00e3o em um reposit\u00f3rio pessoal (no GitLab ou Github). O grupo dever\u00e1 enviar um email para marcos.ddf@inf.ufpr.br com o nome dos integrantes e com o link para o reposit\u00f3rio.<\/p>\n<p><strong>3.2 Envio por email:\u00a0 <\/strong>o grupo dever\u00e1 enviar TODO o projeto criado compactado em um arquivo com nome <em>trabalho1163<\/em> (<strong>.tar.gz<\/strong> ou<strong>. zip).<\/strong><\/p>\n<p><strong>EM AMBOS OS CASOS,<\/strong> o modelo UML criado dever\u00e1 estar no diret\u00f3rio raiz do projeto. <strong>TODO <\/strong>o c\u00f3digo dever\u00e1 ser entregue, isto \u00e9, o c\u00f3digo existente e as novas implementa\u00e7\u00f5es, para que possa ser extra\u00eddo e executado. Trabalhos sem estes 2 elementos (c\u00f3digo + modelo UML) n\u00e3o ser\u00e3o considerados. Os trabalhos ser\u00e3o extra\u00eddos e testados em Linux Ubuntu 18.x, com Docer 18.09.7.<\/p>\n<p><strong>Grupos: <\/strong>o trabalho poder\u00e1 ser individual, ou em grupo com no m\u00e1ximo 2 integrantes.<\/p>\n<p><strong>DATA DE ENTREGA : 20.novembro.2019.<\/strong> Cada dia de atraso ser\u00e1 descontado 15 pontos da nota.<br \/><br \/><\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":21,"featured_media":0,"parent":984,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1071","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages\/1071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/comments?post=1071"}],"version-history":[{"count":22,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages\/1071\/revisions"}],"predecessor-version":[{"id":1144,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages\/1071\/revisions\/1144"}],"up":[{"embeddable":true,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages\/984"}],"wp:attachment":[{"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/media?parent=1071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}