Indexador de imagens

Por quê?

Eu estava com uma pasta no meu telefone com varias imagens, por volta de 1400, e é difícil procurar imagens soltas nessa pasta. Por isso comecei a pensar "como posso fazer para procurar aquela imagem que sei que está aqui" mas não sabia de quando era ou o nome da imagem. Quando estava fazendo um trabalho de banco de dados eu pensei por que não fazer uma ferramenta para indexar todas essas imagens. E aqui estou pensando numa aplicação web e em um backend para criar essa ferramenta.

Aplicação

Provavelmente utilizará como backend um servidor com um banco de dados mysql Postgres para armazenar as informações dos arquivos, tags e descrição. Estou pensando em utilizar o next.js como proxy para o cliente acessar o backend e fornecer um serviço de autenticação unificada para os dois servidores, o banco de dados e o de arquivos.

Será utilizado o serviço de autenticação OAuth do github e será utilizada o id da conta para autorização. O cliente irá manter um token para utilizar em todas as operações. E o banco de dados manterá uma cópia desse token para uso interno e evitar sempre utilizar a api de autenticação

Autenticação

Um elemento presente em todas as paginas que necessitam de autenticação para funcionar verifica se o cliente está autenticado, caso não esteja, ele será redirecionado para a pagina de login.
As paginas não possuem detalhes sobre as imagens, tudo é obtido através da api e do servidor de imagens, que precisam de autenticação.

O token será utilizado em todas as requisições externas, e internamente é sempre utilizado o id da conta.
Por isso a aplicação necessita apenas de duas requisições para o github, uma para obter o token quando o usuário faz login e a outro para obter o id do usuário.

post sobre autenticação

Banco de dados

Será possível adicionar uma descrição a imagem pelo usuário, será guardada a data de upload, quem fez o upload e o nome do arquivo que será seu hash.

Modelo lógico relacional:

image(id_image, hash, uploaded, desc, id_github)
tag(id_tag, tag_name)
tag_image(id_image, it_tag, tag_name)
auth_token(token, id_github)

Servidor de arquivos

Precisa ser um subdomínio da aplicação web para ter acesso ao cookie de autenticação

Utiliza 3 métodos: POST, GET e DELETE. O método POST retorna o hash do arquivo, que é utilizado como nome do arquivo internamente e para o get.
Todos as requisições necessitam to token do cliente.