Startup.cs
using Alura.ListaLeitura.App.Negocio;
using Alura.ListaLeitura.App.Repositorio;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace Alura.ListaLeitura.App
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRouting();
}
public void Configure(IApplicationBuilder app)
{
var routeBuilder = new RouteBuilder(app);
routeBuilder.MapRoute("Livros/ParaLer", LivrosParaLer);
routeBuilder.MapRoute("Livros/Lendo", LivrosLendo);
routeBuilder.MapRoute("Livros/Lidos", LivrosLidos);
routeBuilder.MapRoute("Cadastro/NovoLivro/{nome}/{autor}", CadastroNovoLivro);
routeBuilder.MapRoute("livros/detalhes/{id:int}", ExibeDetalhes);
routeBuilder.MapRoute("Cadastro/NovoLivro", ExibeFormulario);
routeBuilder.MapRoute("Cadastro/Incluir", ProcessaFormulario);
var rotas = routeBuilder.Build();
app.UseRouter(rotas);
//app.Run(Roteamento);
}
private Task ProcessaFormulario(HttpContext context)
{
var livro = new Livro()
{
Titulo = context.Request.Form["titulo"].First(),
Autor = context.Request.Form["autor"].First(),
};
var repo = new LivroRepositorioCSV();
repo.Incluir(livro);
return context.Response.WriteAsync("Livro adicionado com sucesso!");
}
private Task ExibeFormulario(HttpContext context)
{
var html = CarregaArquivoHtml("formulario");
return context.Response.WriteAsync(html);
}
private string CarregaArquivoHtml(string nomeArquivo)
{
var nomeCompletoArquivo = $"HTML/{nomeArquivo}.html";
using (var arquivo = File.OpenText(nomeCompletoArquivo))
{
return arquivo.ReadToEnd();
}
}
private Task ExibeDetalhes(HttpContext context)
{
int id = Convert.ToInt32(context.GetRouteValue("id"));
var repo = new LivroRepositorioCSV();
var livro = repo.Todos.First(l => l.Id == id);
return context.Response.WriteAsync(livro.Detalhes());
}
public Task CadastroNovoLivro(HttpContext context)
{
var livro = new Livro()
{
Titulo = Convert.ToString(context.GetRouteValue("nome")),
Autor = Convert.ToString(context.GetRouteValue("autor")),
};
var repo = new LivroRepositorioCSV();
repo.Incluir(livro);
return context.Response.WriteAsync("Livro adicionado com sucesso!");
}
public Task Roteamento(HttpContext context)
{
var _repo = new LivroRepositorioCSV();
var caminhosAtendidos = new Dictionary<string, RequestDelegate>
{
{ "/Livros/ParaLer", LivrosParaLer },
{ "/Livros/Lendo", LivrosLendo },
{ "/Livros/Lidos", LivrosLidos }
};
if (caminhosAtendidos.ContainsKey(context.Request.Path))
{
var metodo = caminhosAtendidos[context.Request.Path];
return metodo.Invoke(context);
}
context.Response.StatusCode = 404;
return context.Response.WriteAsync("Caminho inexistente!");
}
public Task LivrosParaLer(HttpContext context)
{
var _repo = new LivroRepositorioCSV();
var conteudoArquivo = CarregaArquivoHtml("para-ler");
foreach (var livro in _repo.ParaLer.Livros)
{
conteudoArquivo = conteudoArquivo
.Replace("#NOVO-ITEM#", $"<li>{livro.Titulo} - {livro.Autor}</li>#NOVO-ITEM#");
}
conteudoArquivo = conteudoArquivo.Replace("#NOVO-ITEM#", "");
return context.Response.WriteAsync(conteudoArquivo);
//return context.Response.WriteAsync(_repo.ParaLer.ToString());
}
public Task LivrosLendo(HttpContext context)
{
var _repo = new LivroRepositorioCSV();
return context.Response.WriteAsync(_repo.Lendo.ToString());
}
public Task LivrosLidos(HttpContext context)
{
var _repo = new LivroRepositorioCSV();
return context.Response.WriteAsync(_repo.Lidos.ToString());
}
}
}