Do zero ao deploy, meu primeiro projeto backend pt1

Ola, meu nome e Caio tenho 16 anos e queria compartilhar o meu "primeiro" projeto backend com você.Digo "primeiro" porque ja tenho um pequeno projeto onde uso como material de estudo.É la onde basicamente aplico muitos conceitos aleatorios do mundo .NET que posso usar futuramente.

Sobre o projeto

Quero criar uma API de mangas e animes, onde o consumidor pode filtrar, criar, editar, apagar e alem disso quero implementar um sistema de chatbox com signalR, lembrando que estou aberto a sugestões e críticas. Para começar quero definir alguns endpoints que quero implementar na minha API, estes são:

Endpoints/Rota Corpo Request/Route Cabeçalho Request Response/StatusCode
/api/v1/Mangas GET nenhum string TokenJWT Lista de Mangas 200, 404, 401
/api/v1/Manga/{id} GET string id string TokenJWT Manga pelo id 200, 404, 401
/api/v1/Mangas/Tag?Tag=string GET nenhum string TokenJWT mangas pela tag específica 200, 404, 401
/api/v1/Mangas/Tag GET Tags string TokenJWT Mangas filtrados pelas Tags fornecidas 200, 404, 401
/api/v1/Manga/Page/{id}?pageID=int GET string id string TokenJWT pagina de manga com o png 200, 404, 401
/api/v1/Manga POST MangaViewModel string TokenJWT retorna o id do manga 201, 400, 401, 404
/api/v1/Manga/Page/{id} POST string id, MangaPageViewModel string TokenJWT lista com id das paginas e pngs. 201, 404, 401
/api/v1/Manga/Search?search=string POST nenhum string TokenJWT Mangas que possuem o mesmo nome que a query search 200, 204, 404, 401
/api/v1/Manga/{id} PUT string id, MangaPutViewModel string TokenJWT Manga Modificado 200, 204, 404, 401
/api/v1/Manga/Page/{id} PUT string id, MangaPagePutViewModel string TokenJWT Manga Pages modificado 200, 204, 404, 401
/api/v1/Manga/{id} PATCH string id, MangaPatchViewModel string TokenJWT Atributos modificados do manga 200, 404, 401
/api/v1/Manga/Page/{id}?Page=int PATCH string id, MangaPagePatchViewModel string TokenJWT Pagina modificada 200, 204, 404, 401
/api/v1/Manga/{id} DELETE string id string TokenJWT mensagem de delete 200, 404, 401
/api/v1/Manga/Page/{id} DELETE string id string TokenJWT mensagem de delete 200, 404, 401

São poucos endpoints, porem eles podem ser modificados, e caso eu modifique eles eu escrevo outro texto e publico aqui pra atualizar o estado do projeto.É um projeto bem simples e bobo, mas quero ir crescendo e adicionando tecnologias/novas implementações. Criticas sao muito bem-vindas, queria tambem deixar claro q as rotas de mangas tambem se aplicam as mesmas pra animes. Vou usar Asp Net pra fazer a API link do github do projeto(talvez esteja vazio pq vou criar o projeto agora :D ) link do repositorio.

Alguém com 16 anos e interessado em .NET?! hahahaha

Brincadeiras à parte, parabéns pela iniciativa, eu como entusiasta de mangás (e de .NET!) quero ver a parada funcionando!

PS.: Se for fazer deploy da API, detalha esse processo, pode ser interessante pra muita gente, também (eu, inclusive).

Vai atualizando nóis ae!

pode deixar chefe!

Muito legal que você está começando e aprendendo por projetos. Eu dei uma olhada no seu código e tem algumas coisas a melhorar. Não leve isso como criticismo, todo mundo que está aprendendo tem de começar de algum lugar e você está indo muito bem. Mas acho que posso te ajudar em alguns pontos:

  • As pastas bin e obj foram para o GitHub. Tanta fazer um commit apagando elas e cria um arquivo gitignore para evitar que eles sejam publicados novamente. Com o dotnet basta entrar na pasta do código fonte e rodar dotnet new gitignore.

  • Para o deploy, aproveita que o dotnet possui uma ferramenta nativa para criar containers docker sem ter que escrever nenhum dockerfile. Aprenda como utilizá-la e como publicar uma imagem do seu app no dockerhub para baixar em qualquer servidor.

  • No deploy algumas coisas vão te encontrar. Então relaxe, Cors, redirect e companhia vão aparecer pra te assombrar mas descobrir como resolver só vai te tornar mais forte. Além de te fazer perder alguma sanidade e cabelos no processo. Mas é normal.

  • A estrutura do projeto está um pouco fora do padrão. Pelo que percebi você está criando uma estrutura próxima de DDD. É interessante estudar um pouco o que vai no que. Seus models estão no lugar certo, no domínio. Mas o datacontext e repositórios deveriam estar em uma camada de infraestrutura. Já o código dos controladores podem ser abistraidos na camada de aplicação. Não entendeu nada? Relaxa, tenta organizar de um jeito razoável para você e estuda DDD depois de fazer o projeto funcionar. Primeiro você faz funcionar, depois refatora.

  • Por último, quando finalizar seu projeto backend, tenta criar um front com Blazor para consumir sua API, tenta até integrar com o .Net aspire, é muito simples e muito legal para orquestrar todas as suas aplicações.

Vai fazendo isso aos poucos, tome o tempo necessário. Sim é bastante coisa. Mas acho que isso vai te dar uma ótima experiência e te tornar um grande programador.

Se tiver alguma dúvida pode comentar aqui que vou disponibilizar um tempo para te ajudar se eu puder. É um ótimo começo, continue firme!

Vlw pelo seu comentario, vou aplicar tudo q me disse, ja me falaram isso do github sobre o gitignore e basicamente eu tinha esquecido disso mas vou arrumar ja ja. Sobre a estrutura de pastas eu realmente nunca estudei nada disso, vi somente alguns videos.Vou estudar mais sobre DDD e tentar aplicar isso o quanto antes. Sobre o docker, eu ja comecei o projeto no rider e habilitei o docker, ja tenho ele la na pasta root do projeto so nao sei como funciona pq vou deixar isso pro final ne, mas basicamente eu comento isso no meu outro texto sobre o começo do projeto que esta [aqui](https://www.tabnews.com.br/Xuxinhaaz/meu-primeiro-projeto-backend-uma-api-de-mangas-pt-2). Vou postar mais um texto ainda hj sobre o projeto então caso esteja interessado e so acessar. Mt obg pelo seu comentario foi de grande ajuda pra mim!
Vou estar acompanhando sua série e seu progresso.