CodigoPraTodos / cursospratodos

Plataforma de Cursos da Comunidade Código pra Todos
2 stars 0 forks source link

Módulo Instrutor (nodejs-api) #5

Closed vazgabriel closed 4 years ago

vazgabriel commented 4 years ago

Obs:

Tarefas:

  1. Preparar uma rota para pedir para ser um instrutor. Inicialmente o app não vai permitir qualquer um ser instrutor, e isso será aprovado por um admin. (Por padrão o seed tem um instrutor de exemplo para fazer testes sem precisar fazer o processo se o módulo admin ainda não estiver pronto) Essa rota deverá criar um registro em uma tabela separada como InstructorRequest, com as informações do instrutor (descrição simples e completa) e um outro texto (255 caracteres) de porque a pessoa quer ser um instrutor no curso pra todos, além de um status de aprovado/reprovado/aguardando (ApproveStatus) e um espaço para responder a razão de reprovação (reproved_reason) (também com 255 caracteres). Não se pode ter dois requests por usuário, depois que o usuário enviar uma request, ele pode alterar (voltando ao status de WAITING_FOR_REVIEW), se for reprovado, ele pode alterar novamente quantas vezes quiser, porém não criar novas requests. (É só colocar o user_id como primary key e na hora de criar verificar se o usuário já não é um instrutor) (Na área admin no futuro, quando alguém for aprovado, deve-se deletar o request, e criar o dado no instructor)

  2. No seeder, nós já criamos um Role pra instrutor (que na área admin quando aprovarmos um instrutor vamos adicionar ao usuário), temos que criar um Middleware instructorAuth que verifica se o token do usuário é válido, e se ele é um instrutor para rotas "instructor-only"

  3. Criar controllers para gerenciamento de Cursos (CRUDs) para Curso, aula do curso e exercícios por aula. Para isso vamos precisar iniciar a configuração de um Amazon S3 (mas podemos usar o módulo salvando o arquivo localmente, e que o próprio módulo salve na S3 se estiver staging/produção) onde salvaríamos a thumbnail do curso e detalhes do exercício, etc. (Inicialmente vamos deixar as lógicas de lambda pro futuro) Obs: -- O curso tem a opção de deixar-lo público ou de remover-lo (Sem deletar) usando o status -- Cada aula tem a propriedade is_public para definir se essa aula em específico está disponível para ser vista -- Deve ser possível reordenar aulas como esse exemplo

  4. Temos que criar as lógicas de aprovação de exercício manual (apenas rotas para listar respostas dos exercícios, detalhes, e poder aprovar/reprovar, podemos também adicionar um reproved_reason de 255 caracteres na tabela course_class_exercise_responses para o instrutor ajudar o aluno com a resposta, enviar links, etc)

  5. Melhorar seeds relacionados a cursos (hoje temos o seed de um curso simples sem aulas nem nada), criar ao menos 3 cursos, com aulas inclusas apontando a videos reais do youtube, ter alunos inscritos em cursos, que já assistiram algumas aulas e inclusive já enviaram respostas a exercícios (o que necessita de seed de exercícios também) Ex: para o vídeo https://www.youtube.com/watch?v=YSjEy9U8bDA o ID é YSjEy9U8bDA

vazgabriel commented 4 years ago

Temos que pensar na estratégia de módulos que vamos usar no app, verificar se o Adonis já tem um pattern, se criamos os módulos como pastas dentro do Http, e colocamos o controller dentro de cada pasta, etc...

app/Controllers/Http/Instructor/CourseController.ts
app/Controllers/Http/Admin/AdminController.ts
...

O ideal é fazer da forma mais isolada possível, de forma a simplificar separação do sistema em micro-serviços em um futuro

vazgabriel commented 4 years ago

Eu vou preparar o módulo de arquivos/S3

vazgabriel commented 4 years ago

Continuando esse issue hoje, depois de um tempo meio desligado

vazgabriel commented 4 years ago

Subi umas atualizacoes na PR acima, de forma a poder comecar a brincar no frontend. Mas vou seguir trabalhando nesse issue

vazgabriel commented 4 years ago

Adicionei mais algumas features no PR acima, vou fazer agora a integracao AWS, e todos os testes

vazgabriel commented 4 years ago

Finalizando o Issue depois da ultima parte (3). Falta a melhora das seeds, colocando mais exemplos e etc. Mas farei em um futuro proximo