ExamManageValidator.cs 5.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Exam.Infrastructure.Extensions;
  2. using Exam.Infrastructure.Validation.Validation;
  3. using FluentValidation;
  4. using Hotline.Exams.ExamManages;
  5. using Hotline.Exams.TestPapers;
  6. using Hotline.Repository.SqlSugar.Exam.Core.Constants;
  7. using Hotline.Repository.SqlSugar.Exam.Interfaces.ExamManages;
  8. using Hotline.Repository.SqlSugar.Exam.Validate;
  9. using Hotline.Share.Enums.Exams;
  10. using ExamErrorMessage = Hotline.Exams.Validate.ExamErrorMessage;
  11. namespace Exam.Application
  12. {
  13. public class ExamManageValidator:BaseValidator<ExamManage>
  14. {
  15. private readonly IExamManageRepository _examManageRepository;
  16. public ExamManageValidator(IExamManageRepository examManageRepository)
  17. {
  18. RuleSet(ValidatorTypeConstants.Create, () =>
  19. {
  20. BaseValidateRule();
  21. ValidateRuleWithAdd();
  22. });
  23. RuleSet(ValidatorTypeConstants.Modify, () =>
  24. {
  25. BaseValidateRule();
  26. ValidateRuleWithModify();
  27. });
  28. RuleSet(ValidatorTypeConstants.Remove, () =>
  29. {
  30. ValidateRuleWithRemove();
  31. });
  32. this._examManageRepository = examManageRepository;
  33. }
  34. protected override void BaseValidateRule()
  35. {
  36. base.BaseValidateRule();
  37. RuleFor(m => m.Name).NotEmpty().WithMessage(x=>string.Format(ExamErrorMessage.IsRequired,x.GetType().GetDescription(nameof(ExamManage.Name))));
  38. RuleFor(m => m.Code).NotEmpty().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.Code))));
  39. RuleFor(m => m.CutoffScore).NotEmpty().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.CutoffScore))));
  40. RuleFor(m => m.ExamType).NotNull().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.ExamType))));
  41. RuleFor(m => m.Method).NotNull().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.Method))));
  42. //RuleFor(m => m.TestPaperId).NotEmpty().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, typeof(ExamTestPaper).GetDescription()));
  43. RuleFor(m => m.Count).NotNull().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.Count))));
  44. RuleFor(m => m.TimeSpan).NotNull().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.TimeSpan))));
  45. RuleFor(m => m.StartTime).NotNull().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.StartTime))));
  46. RuleFor(m => m.EndTime).NotNull().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.EndTime))));
  47. RuleFor(m => m.EndTime).Must((e, v) => e.ExamType == EExamType.Simulate || e.StartTime < v).WithMessage(x => string.Format(ExamErrorMessage.Greater, x.GetType().GetDescription(nameof(ExamManage.EndTime)), x.GetType().GetDescription(nameof(ExamManage.StartTime))));
  48. RuleFor(m => m.TotalScore).NotNull().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.TotalScore))));
  49. RuleFor(m => m.CutoffScore).Must((e, v)=> e.TotalScore > v).WithMessage(x => string.Format(ExamErrorMessage.Greater, x.GetType().GetDescription(nameof(ExamManage.CutoffScore)), x.GetType().GetDescription(nameof(ExamManage.TotalScore))));
  50. }
  51. protected override void ValidateRuleWithAdd()
  52. {
  53. base.ValidateRuleWithAdd();
  54. RuleFor(m => m.CreationTime).NotEmpty().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.CreationTime))));
  55. RuleFor(m => m.Name).Must(v => !_examManageRepository.Queryable().Any(x => x.Name == v)).WithMessage(x => string.Format(ExamErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(ExamManage.Name))));
  56. RuleFor(m => m.Code).Must(v => !_examManageRepository.Queryable().Any(x => x.Code == v)).WithMessage(x => string.Format(ExamErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(ExamManage.Code))));
  57. }
  58. protected override void ValidateRuleWithModify()
  59. {
  60. base.ValidateRuleWithModify();
  61. RuleFor(m => m.LastModificationTime).NotEmpty().WithMessage(x => string.Format(ExamErrorMessage.IsRequired, x.GetType().GetDescription(nameof(ExamManage.LastModificationTime))));
  62. RuleFor(m => m.Name).Must((e,v) => !_examManageRepository.Queryable().Any(x => x.Name == v && x.Id!=e.Id)).WithMessage(x => string.Format(ExamErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(ExamManage.Name))));
  63. RuleFor(m => m.Code).Must((e,v) => !_examManageRepository.Queryable().Any(x => x.Code == v && x.Id != e.Id)).WithMessage(x => string.Format(ExamErrorMessage.IsRepeat, x.GetType().GetDescription(nameof(ExamManage.Code))));
  64. }
  65. private void ValidateRuleWithRemove()
  66. {
  67. RuleFor(x => x.Id).Must(v => !_examManageRepository.Queryable().Where(x => x.Id == v && x.ExamStatus != EExamStatus.NoStart).Any()).WithMessage(Hotline.Repository.SqlSugar.Exam.Core.Constants.ExamErrorMessage.DeleteUnableExam);
  68. }
  69. }
  70. }