Skip to content

Commit

Permalink
Changes so far for FluentValidation
Browse files Browse the repository at this point in the history
  • Loading branch information
BarryGibney committed Sep 19, 2024
1 parent cc0084f commit d038364
Show file tree
Hide file tree
Showing 13 changed files with 31 additions and 113 deletions.
2 changes: 1 addition & 1 deletion Web/Edubase.Data/Edubase.Data.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
<HintPath>..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="FluentValidation, Version=11.0.0.0, Culture=neutral, PublicKeyToken=7de548da2fbae0f0, processorArchitecture=MSIL">
<HintPath>..\packages\FluentValidation.11.9.2\lib\netstandard2.0\FluentValidation.dll</HintPath>
<HintPath>..\packages\FluentValidation.11.10.0\lib\netstandard2.0\FluentValidation.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Identity.Core.2.2.4\lib\net45\Microsoft.AspNet.Identity.Core.dll</HintPath>
Expand Down
2 changes: 1 addition & 1 deletion Web/Edubase.Data/packages.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.5.1" targetFramework="net48" />
<package id="FluentValidation" version="11.9.2" targetFramework="net48" />
<package id="FluentValidation" version="11.10.0" targetFramework="net48" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.4" targetFramework="net48" />
<package id="Microsoft.AspNet.Identity.Owin" version="2.2.4" targetFramework="net48" />
<package id="Microsoft.Azure.KeyVault.Core" version="3.0.5" targetFramework="net48" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
using Edubase.Web.UI.Helpers;
using Edubase.Web.UI.Models;
using Edubase.Web.UI.Validation;
using FluentValidation.Mvc;
using MoreLinq;
using ET = Edubase.Services.Enums.eLookupEstablishmentType;
using CreateSteps = Edubase.Web.UI.Areas.Establishments.Models.CreateEstablishmentViewModel.eEstabCreateSteps;
Expand Down Expand Up @@ -382,7 +381,7 @@ await Task.WhenAll(
viewModel.SchoolCapacityToolTipLink = viewModel.Establishment.TypeId.Equals((int)ET.AcademySecure16to19)
? string.Empty
: _resourcesHelper.GetResourceStringForEstablishment("SchoolCapacityLink", (eLookupEstablishmentTypeGroup?) viewModel.Establishment.EstablishmentTypeGroupId, User);

return View(viewModel);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
using Edubase.Web.UI.Areas.Establishments.Models.Validators;
using Edubase.Web.UI.Models;
using FluentValidation.Attributes;
using System.Web;
using static Edubase.Services.Establishments.Models.BulkUpdateDto;
using Edubase.Services.Domain;

namespace Edubase.Web.UI.Areas.Establishments.Models
{
[Validator(typeof(BulkUpdateViewModelValidator))]
public class BulkUpdateViewModel
{
public DateTimeViewModel EffectiveDate { get; set; } = new DateTimeViewModel();
Expand All @@ -27,4 +25,4 @@ public BulkUpdateViewModel(bool canOverrideCRProcess)
CanOverrideCRProcess = canOverrideCRProcess;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
using Edubase.Services.Domain;
using Edubase.Web.UI.Areas.Governors.Models.Validators;
using FluentValidation.Attributes;
using System.Web;

namespace Edubase.Web.UI.Areas.Governors.Models
{
[Validator(typeof(GovernorsBulkUpdateViewModelValidator))]
public class GovernorsBulkUpdateViewModel
{
public HttpPostedFileBase BulkFile { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
using Edubase.Services.Security;
using Edubase.Web.UI.Areas.Groups.Models;
using Edubase.Web.UI.Helpers;
using FluentValidation.Mvc;
using Edubase.Web.UI.Validation;

namespace Edubase.Web.UI.Areas.Groups.Controllers
{
Expand Down
1 change: 0 additions & 1 deletion Web/Edubase.Web.UI/Controllers/EduBaseController.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using Autofac;
using Edubase.Services.Domain;
using Edubase.Web.UI.Helpers;
using FluentValidation.Mvc;
using MoreLinq;
using System.Linq;
using System.Web.Mvc;
Expand Down
10 changes: 2 additions & 8 deletions Web/Edubase.Web.UI/Edubase.Web.UI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -84,14 +84,8 @@
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="FluentValidation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7de548da2fbae0f0, processorArchitecture=MSIL">
<HintPath>..\packages\FluentValidation.8.6.2\lib\net45\FluentValidation.dll</HintPath>
</Reference>
<Reference Include="FluentValidation.Mvc, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7de548da2fbae0f0, processorArchitecture=MSIL">
<HintPath>..\packages\FluentValidation.Mvc5.8.6.1\lib\net45\FluentValidation.Mvc.dll</HintPath>
</Reference>
<Reference Include="FluentValidation.ValidatorAttribute, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7de548da2fbae0f0, processorArchitecture=MSIL">
<HintPath>..\packages\FluentValidation.ValidatorAttribute.8.6.1\lib\net45\FluentValidation.ValidatorAttribute.dll</HintPath>
<Reference Include="FluentValidation, Version=11.0.0.0, Culture=neutral, PublicKeyToken=7de548da2fbae0f0, processorArchitecture=MSIL">
<HintPath>..\packages\FluentValidation.11.10.0\lib\netstandard2.0\FluentValidation.dll</HintPath>
</Reference>
<Reference Include="Glimpse.AspNet, Version=1.9.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Glimpse.AspNet.1.9.2\lib\net45\Glimpse.AspNet.dll</HintPath>
Expand Down
6 changes: 0 additions & 6 deletions Web/Edubase.Web.UI/Global.asax.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using Edubase.Common.Cache;
using Edubase.Web.UI.Filters;
using Edubase.Web.UI.Validation;
using FluentValidation.Mvc;
using System;
using System.Configuration;
using System.IO;
Expand Down Expand Up @@ -60,11 +59,6 @@ protected void Application_Start()

IocConfig.AutofacDependencyResolver.ApplicationContainer.Resolve<ICacheAccessor>().InitialiseIfNecessaryAsync().Wait();

var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AutofacValidatorFactory(IocConfig.AutofacDependencyResolver));
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
fluentValidationModelValidatorProvider.AddImplicitRequiredValidator = false;
ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider);

var logger = IocConfig.AutofacDependencyResolver.ApplicationContainer.Resolve<IAzLogger>();
logger.ScheduleLogFlush();
logger.ScheduleLogPurge();
Expand Down
83 changes: 4 additions & 79 deletions Web/Edubase.Web.UI/Validation/AutofacValidationModule.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,4 @@
using Autofac;
using Edubase.Web.UI.Areas.Establishments.Models;
using Edubase.Web.UI.Areas.Establishments.Models.Validators;
using Edubase.Web.UI.Areas.Governors.Models;
using Edubase.Web.UI.Areas.Governors.Models.Validators;
using Edubase.Web.UI.Areas.Groups.Models.CreateEdit;
using Edubase.Web.UI.Areas.Groups.Models.Validators;
using Edubase.Web.UI.Models;
using Edubase.Web.UI.Models.DataQuality;
using Edubase.Web.UI.Models.DataQuality.Validators;
using Edubase.Web.UI.Models.Notifications;
using Edubase.Web.UI.Models.Notifications.Validators;
using Edubase.Web.UI.Models.Validators;
using FluentValidation;

namespace Edubase.Web.UI.Validation
Expand All @@ -19,73 +7,10 @@ public class ValidationModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<EditEstablishmentModelValidator>()
.Keyed<IValidator>(typeof(IValidator<EditEstablishmentModel>))
.As<IValidator>().InstancePerDependency();

builder.RegisterType<GovernorsGridViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<GovernorsGridViewModel>))
.As<IValidator>();

builder.RegisterType<ReplaceChairViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<ReplaceChairViewModel>))
.As<IValidator>();

builder.RegisterType<EditGroupDelegationInformationViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<EditGroupDelegationInformationViewModel>))
.As<IValidator>();

builder.RegisterType<SelectSharedGovernorViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<SelectSharedGovernorViewModel>))
.As<IValidator>();

builder.RegisterType<BulkUpdateViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<BulkUpdateViewModel>))
.As<IValidator>();

builder.RegisterType<BulkCreateFreeSchoolsViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<BulkCreateFreeSchoolsViewModel>))
.As<IValidator>();

builder.RegisterType<BulkAssociateEstabs2GroupsViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<BulkAssociateEstabs2GroupsViewModel>))
.As<IValidator>();

builder.RegisterType<GovernorsBulkUpdateViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<GovernorsBulkUpdateViewModel>))
.As<IValidator>();

builder.RegisterType<CreateEstablishmentViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<CreateEstablishmentViewModel>))
.As<IValidator>();

builder.RegisterType<CreateChildrensCentreViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<CreateChildrensCentreViewModel>))
.As<IValidator>();

builder.RegisterType<EditEstablishmentLinksViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<EditEstablishmentLinksViewModel>))
.As<IValidator>();

builder.RegisterType<ChangeHistoryViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<ChangeHistoryViewModel>))
.As<IValidator>();

builder.RegisterType<DateTimeViewModelValidator>()
.Keyed<IValidator>(typeof(IValidator<DateTimeViewModel>))
.As<IValidator>();

builder.RegisterType<DataQualityStatusItemValidator>()
.Keyed<IValidator>(typeof(IValidator<DataQualityStatusItem>))
.As<IValidator>();

builder.RegisterType<ValidateChildrensCentreStep2Validator>()
.Keyed<IValidator>(typeof(IValidator<ValidateChildrensCentreStep2>))
.As<IValidator>();

builder.RegisterType<NotificationsBannerValidator>()
.Keyed<IValidator>(typeof(IValidator<NotificationsBannerViewModel>))
.As<IValidator>();
builder.RegisterAssemblyTypes(ThisAssembly)
.Where(t => t.IsClosedTypeOf(typeof(IValidator<>)))
.AsImplementedInterfaces()
.InstancePerDependency();
}
}
}
15 changes: 9 additions & 6 deletions Web/Edubase.Web.UI/Validation/EdubaseAbstractValidator.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using FluentValidation.Mvc;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
Expand All @@ -10,15 +9,19 @@

namespace Edubase.Web.UI.Validation
{
public abstract class EdubaseAbstractValidator<T> : AbstractValidator<T>, IValidatorInterceptor
public abstract class EdubaseAbstractValidator<T> : AbstractValidator<T>
{
public ValidationResult AfterMvcValidation(ControllerContext controllerContext, ValidationContext validationContext, ValidationResult result)
public ValidationResult AfterMvcValidation(ControllerContext controllerContext, ValidationContext<T> validationContext, ValidationResult result)
{
result.EduBaseAddToModelState(controllerContext.Controller.ViewData.ModelState, null);
//controllerContext.Controller.ViewBag.FVErrors = result;
return result;
}

public ValidationContext BeforeMvcValidation(ControllerContext controllerContext, ValidationContext validationContext) => validationContext;
public ValidationContext<T> BeforeMvcValidation(ControllerContext controllerContext,
ValidationContext<T> validationContext)
{
return validationContext;
}
}
}
}
10 changes: 10 additions & 0 deletions Web/Edubase.Web.UI/Validation/ValidationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using System.Web.Mvc;
using Edubase.Services.Domain;
using FluentValidation.Results;

namespace Edubase.Web.UI.Validation
{
Expand Down Expand Up @@ -96,5 +97,14 @@ public static void ApplyToModelState(this ApiResponse apiResponse, ControllerCon
}
}
}

public static void AddToModelState(this ValidationResult result, ModelStateDictionary modelState, string prefix)
{
foreach (var error in result.Errors)
{
var key = string.IsNullOrEmpty(prefix) ? error.PropertyName : $"{prefix}.{error.PropertyName}";
modelState.AddModelError(key, error.ErrorMessage);
}
}
}
}
4 changes: 1 addition & 3 deletions Web/Edubase.Web.UI/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@
<package id="Castle.Core" version="5.1.1" targetFramework="net48" />
<package id="CsvHelper" version="33.0.1" targetFramework="net48" />
<package id="EntityFramework" version="6.5.1" targetFramework="net48" />
<package id="FluentValidation" version="8.6.2" targetFramework="net48" />
<package id="FluentValidation.Mvc5" version="8.6.1" targetFramework="net48" />
<package id="FluentValidation.ValidatorAttribute" version="8.6.1" targetFramework="net48" />
<package id="FluentValidation" version="11.10.0" targetFramework="net48" />
<package id="Glimpse" version="1.8.6" targetFramework="net48" />
<package id="Glimpse.AspNet" version="1.9.2" targetFramework="net48" />
<package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net48" />
Expand Down

0 comments on commit d038364

Please sign in to comment.