public async Task <IHttpActionResult> Developers([FromBody] DeveloperDirectoryBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Invalid Data entry"));
            }

            if (model.Name.IsNullOrWhiteSpace())
            {
                return(BadRequest("Specify Name of the Developer"));
            }

            if (model.CategoryId <= 0)
            {
                return(BadRequest("Specify the Category Id"));
            }



            await _developersRepository.CreateDeveloperEntry(model);

            try
            {
                return(StatusCode(HttpStatusCode.Created));
            }
            catch (Exception e)
            {
                ErrorSignal.FromCurrentContext().Raise(e);
                return(BadRequest($"{e.Message} " + HttpStatusCode.InternalServerError));
            }
        }
        public async Task Developers_CreateDeveloperEntry_ReturnsSuccess()
        {
            DeveloperDirectoryBindingModel model = new DeveloperDirectoryBindingModel
            {
                Name = "Smith Ola", GithubId = "assd", CategoryId = 1
            };

            var result = await _controller.Developers(model) as StatusCodeResult;

            Assert.IsNotNull(result);
            Assert.That(result.StatusCode == HttpStatusCode.Created);
        }
        public async Task Developers_SupplyIncompleteRequest_ReturnsBadRequestForNoCategoryId()
        {
            DeveloperDirectoryBindingModel model = new DeveloperDirectoryBindingModel
            {
                Name = "Smith Ola", GithubId = "assd"
            };

            var result = await _controller.Developers(model) as BadRequestErrorMessageResult;

            Assert.IsNotNull(result);
            Assert.AreEqual("Specify the Category Id", result.Message);
        }
        public async Task Developers_CreateDeveloperEntry_ReturnsBadRequestWithMessage()
        {
            DeveloperDirectoryBindingModel model = new DeveloperDirectoryBindingModel
            {
                EmailAddress = "Smith Ola", GithubId = "assd"
            };

            var result = await _controller.Developers(model) as BadRequestErrorMessageResult;

            Assert.IsNotNull(result);
            Assert.AreEqual("Specify Name of the Developer", result.Message);
        }
        public async Task EditDeveloperEntry(int?id, DeveloperDirectoryBindingModel model)
        {
            var developer = await _context.Developers.FindAsync(id);

            Mapper.Map <DeveloperDirectoryBindingModel, Developer>(model, developer);
            if (developer == null)
            {
                throw new Exception("Developer entry not found");
            }


            await _context.SaveChangesAsync();
        }
        public async Task CreateDeveloperEntry(DeveloperDirectoryBindingModel model)
        {
            var directory = Mapper.Map <Developer>(model);

            var category = await _context.Categories.FindAsync(model.CategoryId);

            if (category == null)
            {
                throw new Exception("Category Doesn't exist");
            }

            _context.Developers.Add(directory);
            await _context.SaveChangesAsync();
        }
        public async Task <IHttpActionResult> UpdateDeveloper(int?id, [FromBody] DeveloperDirectoryBindingModel model)
        {
            if (id == null)
            {
                return(BadRequest("Supply Id Of developer"));
            }

            try
            {
                await _developersRepository.EditDeveloperEntry(id, model);

                return(Ok("Updated Successfully"));
            }
            catch (Exception e)
            {
                return(StatusCode(HttpStatusCode.InternalServerError));
            }
        }