Olá, boas-vindas à documentação da T-MEMORY-API, meu projeto final para o curso de desenvolvimento backend da {Reprograma}. Trata-se de uma aplicação que serve para armazenar de forma cronológica as atividades, conquistas e acontecimentos de pessoas trans e travestis dentro de um contexto: seja uma empresa, uma ONG ou qualquer grupo de pessoas que tenha interesse em agrupar essas informações.
Por muito tempo, a única memória cultivada no imaginário coletivo da figura da pessoa trans - em especial, das travestis - é diretamente associada à prostituição e à criminalidade e, ainda que a questão do trabalho sexual precise ser revista despida de moralidades e abordada como um trabalho como qualquer outro, é importante que construa-se história de pessoas trans e travestis exercendo outras atividades, para que sirva como exemplo para a sociedade em geral, mas principalmente para as próximas gerações gênero-dissidentes que precisam de outras referências.
A T-MEMORY é uma iniciativa que acontece com essa finalidade: colocar em evidência que iniciativas e acontecimentos são importantes para a comunidade trans dentro das organizações e grupos de pessoas, para fins de análise, estímulo quanto a novas iniciativas nesse sentido e para que outras consigam se imaginar transitando nesses espaços que demonstram dar importância para a presença e reparação histórica de pessoas trans e travestis.
Na T-MEMORY, dois tipos de conjunto de informações são armazenados: a unidade básica da aplicação, chamada de memória, que carrega informações sobre um acontecimento específico com relevância para a questão de gênero dissidência, e as timelines, que estruturam as memórias a partir de um assunto, organização, empresa, ONG, etc. Assim, é possível ver o desenvolvimento gradual e histórico dos eventos e de que forma é possível usar da lembrança para impulsionar mais iniciativas nesse sentido.
Como exemplo de estrutura de memória, podemos sugerir:
{
"title": "memoria2",
"date": "2021-07-01T17:36:41.544Z",
"description": "essa memória deve aparecer por segundo",
"category": "testes",
"timelineID": "62bf30a95bd3be0daadb34f3"
}
E como exemplo de estrutura de timeline:
[{
"title": "minha nova timeline",
"description": "uma timeline para testes"
}]
A partir das requisições para a API, é possível:
Verbo | Rota | Função |
get | "/memories" | acessar todas as memórias |
get | "/memory/:id" | acessar memória pelo ID |
get | "/memories/timeline/:id" | acessar memórias pela timeline |
get | "/memories/category" | acessar memórias pela categoria |
get | "/public/memories" | acessar todas as memórias públicas (não-arquivadas) |
get | "/public/category" | acessar as memórias públicas (não-arquivadas) por categoria |
get | "/public/timeline/:id" | acessar as memórias públicas (não-arquivadas) por timeline |
get | "/public/categoryandtimeline/:id" | acessar as memórias públicas (não-arquivadas) por categoria e timeline |
get | "/archived/category" | acessar as memórias arquivadas por categoria |
get | "/archived/timeline/:id" | acessar as memórias arquivadas por timeline |
get | "/archived/categoryandtimeline/:id" | acessar as memórias arquivadas por categoria e timeline |
get | "/timelines" | acessar todas as timelines |
get | "/timeline/:id" | acessar timeline por ID |
get | "/people" | acessar todas as pessoas usuárias |
post | "/memory" | cria uma nova memória |
post | "/timeline" | cria uma nova timeline |
post | "/person" | cria uma nova pessoa usuária |
post | "/person/login" | efetua login de uma pessoa usuária |
patch | "/memory/:id" | atualiza memória por ID |
patch | "/archive/:id" | arquiva memória por ID |
patch | "/timeline/:id" | atualiza timeline por ID |
delete | "/memory/:id" | exclui uma memória por ID |
delete | "/timeline/:id" | exclui uma timeline por ID |
delete | "/person/:id" | exclui uma pessoa usuária por ID |
A documentação também pode ser acessada aqui.
Para esta aplicação, utilizei o MongoAtlas DB em conjunto com a dependência mongoose.
Para a manutenção e proteção da segurança das rotas, utilizei o sistema do jsonwebtoken, em conjunto com um encriptador em hash.
Testei as rotas de CRUD com o auxílio do jest, construindo casos para retorno de cada elemento das schemas de timeline e memória, bem como a alteração, exclusão e criação de objetos.