123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using System.Linq;
- using System.Web;
- using GenHTTP.Api.Content;
- using GenHTTP.Api.Content.Templating;
- using GenHTTP.Api.Protocol;
- using GenHTTP.Modules.IO;
- using GenHTTP.Modules.Razor;
- using Benchmarks.Model;
- namespace Benchmarks.Tests
- {
- #region Factory
- public class FortuneHandlerBuilder : IHandlerBuilder
- {
- public IHandler Build(IHandler parent)
- {
- return new FortuneHandler(parent);
- }
- }
- #endregion
- #region Supporting data structures
- public sealed class FortuneModel : PageModel
- {
- public List<Fortune> Cookies { get; }
- public FortuneModel(IRequest request, IHandler handler, List<Fortune> cookies) : base(request, handler)
- {
- Cookies = cookies;
- }
- }
- #endregion
- public class FortuneHandler : IHandler, IPageRenderer
- {
- #region Get-/Setters
- public IHandler Parent { get; }
- private IHandler Page { get; }
- private IRenderer<TemplateModel> Template { get; }
- #endregion
- #region Initialization
- public FortuneHandler(IHandler parent)
- {
- Parent = parent;
- Page = ModRazor.Page(Resource.FromAssembly("Fortunes.html"), (r, h) => GetFortunes(r, h))
- .Title("Fortunes")
- .AddAssemblyReference<HttpUtility>()
- .AddUsing("System.Web")
- .Build(this);
- Template = ModRazor.Template<TemplateModel>(Resource.FromAssembly("Template.html")).Build();
- }
- #endregion
- #region Functionality
- public ValueTask<IResponse> HandleAsync(IRequest request) => Page.HandleAsync(request);
- public IEnumerable<ContentElement> GetContent(IRequest request) => Enumerable.Empty<ContentElement>();
- public async ValueTask<IResponseBuilder> RenderAsync(TemplateModel model)
- {
- return model.Request.Respond()
- .Content(await Template.RenderAsync(model))
- .Header("Content-Type", "text/html; charset=utf-8");
- }
- private FortuneModel GetFortunes(IRequest request, IHandler handler)
- {
- using var context = DatabaseContext.CreateNoTracking();
- var fortunes = context.Fortune.ToList();
- fortunes.Add(new Fortune() { Message = "Additional fortune added at request time." });
- fortunes.Sort();
- return new FortuneModel(request, handler, fortunes);
- }
- #endregion
- }
- }
|