Skip to content

Commit

Permalink
proffy v2 - projeto final de bloco Microsserviços e Mensageria .netcore
Browse files Browse the repository at this point in the history
  • Loading branch information
Gon committed Sep 19, 2020
1 parent 1894498 commit 7527f2a
Show file tree
Hide file tree
Showing 645 changed files with 71,327 additions and 10,120 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

# dependencies
/server/node_modules
/server/Proffy.EmailMicroservice.Application/Settings.cs
/web/node_modules
/mobile/node_modules
/.pnp
Expand Down
170 changes: 98 additions & 72 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,72 +1,98 @@
# Projeto para Estudo de ReactJS, React Native e NodeJS
## Anotações rápidas:

### ReactJS
```
$ create-react-app web --template typescript
$ yarn add react-router-dom
$ yarn add @types/react-router-dom -D
$ yarn add axios
```

### NodeJs
```
$ yarn init -y
$ yarn add typescript -D
$ yarn tsc --init
tsconfig.json -> "target": "es5" para "target": "es2017",
yarn add ts-node-dev -D
package.json ->
"scripts": {
"start": "tsnd --transpile-only --ignore-watch node_modules --respawn src/server.ts"
},
$ yarn add express
$ yarn add @types/express -D
$ yarn add knex sqlite3
package.json ->
"scripts": {
"start": "tsnd --transpile-only --ignore-watch node_modules --respawn src/server.ts",
"knex:migrate": "knex --knexfile knexfile.ts migrate:latest",
"knex:migrate:rollback": "knex --knexfile knexfile.ts migrate:rollback"
},
Exemplo de post:
{
"name": "Fulano",
"avatar": "https://avatars1.githubusercontent.com/u/32773851?s=460&u=f4ad109717d170dc5bc8c4e0327681a348d41682&v=4",
"whatsapp": "18451848",
"bio": "Bio",
"subject": "Informatica",
"cost": 80,
"schedule": [
{ "week_day": 1, "from": "8:00", "to": "14:00" },
{ "week_day": 2, "from": "8:00", "to": "14:00" },
{ "week_day": 5, "from": "8:00", "to": "14:00" }
]
}
$ yarn add cors
$ yarn add @types/cors -D
```

### React Native
```
$ npm install -g expo-cli
$ expo init mobile
- blank typescript
- play store -> expo client
- Run on Android device/emulator
Caso erros ao executar: https://github.com/Rocketseat/expo-common-issues
$ expo install expo-font @expo-google-fonts/archivo @expo-google-fonts/poppins
$ yarn add @react-navigation/native
$ expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view
$ yarn add @react-navigation/stack
$ yarn add @react-navigation/bottom-tabs
$ yarn add axios
$ expo install @react-native-community/async-storage
```
# Proffy - Sua plataforma de estudos online

## Índice

- [O que é Proffy?](#o_que_e_proffy)
- [Sobre o projeto](#sobre_o_projeto)
- [UML](#uml)
- [Protótipo](#prototipo)
- [Instalação](#instalacao)
- [Dívida Ténica / Visão](#divida_tecnica)

<a id="o_que_e_proffy"></a>

## O que é Proffy?

Proffy é uma plataforma que encurta a distância entre professores que realizam aula particular e alunos.

O professor cria uma conta com seu nome e contato, informa o que ensina (Ex.: Inglês, Química, Violão ou outros) e quais horários está disponível. O aluno acessa a plataforma, busca pela matéria, dia e horário desejado e pronto! O aluno escolhe um professor da lista, entra em contato e combina a aula.

[Apresentação pptx](docs/Apresentação.pptx)

<a id="sobre_o_projeto"></a>

## Sobre o Projeto

**Proffy é um projeto acadêmico para a entrega do trabalho do bloco de Microserviços e Mensageria da Pós Engenharia de Software .NET. Portanto, para atender as rubricas do trabalho, o back foi PROPOSITALMENTE segmentado em microserviços, estruturado em DDD e utilizado mensageria para a funcionalidade de envio de e-mail.**

De onde surgiu Proffy? Bem... Dai a César o que é de César, a DEUS o que é de DEUS e os créditos a quem pertence.

Proffy foi idealizado pela Rocketseat para a "Next Level Week #2" onde o back-end foi em NodeJS e o front-end em ReactJS e ReactNative ([Proffy v1](https://github.com/gonribeiro/Proffy/releases/tag/v1.0.0)). Sendo assim, estou aproveitando parte do front-end já criado, reescrevendo o back em .NetCore, incrementando ambos (back e front) com funcionalidades para a "versão 2" desse projeto que contém:

- Microserviço de Usuário: Responsável pelos dados do professor e a autenticação com JWT.
- Microserviço de Cursos: Responsável pelas informações dos cursos lecionados.
- Microserviço de Email: Responsável por enviar e-mail.
- Index de cada microserviço (exceto email) exibe a documentação API pelo Swagger.
- Utilizado RabbitMQ para mensagens. 
- Utilizado conceito "mobile first" onde as telas são responsivas se adaptando a computadores, tablets e smartphone.
- Estilização customizada (sem uso de bootstrap ou material design).

<a id="uml"></a>

## UML

Domínio

![Domain](docs/images/domain2.jpg)

Casos de Uso [.](https://www.ateomomento.com.br/caso-de-uso-include-extend-e-generalizacao/) [.](https://www.uml-diagrams.org/class-diagrams-overview.html)

![Domain](docs/images/casos_de_uso.jpg)

<a id="prototipo"></a>

## Protótipo ([Visualizar](https://www.figma.com/file/ZRvbZ16cOsFlcir702PbS4/Proffy-Web?node-id=308122%3A1))

![Database](docs/images/layout.jpg)

<a id="instalacao"></a>

## Instalação

Olá! Aqui irei informar apenas alguma particularidade do projeto para auxiliá-lo na execução.

Sendo assim, assumo que já possua o conhecimento necessário com .NetCore3.1 e ReactJS e consiga executar ambos ambientes (web e server).

- Ao executar o projeto do "server - .netcore", tenha certeza de executar o UserMicroservice e CourseMicroservice simultâneamente.
- No Visual Studio, com o botão direito sobre a "Solução Proffy", clique em "Definir Projetos de Inicialização". Selecione "Vários projetos de inicialização" e em "ação" permita "Iniciar" os projetos "CourseMicroservice.Application e UserMicroservice.Application" (apenas esses são necessários).
- Executar "update-database" para cada micro serviço.

<a id="divida_tecnica"></a>

## Dívida técnica / Visão

2.0

- Web
- Mensagem de carregando durante as requisições
- React Select: Required não funciona, Usar como componente, Corrigir exibição da lista
- Server e Web
- Máscara e validação dos campos facebook, whatsapp e custo
- Impedir cadastro de disponibilidade de aula com hora fim menor ou igual a de inicio

2.1

- Web: Criar menu de navegação
- Server: Estruturá-lo em DDD
- Server e Web
- Atualizar token de acesso (https://code-maze.com/using-refresh-tokens-in-asp-net-core-authentication/)
- Email de confirmação de criação de conta (conta deverá ser habilitada após confirmação)
- Inserir descrição do curso no momento do cadastro pelo professor (campo já criado no banco de dados)
- Permitir professor desativar ou excluir curso cadastrado
- Upload e armazenamento da foto de perfil
- Permitir professor cadastar vários cursos e horários
- Professor cadastrar novas categorias de matérias
- Opção para usuário redefinir a senha quando esquecida
- Área do administrador
- Cadastro de alunos
- Avaliação do professor pelo aluno
Binary file added docs/Apresentação.pptx
Binary file not shown.
20 changes: 20 additions & 0 deletions docs/bancodedados.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## Banco de Dados

https://yuml.me/diagram/scruffy/class/draw

```
[Users]1-1[TeacherCourses]
[TeacherCoursesSchedules]1-1[TeacherCourses]
[Connections]1..*-1[Users]
[TeacherCourses]1-1[Courses]
[Users; Id: Guid; Email: Varchar(40); Password: Varchar(40); Name: Varchar(120); Photo: Varchar(255); Whatsapp: Varchar(13); Facebook: Varchar(255); Bio: Text; CreatedAt: DateTime; Actived: Bool ]
[Connections; Id: Guid; UserId: Guid; CreatedAt: DateTime ]
[TeacherCourses; Id: Guid; UserId: Guid; Cost: Varchar(7); Description: Varchar(255); Actived: Bool ]
[TeacherCoursesSchedules; Id: Guid; ClassId: Guid; WeekDay: Int; From: Int; To: Int ]
[Courses; Id: Guid; Name: Varchar(50); Actived: Bool ]
```
16 changes: 16 additions & 0 deletions docs/casos_de_uso.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## Caso de Uso

https://yuml.me/diagram/scruffy/class/draw

```
[Professor]-(Criar conta)
[Professor]-(Efetuar Login)
[Professor]-(Atualizar dados pessoais)
[Professor]-(Cadastrar Curso)
(Cadastrar Curso)<(Cadastrar horário disponível)
[Professor]-(Atualizar Curso)
[Professor]-(Atualizar horário disponível)
[Aluno]-(Procurar professor/curso)
(Procurar professor/curso)<(Entrar em contato com professor)
```
33 changes: 33 additions & 0 deletions docs/dominio.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## Domínio

https://yuml.me/diagram/scruffy/class/draw

```
[User]-[TeacherCourse]
[TeacherCoursesSchedule]-[TeacherCourse]
[Connection]-[User]
[TeacherCourse]-[Course]
[TeacherCoursesSchedule]-[EnumWeekDay]
[User; Id; Email; Password; Name; Photo; Whatsapp; Facebook; Bio; CreatedAt; Actived ]
[Connection; Id; UserId; CreatedAt ]
[TeacherCourse; Id; UserId; Cost; Description; Actived ]
[TeacherCoursesSchedule; Id; ClassId; WeekDay; From; To ]
[Course; Id; Name; Actived ]
[EnumWeekDay; Segunda; Terça; Quarta; Quinta; Sexta; Sábado]
[ TeacherCourseSchedule; CreateSchedule(TeacherCourseSchedule); GetSchedule(Guid TeacherCourseId); UpdateSchedule(TeacherCourseSchedule); ]
[ TeacherCourse; CreateTeacherCourse(TeacherCourse); GetTeacherCourse(Guid UserId); Update TeacherCourse(TeacherCourse); SearchCourse(CourseId, weekday, from)]
[UserService; CreateUser(User); GetUser(Guid UserId); UpdateUser(User); Login (Email e Password); SearchUser(List Guid Id)]
[WeekDayEnum; GetAll()]
[Courses; GetAll()]
```
Loading

0 comments on commit 7527f2a

Please sign in to comment.