public static Result <SubjectId> Create(long subjectId, ISubjectExistenceValidator subjectExistenceValidator)
 {
     return(Result.Create(() => subjectId > 0, DomainErrors.BuildInvalidIdentifier(subjectId))
            .AndEnsure(() => subjectExistenceValidator.Exist(subjectId),
                       DomainErrors.BuildNotFound("Subject", subjectId))
            .OnSuccess(() => new SubjectId(subjectId)));
 }
 public static Result <LocationId> Create(long locationId, ILocationExistenceValidator locationExistenceValidator)
 {
     return(Result.Create(locationId > 0, DomainErrors.BuildInvalidIdentifier(locationId))
            .AndEnsure(() => locationExistenceValidator.Exist(locationId),
                       DomainErrors.BuildNotFound("Location", locationId))
            .OnSuccess(() => new LocationId(locationId)));
 }
        public void ShouldReturnExpectedErrorForNotFound()
        {
            var entity        = "Location";
            var identifier    = 7;
            var notFoundError = DomainErrors.BuildNotFound(entity, identifier);

            notFoundError.Message.Should().Be($"{entity} for provided identifier {identifier} does not exist");
        }
        public async Task <Result <ExamDto> > Handle(GetExamQuery request, CancellationToken cancellationToken)
        {
            //TODO: Dapper is not mapping dates as UTC, but as Unspecified
            var exam = await _dbConnection.QuerySingleAsync <ExamDto>(_queryBuilder.SingleExamQuery(),
                                                                      new { id = request.Id });

            return(exam == null
                ? Result.Fail <ExamDto>(DomainErrors.BuildNotFound("Exam", request.Id))
                : Result.Ok(exam));
        }
        public async Task <Result <RegistrationDto> > Handle(GetRegistrationQuery request, CancellationToken cancellationToken)
        {
            var registration =
                await _dbConnection.QuerySingleAsync <RegistrationDto>(BuildQuery(), new { id = request.Id });


            return(registration != null
                ? Result.Ok(registration)
                : Result.Fail <RegistrationDto>(DomainErrors.BuildNotFound("Registration", request.Id)));
        }
        public async Task <Result <OrderDto> > Handle(GetOrderQuery request, CancellationToken cancellationToken)
        {
            var orders = new Dictionary <long, OrderDto>();
            await _dbConnection.QueryAsync <OrderDto, OrderItemDto, OrderDto>(BuildQuery(), (order, item) =>
            {
                if (!orders.ContainsKey(order.Id))
                {
                    order.Items ??= new List <OrderItemDto>();
                    orders.Add(order.Id, order);
                }

                orders[order.Id].Items.Add(item);
                return(order);
            }, new { id = request.Id });

            return(orders.Count() == 1
                ? Result.Ok(orders.Values.Single())
                : Result.Fail <OrderDto>(DomainErrors.BuildNotFound("Order", request.Id)));
        }