Renamed model repo to provider + provider registration check
This commit is contained in:
@@ -78,11 +78,11 @@ public interface IAdminPageGenerator<TModel> {
|
||||
IAdminPageGenerator<TModel> DefaultSort<TProperty>(Expression<Func<TModel, TProperty>> propertyExpression, ListSortDirection direction);
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the repository for the page
|
||||
/// Specifies the repository provider for the page
|
||||
/// </summary>
|
||||
/// <typeparam name="TRepository">The specified repository</typeparam>
|
||||
/// <typeparam name="TRepository">The specified provider</typeparam>
|
||||
/// <returns></returns>
|
||||
IAdminPageGenerator<TModel> ConfigureRepository<TRepository>() where TRepository : ModelRepository<TModel>;
|
||||
IAdminPageGenerator<TModel> ConfigureProvider<TRepository>() where TRepository : ModelProvider<TModel>;
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -91,7 +91,7 @@ internal sealed class AdminPageGenerator<TModel> : IAdminPageGenerator<TModel>,
|
||||
return this;
|
||||
}
|
||||
|
||||
public IAdminPageGenerator<TModel> ConfigureRepository<TRepository>() where TRepository : ModelRepository<TModel> {
|
||||
public IAdminPageGenerator<TModel> ConfigureProvider<TRepository>() where TRepository : ModelProvider<TModel> {
|
||||
Page.RepositoryProvider = typeof(TRepository);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace HopFrame.Web.Admin;
|
||||
|
||||
public abstract class ModelRepository<TModel> : IModelRepository {
|
||||
public abstract class ModelProvider<TModel> : IModelProvider {
|
||||
public abstract Task<IEnumerable<TModel>> ReadAll();
|
||||
public abstract Task<TModel> Create(TModel model);
|
||||
public abstract Task<TModel> Update(TModel model);
|
||||
@@ -25,7 +25,7 @@ public abstract class ModelRepository<TModel> : IModelRepository {
|
||||
}
|
||||
}
|
||||
|
||||
public interface IModelRepository {
|
||||
public interface IModelProvider {
|
||||
Task<IEnumerable<object>> ReadAllO();
|
||||
Task<object> CreateO(object model);
|
||||
Task<object> UpdateO(object model);
|
||||
@@ -24,10 +24,12 @@ public class AdminPage {
|
||||
public bool ShowDeleteButton { get; set; } = true;
|
||||
public bool ShowUpdateButton { get; set; } = true;
|
||||
|
||||
public IModelRepository LoadModelRepository(IServiceProvider provider) {
|
||||
public IModelProvider LoadModelProvider(IServiceProvider provider) {
|
||||
if (RepositoryProvider is null) return null;
|
||||
var repoProvider = provider.GetService(RepositoryProvider);
|
||||
if (repoProvider != null) return repoProvider as IModelProvider;
|
||||
|
||||
var dependencies = AdminContextGenerator.ResolveDependencies(RepositoryProvider, provider);
|
||||
return Activator.CreateInstance(RepositoryProvider, dependencies) as IModelRepository;
|
||||
return Activator.CreateInstance(RepositoryProvider, dependencies) as IModelProvider;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
private Dictionary<AdminPageProperty, FieldIdentifier> _validationIdentifiers;
|
||||
private IDictionary<AdminPageProperty, object> _values;
|
||||
private Dictionary<AdminPageProperty, object[]> _selectorValues;
|
||||
private IModelRepository _repository;
|
||||
private IModelProvider _provider;
|
||||
|
||||
private AdminPage _currentPage;
|
||||
private object _entry;
|
||||
@@ -143,7 +143,7 @@
|
||||
_currentPage = page;
|
||||
_entry = entryToEdit;
|
||||
_isEdit = entryToEdit is not null;
|
||||
_repository = _currentPage.LoadModelRepository(Provider);
|
||||
_provider = _currentPage.LoadModelProvider(Provider);
|
||||
|
||||
_entry ??= Activator.CreateInstance(_currentPage.ModelType);
|
||||
_context = new EditContext(_entry);
|
||||
@@ -246,7 +246,7 @@
|
||||
foreach (var value in _values) {
|
||||
if (value.Key.Unique) {
|
||||
if (value.Value == value.Key.GetValue(_entry)) continue;
|
||||
var data = _repository!.ReadAllO().GetAwaiter().GetResult();
|
||||
var data = _provider!.ReadAllO().GetAwaiter().GetResult();
|
||||
foreach (var entry in data) {
|
||||
var other = value.Key.GetValue(entry);
|
||||
if (!other.Equals(value.Value)) continue;
|
||||
@@ -293,7 +293,7 @@
|
||||
throw new ArgumentException($"'{property.Name}' cannot be a selector because a admin page for '{type.Name}' does not exist!");
|
||||
}
|
||||
|
||||
var repo = page.LoadModelRepository(Provider);
|
||||
var repo = page.LoadModelProvider(Provider);
|
||||
var objects = (await repo!.ReadAllO()).ToArray();
|
||||
_selectorValues[property] = objects;
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
}
|
||||
|
||||
if (!_isEdit) {
|
||||
await _repository.CreateO(_entry);
|
||||
await _provider.CreateO(_entry);
|
||||
|
||||
Alerts.FireAsync(new SweetAlertOptions {
|
||||
Title = "New entry added!",
|
||||
@@ -356,7 +356,7 @@
|
||||
});
|
||||
}
|
||||
else {
|
||||
await _repository.UpdateO(_entry);
|
||||
await _provider.UpdateO(_entry);
|
||||
|
||||
Alerts.FireAsync(new SweetAlertOptions {
|
||||
Title = "Entry updated!",
|
||||
|
||||
@@ -5,7 +5,7 @@ using HopFrame.Web.Admin;
|
||||
using HopFrame.Web.Admin.Attributes;
|
||||
using HopFrame.Web.Admin.Generators;
|
||||
using HopFrame.Web.Admin.Models;
|
||||
using HopFrame.Web.Repositories;
|
||||
using HopFrame.Web.Provider;
|
||||
|
||||
namespace HopFrame.Web;
|
||||
|
||||
@@ -20,7 +20,7 @@ internal class HopAdminContext : AdminPagesContext {
|
||||
public override void OnModelCreating(IAdminContextGenerator generator) {
|
||||
generator.Page<User>()
|
||||
.Description("On this page you can manage all user accounts.")
|
||||
.ConfigureRepository<UserProvider>()
|
||||
.ConfigureProvider<UserProvider>()
|
||||
.ViewPermission(AdminPermissions.ViewUsers)
|
||||
.CreatePermission(AdminPermissions.AddUser)
|
||||
.UpdatePermission(AdminPermissions.EditUser)
|
||||
@@ -63,7 +63,7 @@ internal class HopAdminContext : AdminPagesContext {
|
||||
|
||||
generator.Page<PermissionGroup>()
|
||||
.Description("On this page you can view, create, edit and delete permission groups.")
|
||||
.ConfigureRepository<GroupProvider>()
|
||||
.ConfigureProvider<GroupProvider>()
|
||||
.ViewPermission(AdminPermissions.ViewGroups)
|
||||
.CreatePermission(AdminPermissions.AddGroup)
|
||||
.UpdatePermission(AdminPermissions.EditGroup)
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
public string Url { get; set; }
|
||||
|
||||
private AdminPage _pageData;
|
||||
private IModelRepository _modelRepository;
|
||||
private IModelProvider _modelProvider;
|
||||
private IEnumerable<object> _modelBuffer;
|
||||
private AdminPageModal _modal;
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
|
||||
if (_pageData.RepositoryProvider is null)
|
||||
throw new ArgumentException($"AdminPage '{_pageData.Title}' does not specify a model repository!'");
|
||||
_modelRepository = _pageData.LoadModelRepository(Provider);
|
||||
_modelProvider = _pageData.LoadModelProvider(Provider);
|
||||
|
||||
_hasEditPermission = _pageData.Permissions.Update is null || await Permissions.HasPermission(Auth.User, _pageData.Permissions.Update);
|
||||
_hasDeletePermission = _pageData.Permissions.Delete is null || await Permissions.HasPermission(Auth.User, _pageData.Permissions.Delete);
|
||||
@@ -154,7 +154,7 @@
|
||||
}
|
||||
|
||||
private async Task Reload() {
|
||||
_modelBuffer = await _modelRepository.ReadAllO();
|
||||
_modelBuffer = await _modelProvider.ReadAllO();
|
||||
_displayedModels = _modelBuffer.ToList();
|
||||
|
||||
_currentSortDirection = _pageData.DefaultSortDirection;
|
||||
@@ -238,7 +238,7 @@
|
||||
});
|
||||
|
||||
if (result.IsConfirmed) {
|
||||
await _modelRepository.DeleteO(entry);
|
||||
await _modelProvider.DeleteO(entry);
|
||||
await Reload();
|
||||
|
||||
await Alerts.FireAsync(new SweetAlertOptions {
|
||||
|
||||
@@ -2,9 +2,9 @@ using HopFrame.Database.Models;
|
||||
using HopFrame.Database.Repositories;
|
||||
using HopFrame.Web.Admin;
|
||||
|
||||
namespace HopFrame.Web.Repositories;
|
||||
namespace HopFrame.Web.Provider;
|
||||
|
||||
internal sealed class GroupProvider(IGroupRepository repo) : ModelRepository<PermissionGroup> {
|
||||
internal sealed class GroupProvider(IGroupRepository repo) : ModelProvider<PermissionGroup> {
|
||||
public override async Task<IEnumerable<PermissionGroup>> ReadAll() {
|
||||
return await repo.GetPermissionGroups();
|
||||
}
|
||||
@@ -2,9 +2,9 @@ using HopFrame.Database.Models;
|
||||
using HopFrame.Database.Repositories;
|
||||
using HopFrame.Web.Admin;
|
||||
|
||||
namespace HopFrame.Web.Repositories;
|
||||
namespace HopFrame.Web.Provider;
|
||||
|
||||
internal sealed class UserProvider(IUserRepository repo) : ModelRepository<User> {
|
||||
internal sealed class UserProvider(IUserRepository repo) : ModelProvider<User> {
|
||||
public override async Task<IEnumerable<User>> ReadAll() {
|
||||
return await repo.GetUsers();
|
||||
}
|
||||
@@ -28,11 +28,11 @@ public class AdminContext : AdminPagesContext {
|
||||
.Parser<Employee>((model, e) => model.AddressId = e.EmployeeId);
|
||||
|
||||
generator.Page<Employee>()
|
||||
.ConfigureRepository<EmployeeProvider>()
|
||||
.ConfigureProvider<EmployeeProvider>()
|
||||
.ListingProperty(e => e.Name);
|
||||
|
||||
generator.Page<Address>()
|
||||
.ConfigureRepository<AddressProvider>()
|
||||
.ConfigureProvider<AddressProvider>()
|
||||
.ListingProperty(a => a.City);
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using RestApiTest.Models;
|
||||
|
||||
namespace FrontendTest.Providers;
|
||||
|
||||
public class AddressProvider(DatabaseContext context) : ModelRepository<Address> {
|
||||
public class AddressProvider(DatabaseContext context) : ModelProvider<Address> {
|
||||
|
||||
public override async Task<IEnumerable<Address>> ReadAll() {
|
||||
return await context.Addresses.ToArrayAsync();
|
||||
|
||||
@@ -4,7 +4,7 @@ using RestApiTest.Models;
|
||||
|
||||
namespace FrontendTest.Providers;
|
||||
|
||||
public class EmployeeProvider(DatabaseContext context) : ModelRepository<Employee> {
|
||||
public class EmployeeProvider(DatabaseContext context) : ModelProvider<Employee> {
|
||||
|
||||
public override async Task<IEnumerable<Employee>> ReadAll() {
|
||||
return await context.Employees
|
||||
|
||||
Reference in New Issue
Block a user