136 lines
4.1 KiB
C#
136 lines
4.1 KiB
C#
using HopFrame.Testing;
|
|
using Microsoft.FluentUI.AspNetCore.Components;
|
|
using HopFrame.Testing.Components;
|
|
using HopFrame.Testing.Models;
|
|
using HopFrame.Web;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Message = HopFrame.Testing.Models.Message;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
// Add services to the container.
|
|
builder.Services.AddRazorComponents()
|
|
.AddInteractiveServerComponents();
|
|
builder.Services.AddFluentUIComponents();
|
|
|
|
builder.Services.AddDbContext<DatabaseContext>(options => {
|
|
options.UseInMemoryDatabase("testing");
|
|
});
|
|
|
|
builder.Services.AddHopFrame(options => {
|
|
options.DisplayUserInfo(false);
|
|
options.AddDbContext<DatabaseContext>(context => {
|
|
context.Table<User>(table => {
|
|
table.Property(u => u.Password)
|
|
.DisplayValue(false);
|
|
|
|
table.Property(u => u.FirstName)
|
|
.List(false);
|
|
|
|
table.Property(u => u.LastName)
|
|
.List(false);
|
|
|
|
table.Property(u => u.Id)
|
|
.IsSortable(false)
|
|
.SetOrderIndex(3);
|
|
|
|
table.AddVirtualProperty("Name", (user, _) => $"{user.FirstName} {user.LastName}")
|
|
/*.SetVirtualParser((model, input, _) => {
|
|
var split = input.Split(' ');
|
|
model.FirstName = split.FirstOrDefault();
|
|
model.LastName = split.LastOrDefault();
|
|
})*/
|
|
.SetOrderIndex(2);
|
|
|
|
table.SetDisplayName("Benutzer");
|
|
table.SetDescription("This table is used for user data store and user authentication");
|
|
|
|
table.SetViewPolicy("policy");
|
|
|
|
table.Property(u => u.Posts)
|
|
.FormatEach<Post>((post, _) => post.Caption);
|
|
});
|
|
|
|
context.Table<Post>()
|
|
.Property(p => p.Author)
|
|
//.Format((user, _) => $"{user.FirstName} {user.LastName}")
|
|
.SetDisplayedProperty(u => u.Username)
|
|
.SetValidator((_, _) => []);
|
|
|
|
context.Table<Post>()
|
|
.Property(p => p.Id)
|
|
.SetDisplayName("ID");
|
|
|
|
context.Table<Post>()
|
|
.Property(p => p.CreatedAt);
|
|
|
|
context.Table<Post>()
|
|
.Property(p => p.Content)
|
|
.SetDisplayLength(100)
|
|
.IsTextArea(true)
|
|
/*.Validator(input => {
|
|
var errors = new List<string>();
|
|
|
|
if (input is null)
|
|
errors.Add("Value cannot be null");
|
|
|
|
if (input?.Length > 10)
|
|
errors.Add("Value can only be 10 characters long");
|
|
|
|
return errors;
|
|
})*/;
|
|
|
|
/*context.Table<Post>()
|
|
.SetOrderIndex(-1)
|
|
.Ignore(true);*/
|
|
});
|
|
|
|
options.AddCustomView("Counter", "/counter")
|
|
.SetDescription("A custom view")
|
|
.SetPolicy("counter.view");
|
|
|
|
options.AddExporters();
|
|
|
|
options.AddCustomRepository<GuestRepository, Guest, int>(g => g.Id, table => {
|
|
table.SetDisplayName("Guests");
|
|
|
|
table.Property(g => g.Messages)
|
|
.ForceRelation(true)
|
|
.FormatEach<Message>((m, _) => m.Content);
|
|
});
|
|
|
|
options.AddCustomRepository<MessageRepository, Message, int>(m => m.MessageIdentifier, table => {
|
|
table.SetDisplayName("Messages");
|
|
|
|
table.Property(m => m.Receiver)
|
|
.ForceRelation()
|
|
.Format((u, _) => u.Name);
|
|
|
|
table.Property(m => m.Sender)
|
|
.ForceRelation()
|
|
.Format((u, _) => u.Username ?? string.Empty);
|
|
});
|
|
});
|
|
|
|
builder.Services.AddSingleton<MessageRepository>();
|
|
builder.Services.AddSingleton<GuestRepository>();
|
|
|
|
var app = builder.Build();
|
|
|
|
// Configure the HTTP request pipeline.
|
|
if (!app.Environment.IsDevelopment()) {
|
|
app.UseExceptionHandler("/Error", createScopeForErrors: true);
|
|
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
|
app.UseHsts();
|
|
}
|
|
|
|
app.UseHttpsRedirection();
|
|
|
|
app.UseAntiforgery();
|
|
|
|
app.MapStaticAssets();
|
|
app.MapRazorComponents<App>()
|
|
.AddInteractiveServerRenderMode()
|
|
.AddHopFramePages();
|
|
|
|
app.Run(); |