예제 #1
0
        public async Task <ResponseMeta> UpdateAsync(CourseDto dto)
        {
            using (var context = await _contextFactory)
            {
                if (dto.Id == null)
                {
                    return(ResponseMeta.CreateFailure(ResponseFailureType.IdRequired));
                }

                var existing = await context.Courses.FirstOrDefaultAsync(m => m.Id == dto.Id);

                if (existing == null)
                {
                    return(ResponseMeta.CreateFailure(ResponseFailureType.EntityNotFound));
                }

                var model = dto.ToModel();

                try
                {
                    context.Entry(existing).CurrentValues.SetValues(model);
                    await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    return(ResponseMeta.CreateFailure(ex.ToString()));
                }

                return(ResponseMeta.CreateSuccess());
            }
        }
예제 #2
0
        public async Task <ResponseMeta> AddAsync(CourseDto dto)
        {
            if (dto.Id != null)
            {
                return(ResponseMeta <CourseDto> .CreateFailure(ResponseFailureType.IdRequiredNull));
            }

            using (var context = await _contextFactory)
            {
                var model = dto.ToModel();

                try
                {
                    await context.Courses.AddAsync(model);

                    await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    return(ResponseMeta <CourseDto> .CreateFailure(ex.ToString()));
                }

                return(ResponseMeta.CreateSuccess());
            }
        }
예제 #3
0
        public async Task <ResponseMeta <CourseDto> > GetAsync(long id)
        {
            using (var context = await _contextFactory)
            {
                var model = await context.Courses.FirstOrDefaultAsync(m => m.Id == id);

                if (model == null)
                {
                    return(ResponseMeta <CourseDto> .CreateFailure(ResponseFailureType.EntityNotFound));
                }

                return(ResponseMeta <CourseDto> .CreateSuccess(model.ToDto()));
            }
        }
예제 #4
0
        public async Task GetCourseInfoForCourse_BubblesErrors()
        {
            SetupTextFixture(s =>
            {
                var mock = new Mock <ICourseInfoService>();
                mock.Setup(m => m.GetCourseInfoForCourse(1)).ReturnsAsync(ResponseMeta <CourseInfoDto> .CreateFailure(ResponseFailureType.IdRequired));

                s.AddTransient <ICourseInfoService>(_ => mock.Object);
            });

            var api      = new CourseInfoApi();
            var response = await api.GetCourseInfoForCourse(1);

            Assert.IsFalse(response.Success);
            Assert.AreEqual(ResponseFailureType.IdRequired, response.FailureType);
        }
예제 #5
0
        public async Task AddAsync_BubblesErrors()
        {
            SetupTextFixture(s =>
            {
                var mock = new Mock <ICourseService>();
                mock.Setup(m => m.AddAsync(It.IsAny <CourseDto>())).ReturnsAsync(ResponseMeta.CreateFailure(ResponseFailureType.IdRequired, new[] { "oh no" }));

                s.AddTransient <ICourseService>(_ => mock.Object);
            });

            var api      = new CourseApi();
            var response = await api.AddAsync(new CourseDto());

            Assert.IsFalse(response.Success);
            Assert.AreEqual(ResponseFailureType.IdRequired, response.FailureType);
            Assert.AreEqual("oh no", response.Errors.First());
        }
예제 #6
0
        public async Task <ResponseMeta> DeleteAsync(long id)
        {
            using (var context = await _contextFactory)
            {
                var model = await context.Courses.FirstOrDefaultAsync(m => m.Id == id);

                if (model == null)
                {
                    return(ResponseMeta.CreateFailure(ResponseFailureType.EntityNotFound));
                }

                context.Courses.Remove(model);
                await context.SaveChangesAsync();

                return(ResponseMeta.CreateSuccess());
            }
        }
예제 #7
0
        public async Task <ResponseMeta <List <HoleDto> > > GetHolesForCourse(long courseId)
        {
            using (var context = await _contextFactory)
            {
                var course = await context.Courses
                             .Include(c => c.Holes)
                             .FirstOrDefaultAsync(c => c.Id == courseId);

                if (course == null)
                {
                    return(ResponseMeta <List <HoleDto> > .CreateFailure(ResponseFailureType.EntityNotFound));
                }

                var holes = course.Holes
                            .Select(h => h.ToDto())
                            .ToList();

                return(ResponseMeta <List <HoleDto> > .CreateSuccess(holes));
            }
        }
예제 #8
0
        public static async Task <ResponseMeta> GetResponseAsync(this HttpResponseMessage response)
        {
            if (response.IsSuccessStatusCode)
            {
                return(ResponseMeta.CreateSuccess());
            }
            else if (response.StatusCode == HttpStatusCode.BadRequest)
            {
                dynamic dyn = JObject.Parse(await response.Content.ReadAsStringAsync());

                return(ResponseMeta.CreateFailure
                       (
                           (ResponseFailureType)dyn.FailureType,
                           dyn.Errors.ToObject <string[]>()
                       ));
            }
            else
            {
                throw new Exception($"Fatal error on request, response status: {response.StatusCode}");
            }
        }