Eu preciso mesmo aprender javascript?

Acho que a resposta é, o que quero fazer e onde?

Eu não vim aqui pra dar uma de filósofo. A ideia aqui é criar um servidor REST conectado em uma base de dados postgres, servindo dados básicos para um ou mais clientes.

Vou colocar a nível de estudo dados relacionados a usuários e suas credenciais.

Eu sei que irá surgir a pergunta, porque não usar mongo? A resposta é não sei, o que quero mesmo é fazer tanto o servidor como o cliente serem aplicações em javascript e que sejam seguras.

A ideia é criar uma aplicação em NestJS para servidor, acho que vou hospedar em um lightsail na amazon e um cliente desenvolvido em reactjs em uma página do github gh-pages.

É preciso que você saiba, que o que estou fazendo é um roteiro pra que eu entenda melhor o funcionamento do processo, e talvez eu falha em algo. Então vamos seguir e entregar as seguintes funcionalidades:

Um servidor com duas interfaces:

  • HTTP
    • Usar componente que atenda melhor a especificações ou padrões existentes
    • Na verdade, me parece que consigo fazer isso com NestJS que trabalha com https://github.com/axios/axios
    • rotas iniciais que queremos no servidor:
      • PUT | POST /login
        • Recebe via JWT os dados de acesso ( app_id e password ) assinados pela chave de assinatura
        • Verifica se o token é válido
        • Autentica o usuário 
        • Gera e retorna um novo token de acesso para o usuário
  • GET /login
    • Recebe via JWT app_id e o token assinados pela chave de assinatura
    • Retorna caso autenticado um novo token para o próximo acesso.
  • VIA SHELL (terminal)
  • Método que crie, edite, altere ou exclua usuários
  • Na criação do usuários vamos pedir
    • username
    • password
    • e que confirme o password
  • Na criação do usuário, vamos colocar uma validação para que: 
    • O nome de usuário não contenha espaços
    • O nome de usuário tenha uma string com mínimo de 8 e máximo de 32 caracteres
    • O nome de usuário não comece por caractere especial
    • O nome de usuário seja um nome único na base de dados usada
    • Que a senha tenha no mínimo 8 caracteres
  • Ainda na criação do usuário, assim que ele for cadastrado, deve ser gerado automaticamente um token de 64 bits que vamos usar por hora para assinar um token JWT (mais pra frente mudamos isso para chave assimétrica que acho que seja uma opção mais segura), um valor para app_id (uma string de 32 bits única que seja chave primária de app [id] ) e app_name (uma string qualquer que identifique o app criado)
    Na verdade o que teremos é uma relação 1 >—< N entre apps e usuários, e queremos que seja possível que um app tenha um ou mais usuários. Pensemos aqui que nosso real cliente (quem irá acessar a aplicação) é o usuário, mas queremos manter ele apenas em nosso servidor relacionado a um app_id e uma chave que que usaremos para assinar o token( mais pra frente mudamos isso para chave assimétrica que acho que seja uma opção mais segura).

Para quem nunca construiu nada de concreto em javascript, acho que está ótimo, vamos meter a mão na massa?