protected override ValidationResult IsValid(object value, ValidationContext validationContext) { DateTime birthDate = (DateTime)value; int age = DateUtil.CalculateAge(birthDate); // your validation logic if (age >= 18) { return(ValidationResult.Success); } else { return(new ValidationResult("You must be at least 18 years old")); } }
public async Task <ActionResult> Attend(Guid id) { Event eventEntity = await UnitOfWork.Events.GetWithRelated(id, e => e.Category, e => e.Attendances); if (eventEntity == null) { throw new RestError(HttpStatusCode.BadRequest, new { Event = "Event doesn't exist." }); } if (!eventEntity.IsActive) { throw new RestError(HttpStatusCode.BadRequest, new { Event = "Event isn't active." }); } if (eventEntity.StartDate < DateTime.Now.AddHours(-1)) { throw new RestError(HttpStatusCode.BadRequest, new { Event = "Too late to join this event." }); } Guid attendanceId = Guid.Parse(HttpContext.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value); User user = await UnitOfWork.Users.Get(attendanceId); //check if user already attended if (eventEntity.Attendances.FirstOrDefault(a => a.AttendeeId == attendanceId) != null) { throw new RestError(HttpStatusCode.BadRequest, new { Event = "You are already attending this event." }); } //check if user is host if (eventEntity.HostId == attendanceId) { throw new RestError(HttpStatusCode.BadRequest, new { Event = "As a host, you don't need the join your event." }); } //check if event has age limit, and user is eligible if (eventEntity.MinAgeLimit.HasValue) { int age = DateUtil.CalculateAge(user.BirthDate); if (age < eventEntity.MinAgeLimit.Value) { throw new RestError(HttpStatusCode.BadRequest, new { Event = $"This event has minimum age limit {eventEntity.MinAgeLimit.Value}, and you are {age} years old." }); } } if (eventEntity.MaxAgeLimit.HasValue) { int age = DateUtil.CalculateAge(user.BirthDate); if (age > eventEntity.MaxAgeLimit.Value) { throw new RestError(HttpStatusCode.BadRequest, new { Event = $"This event has maximum age limit {eventEntity.MaxAgeLimit.Value}, and you are {age} years old." }); } } //check if event has already max number of people if (eventEntity.MaxNumberOfPeople.HasValue) { //check how many attendances for the event if (!(eventEntity.Attendances.Count < eventEntity.MaxNumberOfPeople.Value)) { throw new RestError(HttpStatusCode.BadRequest, new { Event = $"This event has already {eventEntity.MaxNumberOfPeople.Value} people." }); } } Attendance attendance = new Attendance { CreatedAt = DateTime.Now, AttendeeId = attendanceId, EventId = id }; UnitOfWork.Attendances.Add(attendance); await UnitOfWork.CompleteAsync(); return(Ok()); }