Esempio n. 1
0
        public async Task <IActionResult> Delete([FromRoute] int id)
        {
            var user = await GetUser();

            var todo = await _todoService.GetById(id);

            if (todo == null)
            {
                return(BadRequest("Invalid id"));
            }

            if (user.Id != todo.User.Id)
            {
                return(Forbid());
            }

            todo = await _todoService.Delete(id);

            var response = new TodoResponse()
            {
                Title       = todo.Title,
                Description = todo.Description,
                IsComplete  = todo.IsComplete,
                LastUpdate  = todo.LastUpdate
            };

            return(Ok(response));
        }
Esempio n. 2
0
        public static void WriteToConsole(this TodoResponse todoResponse)
        {
            if (!todoResponse.IsSuccess)
            {
                Console.WriteLine("Error: " + todoResponse.ErrorMessage);
            }

            if (todoResponse.Operation == EnumOperation.List || todoResponse.Operation == EnumOperation.ListCompleted)
            {
                if (todoResponse.TaskList != null && todoResponse.TaskList.Any())
                {
                    var table = new ConsoleTable("NAME", "COMPLETED");
                    todoResponse.TaskList.ForEach(item =>
                    {
                        table.AddRow(item.Title, GetCompleteChar(item.IsCompleted));
                    });
                    table.Write(Format.Minimal);
                }
                else
                {
                    string listMode = todoResponse.Operation == EnumOperation.ListCompleted ? " completed " : " ";
                    Console.WriteLine($"No{listMode}tasks exist");
                }
            }
        }
Esempio n. 3
0
        /* //Comment/Uncomment this block to enable in memory cache for 10 seconds
         * [CacheOutput(ClientTimeSpan = 10, ServerTimeSpan = 10)]
         */
        /// <summary>
        /// GET Api method to return all the todo items from database
        /// </summary>
        /// <returns>TodoResponse objct</returns>
        /// GET: api/ToDo
        public TodoResponse GetToDoes()
        {
            TodoResponse   todoResponse   = new TodoResponse();
            ResponseHeader responseHeader = new ResponseHeader();
            ResponseBody   responseBody   = new ResponseBody();
            List <ToDo>    lstTodo        = new List <ToDo>();
            List <Error>   errorlist      = new List <Error>();
            HttpStatusCode statusCode     = HttpStatusCode.OK;
            string         statusMessage  = AppConstants.Success;

            try
            {
                lstTodo = _repository.getAllTodo();
            }
            catch (Exception ex)
            {
                statusCode    = HttpStatusCode.NotModified;
                statusMessage = AppConstants.Error;
                string strErrorMsg = AppConstants.Error_Message + ex.Message;
                errorlist.Add(new Error(strErrorMsg, AppConstants.SYSTEM_EXEPTION));
                Logger.WriteLog(strErrorMsg + AppConstants.Stack_Trace + ex.StackTrace);
            }

            responseHeader.statusMessage = statusMessage;
            responseHeader.statusCode    = statusCode;
            responseHeader.error         = errorlist;
            responseBody.todo            = lstTodo;
            todoResponse.responseHeader  = responseHeader;
            todoResponse.responseBody    = responseBody;
            return(todoResponse);
        }
        /// <summary>
        /// Gets a collection of Todos.
        /// </summary>
        /// <param name="request">The Todo Request message</param>
        /// <param name="context">The context for the RPC call</param>
        /// <returns>A Todo Response containing a collection of available Todos</returns>
        public override Task <TodoResponse> GetTodos(TodoRequest request, ServerCallContext context)
        {
            var response = new TodoResponse();

            response.Todos.AddRange(_todos.Where(t => t.UserId == request.UserId));

            return(Task.FromResult(response));
        }
        public void Test_DeleteToDo()
        {
            MockTodoRepository mockToDoObj     = new MockTodoRepository();
            ToDoController     tc              = new ToDoController(mockToDoObj);
            TodoResponse       apiToDoResponse = tc.DeleteToDo(2);

            Assert.AreEqual(AppConstants.Success, apiToDoResponse.responseHeader.statusMessage);
            Assert.AreEqual(HttpStatusCode.OK, apiToDoResponse.responseHeader.statusCode);
        }
        public void Test_GetToDo_By_Id_Throws_eception()
        {
            Mock <ITodoRepository> mockRepository = new Mock <ITodoRepository>();

            mockRepository.Setup(mr => mr.getTodoById(It.IsAny <int>())).Throws(new Exception());

            ToDoController tc       = new ToDoController(mockRepository.Object);
            TodoResponse   response = tc.GetToDo(2);

            Assert.AreEqual(response.responseHeader.error[0].errorCode, AppConstants.SYSTEM_EXEPTION);
            Assert.IsTrue(response.responseHeader.error[0].errorMessage.Contains("System.Exception"));
        }
Esempio n. 7
0
        public TodoResponse GetToDo(int id)
        {
            TodoResponse   todoResponse   = new TodoResponse();
            ResponseHeader responseHeader = new ResponseHeader();
            ResponseBody   responseBody   = new ResponseBody();
            List <Error>   errorlist      = new List <Error>();
            string         statusMessage  = string.Empty;
            HttpStatusCode statusCode;

            try
            {
                ToDo toDo = _repository.getTodoById(id);
                if (toDo == null)
                {
                    statusMessage = AppConstants.Error;
                    statusCode    = HttpStatusCode.NotFound;
                    // multiple values can go into the error message depending on different conditions
                    errorlist.Add(new Error(string.Format(AppConstants.TODO_NOT_FOUND_MSG, id), AppConstants.TODO_NOT_FOUND));
                }
                else
                {
                    statusMessage = AppConstants.Success;
                    statusCode    = HttpStatusCode.OK;
                    List <ToDo> lstToDo = new List <ToDo>();
                    lstToDo.Add(toDo);
                    responseBody.todo = lstToDo;
                }
            }
            catch (Exception Ex)
            {
                statusCode    = HttpStatusCode.NotModified;
                statusMessage = AppConstants.Error;
                string strErrorMsg = AppConstants.Error_Message + Ex.Message;
                Logger.WriteLog(strErrorMsg + AppConstants.Stack_Trace + Ex.StackTrace);
                errorlist.Add(new Error(strErrorMsg, AppConstants.SYSTEM_EXEPTION));
            }
            //Write to log file if error is present
            if (errorlist.Count > 0)
            {
                //logging error messaages
                errorlist.ForEach(error => Logger.WriteLog(AppConstants.Error + "in GetToDo() for ID : " + id + AppConstants.Error_Code + error.errorCode + AppConstants.Error_Message + error.errorMessage));
                //foreach (var error in errorlist)
                //{
                //    Logger.WriteLog(AppConstants.Error + "in GetToDo() for ID : " + id + AppConstants.Error_Code + error.errorCode + AppConstants.Error_Message + error.errorMessage);
                //}
            }
            responseHeader.statusCode    = statusCode;
            responseHeader.statusMessage = statusMessage;
            responseHeader.error         = errorlist;
            todoResponse.responseHeader  = responseHeader;
            todoResponse.responseBody    = responseBody;
            return(todoResponse);
        }
        public void Test_UpdateToDo_Add()
        {
            MockTodoRepository mockToDoObj = new MockTodoRepository();
            ToDoController     tc          = new ToDoController(mockToDoObj);
            ToDo toDoITem = new ToDo {
                SlNo = 0, Item = "Insert Test", Description = "Test the Post api"
            };
            TodoResponse apiToDoResponse = tc.AddNewToDo(toDoITem);

            Assert.AreEqual(AppConstants.Success, apiToDoResponse.responseHeader.statusMessage);
            Assert.AreEqual(HttpStatusCode.OK, apiToDoResponse.responseHeader.statusCode);
        }
        public void Test_PutToDo_Edit()
        {
            MockTodoRepository mockToDoObj = new MockTodoRepository();
            ToDoController     tc          = new ToDoController(mockToDoObj);
            ToDo toDoITem = new ToDo {
                SlNo = 0, Item = "Edit Test", Description = "Test the Put api"
            };
            TodoResponse apiToDoResponse = tc.PutToDo(0, toDoITem);

            // If edit took place, header will have success message
            Assert.AreEqual(AppConstants.Success, apiToDoResponse.responseHeader.statusMessage);
            Assert.AreEqual(HttpStatusCode.OK, apiToDoResponse.responseHeader.statusCode);
        }
        public void Test_PutToDo_Internal_Server_Error()
        {
            Mock <ITodoRepository> mockRepository = new Mock <ITodoRepository>();

            mockRepository.Setup(mr => mr.save(It.IsAny <ToDo>())).Returns(0);
            ToDoController tc = new ToDoController(mockRepository.Object);

            ToDo toDoITem = new ToDo {
                SlNo = 2, Item = "Item", Description = "Desc"
            };
            TodoResponse apiToDoResponse = tc.PutToDo(2, toDoITem);

            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorCode, AppConstants.SAVE_FAILED);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorMessage, AppConstants.SAVE_FAILED_MSG);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusMessage, AppConstants.Error);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusCode, HttpStatusCode.InternalServerError);
        }
        public void Test_UpdateToDo_Id_Empty_Input()
        {
            Mock <ITodoRepository> mockRepository = new Mock <ITodoRepository>();
            ToDoController         tc             = new ToDoController(mockRepository.Object);

            ToDo toDoITem = new ToDo {
                SlNo = 2, Item = "", Description = ""
            };
            TodoResponse apiToDoResponse = tc.AddNewToDo(toDoITem);

            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorCode, AppConstants.ITEM_EMPTY);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorMessage, AppConstants.ITEM_EMPTY_MSG);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[1].errorCode, AppConstants.DESCRIPTION_EMPTY);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[1].errorMessage, AppConstants.DESCRIPTION_EMPTY_MSG);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusMessage, AppConstants.Error);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusCode, HttpStatusCode.BadRequest);
        }
        public void Test_GetToDoes_All()
        {
            MockTodoRepository mockToDoObj     = new MockTodoRepository();
            ToDoController     tc              = new ToDoController(mockToDoObj); // injecting mock repo into controller
            TodoResponse       apiToDoResponse = tc.GetToDoes();
            List <ToDo>        ltsToDo         = mockToDoObj.getAllTodo().ToList();
            int iCountApi  = apiToDoResponse.responseBody.todo.Count;
            int iCountMock = ltsToDo.Count;

            Assert.AreEqual(iCountApi, iCountMock);
            for (int i = 0; i < iCountApi; i++)
            {
                Assert.AreEqual(apiToDoResponse.responseBody.todo[i].Item, ltsToDo[i].Item);
                Assert.AreEqual(apiToDoResponse.responseBody.todo[i].Description, ltsToDo[i].Description);
                Assert.AreEqual(apiToDoResponse.responseBody.todo[i].SlNo, ltsToDo[i].SlNo);
            }
        }
        public void Test_PutToDo_Id_Different()
        {
            Mock <ITodoRepository> mockRepository = new Mock <ITodoRepository>();

            mockRepository.Setup(mr => mr.save(It.IsAny <ToDo>())).Returns(1);

            ToDoController tc = new ToDoController(mockRepository.Object);

            ToDo toDoITem = new ToDo {
                SlNo = 2, Item = "Edit Test", Description = "Test the Put api"
            };
            TodoResponse apiToDoResponse = tc.PutToDo(0, toDoITem);

            // If edit took place, header will have success message

            Assert.AreEqual(apiToDoResponse.responseHeader.statusMessage, AppConstants.Error);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusCode, HttpStatusCode.BadRequest);
        }
        public void Test_PutToDo_Id_Empty_Input()
        {
            Mock <ITodoRepository> mockRepository = new Mock <ITodoRepository>();

            mockRepository.Setup(mr => mr.save(It.IsAny <ToDo>())).Returns(1);
            ToDoController tc = new ToDoController(mockRepository.Object);

            ToDo toDoITem = new ToDo {
                SlNo = 2, Item = "", Description = ""
            };
            TodoResponse apiToDoResponse = tc.PutToDo(2, toDoITem);

            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorCode, AppConstants.ITEM_EMPTY);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorMessage, AppConstants.ITEM_EMPTY_MSG);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[1].errorCode, AppConstants.DESCRIPTION_EMPTY);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[1].errorMessage, AppConstants.DESCRIPTION_EMPTY_MSG);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusMessage, AppConstants.Error);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusCode, HttpStatusCode.BadRequest);
        }
Esempio n. 15
0
        public async Task <ActionResult> Get([FromBody] TodoResponse todo)
        {
            try
            {
                string serializedTodo = JsonConvert.SerializeObject(todo);
                using (var producer = new ProducerBuilder <Null, string>(_config).Build())
                {
                    await producer.ProduceAsync("temp-topic-two", new Message <Null, string> {
                        Value = serializedTodo
                    });

                    producer.Flush(TimeSpan.FromSeconds(10));
                    return(Ok(true));
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Esempio n. 16
0
        static async Task Main(string[] args)
        {
            var todoApi = RestService.For <ITodoApi>("https://localhost:44311/");

            Console.WriteLine("Creating Todo Item...");
            var createTodoResponse = await todoApi.CreateAsync(new CreateTodoRequest
            {
                Name        = "Todo Item Created from SDK",
                IsCompleted = false
            });

            TodoResponse todoResponse = createTodoResponse.Content;

            Console.WriteLine($"Name:{todoResponse.Name} ({todoResponse.Id})");
            Console.WriteLine($"Completed: {todoResponse.IsCompleted}");

            var todoItemId = todoResponse.Id;

            Console.WriteLine("\nUpdating Todo Item...");
            var updateTodoResponse = await todoApi.UpdateAsync(todoItemId, new UpdateTodoRequest
            {
                IsCompleted = true
            });

            todoResponse = updateTodoResponse.Content;

            Console.WriteLine($"Name:{todoResponse.Name} ({todoResponse.Id})");
            Console.WriteLine($"Completed: {todoResponse.IsCompleted}");

            Console.WriteLine("\nDeleting Todo Item...");
            var deleteTodoResponse = await todoApi.DeleteAsync(todoItemId);

            Console.WriteLine("\nGetting All Todo Items...");
            var getAllTodoResponse = await todoApi.GetAllAsync();

            var todoItems = getAllTodoResponse.Content;

            Console.WriteLine($"Todo Items Remaining: {todoItems.Count}");

            Console.ReadKey();
        }
        public void Test_UpdateToDo_Internal_Server_Error()
        {
            Mock <ITodoRepository> mockRepository = new Mock <ITodoRepository>();

            mockRepository.Setup(mr => mr.insert(It.IsAny <ToDo>())).Returns(0);
            ToDoController tc = new ToDoController(mockRepository.Object);

            MockTodoRepository mockObj    = new MockTodoRepository();
            List <ToDo>        getAllTodo = mockObj.getAllTodo();

            mockRepository.Setup(mr => mr.getAllTodo()).Returns(getAllTodo);

            ToDo toDoITem = new ToDo {
                SlNo = 2, Item = "Item", Description = "Desc"
            };
            TodoResponse apiToDoResponse = tc.AddNewToDo(toDoITem);

            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorCode, AppConstants.INSERT_FAILED);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorMessage, AppConstants.INSERT_FAILED_MSG);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusMessage, AppConstants.Error);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusCode, HttpStatusCode.InternalServerError);
        }
        public void Test_UpdateToDo_Item_Already_Exist()
        {
            Mock <ITodoRepository> mockRepository = new Mock <ITodoRepository>();

            mockRepository.Setup(mr => mr.save(It.IsAny <ToDo>())).Returns(1);

            MockTodoRepository mockObj    = new MockTodoRepository();
            List <ToDo>        getAllTodo = mockObj.getAllTodo();

            mockRepository.Setup(mr => mr.getAllTodo()).Returns(getAllTodo);

            ToDoController tc       = new ToDoController(mockRepository.Object);
            ToDo           toDoITem = new ToDo {
                SlNo = 1, Item = "Item1", Description = "Desc Item1"
            };
            TodoResponse apiToDoResponse = tc.AddNewToDo(toDoITem);

            Assert.AreEqual(apiToDoResponse.responseHeader.statusMessage, AppConstants.Error);
            Assert.AreEqual(apiToDoResponse.responseHeader.statusCode, HttpStatusCode.Conflict);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorCode, AppConstants.TODO_ALREADY_EXIST);
            Assert.AreEqual(apiToDoResponse.responseHeader.error[0].errorMessage, AppConstants.TODO_ALREADY_EXIST_MSG);
        }
Esempio n. 19
0
        public TodoResponse PutToDo(int id, ToDo toDo)
        {
            TodoResponse   todoResponse   = new TodoResponse();
            ResponseHeader responseHeader = new ResponseHeader();
            ResponseBody   responseBody   = new ResponseBody();
            List <Error>   errorlist      = new List <Error>();
            HttpStatusCode statusCode;
            string         statusMessage = string.Empty;

            errorlist = ValidateUtility.ValidateInput(toDo);

            try
            {
                if (!ModelState.IsValid)
                {
                    statusCode    = HttpStatusCode.BadRequest;
                    statusMessage = AppConstants.Error;
                    errorlist.Add(new Error(AppConstants.MODAL_STATE_INVALID, AppConstants.BAD_REQUEST));
                }

                //Check if any of the input parameters are empty
                else if (errorlist.Count > 0)
                {
                    statusCode    = HttpStatusCode.BadRequest;
                    statusMessage = AppConstants.Error;
                    //add mulitple error if needed to errorlist
                    errorlist.ForEach(e => Logger.WriteLog(e.errorMessage));
                }

                // check if the ids in the request match
                else if (id != toDo.SlNo)
                {
                    statusCode    = HttpStatusCode.BadRequest;
                    statusMessage = AppConstants.Error;
                    //add mulitple error if needed to errorlist
                    errorlist.Add(new Error(AppConstants.TODO_ID_MISMATCH_MSG, AppConstants.TODO_ID_MISMATCH));
                }

                // Perform the Edit operation
                else
                {
                    // Database update
                    int result = _repository.save(toDo);
                    // return value and check the status and handle error
                    if (result > 0)
                    {
                        statusCode    = HttpStatusCode.OK;
                        statusMessage = AppConstants.Success;
                    }
                    else
                    {
                        statusCode    = HttpStatusCode.InternalServerError;
                        statusMessage = AppConstants.Error;
                        errorlist.Add(new Error(AppConstants.SAVE_FAILED_MSG, AppConstants.SAVE_FAILED));
                    }
                }
            }
            catch (DbUpdateConcurrencyException dbEx)
            {
                // If the Id for Deletion is not present in the database
                if (!ToDoIdExists(id))
                {
                    statusCode    = HttpStatusCode.NotFound;
                    statusMessage = AppConstants.Error;
                    string strErrorMsg = AppConstants.Error_Message + dbEx.Message;
                    errorlist.Add(new Error(strErrorMsg, AppConstants.TODO_NOT_FOUND));

                    Logger.WriteLog(AppConstants.Error_Message + strErrorMsg +
                                    AppConstants.Inner_Exception + dbEx.InnerException +
                                    AppConstants.Stack_Trace + dbEx.StackTrace + AppConstants.Soure + dbEx.Source);
                }
                else
                {
                    // This will be caught and handled in the ToDoCustomException handler
                    throw;
                }
            }

            //Write to log file if error is present
            if (errorlist.Count > 0)
            {
                errorlist.ForEach(error => Logger.WriteLog(AppConstants.Error + " in PutToDo() for ID : " + id + AppConstants.Error_Code
                                                           + error.errorCode + AppConstants.Error_Message + error.errorMessage));
            }
            responseHeader.statusCode    = statusCode;
            responseHeader.statusMessage = statusMessage;
            responseHeader.error         = errorlist;
            todoResponse.responseHeader  = responseHeader;
            responseBody.todo            = _repository.getAllTodo();
            todoResponse.responseBody    = responseBody;
            return(todoResponse);
        }
Esempio n. 20
0
        public TodoResponse DeleteToDo(int id)
        {
            TodoResponse   todoResponse   = new TodoResponse();
            ResponseHeader responseHeader = new ResponseHeader();
            ResponseBody   responseBody   = new ResponseBody();
            string         statusMessage  = string.Empty;
            HttpStatusCode statusCode;
            List <Error>   errorlist = new List <Error>();

            try
            {
                ToDo toDo = _repository.getTodoById(id);

                //If the item to delete is not present in database
                if (null == toDo)
                {
                    statusCode    = HttpStatusCode.NotFound;
                    statusMessage = AppConstants.Error;
                    Error error = new Error(string.Format(AppConstants.TODO_NOT_FOUND_MSG, id), AppConstants.TODO_NOT_FOUND);
                    errorlist.Add(error);
                }
                else
                {
                    // return value and check the status and handle error
                    // Database delete takes place here
                    if (_repository.remove(toDo) > 0)
                    {
                        statusCode    = HttpStatusCode.OK;
                        statusMessage = AppConstants.Success;
                    }
                    else
                    {
                        statusCode    = HttpStatusCode.InternalServerError;
                        statusMessage = AppConstants.Error;
                        errorlist.Add(new Error(AppConstants.DELETE_FAILED_MSG, AppConstants.DELETE_FAILED));
                    }
                }
            }
            catch (Exception ex)
            {
                statusCode    = HttpStatusCode.NotModified;
                statusMessage = AppConstants.Error;
                string strErrorMsg = AppConstants.Error_Message + ex.Message;
                Error  error       = new Error(strErrorMsg, AppConstants.TODO_DELETE_ERROR);
                errorlist.Add(error);
                Logger.WriteLog(AppConstants.Error_Message + ex.Message + AppConstants.Inner_Exception + ex.InnerException +
                                AppConstants.Stack_Trace + ex.StackTrace + AppConstants.Soure + ex.Source);
            }
            //Write to log file if error is present
            if (errorlist.Count > 0)
            {
                errorlist.ForEach(error => Logger.WriteLog(AppConstants.Error + " in DeleteToDo() for ID : " + id + AppConstants.Error_Code
                                                           + error.errorCode + AppConstants.Error_Message + error.errorMessage));
            }
            responseHeader.statusCode    = statusCode;
            responseHeader.statusMessage = statusMessage;
            responseHeader.error         = errorlist;
            todoResponse.responseHeader  = responseHeader;
            responseBody.todo            = _repository.getAllTodo();
            todoResponse.responseBody    = responseBody;
            return(todoResponse);
        }
Esempio n. 21
0
 public GetTodoResponse(Todo todo)
 {
     Todo = new TodoResponse(todo);
 }
Esempio n. 22
0
 public async Task Get()
 {
     TodoService.Url    = Url;
     TodoService.Client = Http.CreateClient();
     Response           = await TodoService.Get(Id);
 }
Esempio n. 23
0
 public async Task NewTodo()
 {
     TodoService.Url    = Url;
     TodoService.Client = Http.CreateClient();
     Response           = await TodoService.Add(Request);
 }
Esempio n. 24
0
        [HttpPost] // Routing by explicitly specifying the HTTP Action type in the header
        public TodoResponse AddNewToDo(ToDo toDo)
        {
            TodoResponse   todoResponse   = new TodoResponse();
            ResponseHeader responseHeader = new ResponseHeader();
            ResponseBody   responseBody   = new ResponseBody();
            HttpStatusCode statusCode;
            List <Error>   errorlist     = new List <Error>();
            string         statusMessage = string.Empty;

            errorlist = ValidateUtility.ValidateInput(toDo);

            try
            {
                if (!ModelState.IsValid)
                {
                    statusCode    = HttpStatusCode.BadRequest;
                    statusMessage = AppConstants.Error;
                    errorlist.Add(new Error(AppConstants.MODAL_STATE_INVALID, AppConstants.BAD_REQUEST));
                }

                //Check if any of the input parameters are empty
                else if (errorlist.Count > 0)
                {
                    statusCode    = HttpStatusCode.BadRequest;
                    statusMessage = AppConstants.Error;
                    errorlist.ForEach(e => Logger.WriteLog(e.errorMessage));
                }

                else
                {
                    // Check if the item with same descrition is already present
                    if (ValidateUtility.ToDoExists(_repository.getAllTodo(), toDo))
                    {
                        statusCode    = HttpStatusCode.Conflict;
                        statusMessage = AppConstants.Error;
                        Error error = new Error(AppConstants.TODO_ALREADY_EXIST_MSG, AppConstants.TODO_ALREADY_EXIST);
                        errorlist.Add(error);
                        Logger.WriteLog(AppConstants.TODO_ALREADY_EXIST_MSG);
                    }

                    //If item not present, then insert new data
                    else
                    {
                        // return value and check the status and handle error
                        // Database insertion takes place here
                        if (_repository.insert(toDo) > 0)
                        {
                            statusCode    = HttpStatusCode.OK;
                            statusMessage = AppConstants.Success;
                        }

                        // If database insertion failed then handle the exception
                        else
                        {
                            statusCode    = HttpStatusCode.InternalServerError;
                            statusMessage = AppConstants.Error;
                            errorlist.Add(new Error(AppConstants.INSERT_FAILED_MSG, AppConstants.INSERT_FAILED));
                        }
                    }
                }
            }
            catch (DbUpdateException dbEx)
            {
                //If To Do item is already present in database with same id
                if (ToDoIdExists(toDo.SlNo))
                {
                    statusCode    = HttpStatusCode.Conflict;
                    statusMessage = AppConstants.Error;
                    string strErrorMsg = AppConstants.Error_Message + dbEx.Message + AppConstants.Inner_Exception + dbEx.InnerException +
                                         AppConstants.Stack_Trace + dbEx.StackTrace + AppConstants.Soure + dbEx.Source;
                    Error error = new Error(AppConstants.TODO_ALREADY_EXIST_MSG, AppConstants.TODO_ALREADY_EXIST);
                    errorlist.Add(error);
                    Logger.WriteLog(strErrorMsg);
                }
                else
                {
                    statusCode    = HttpStatusCode.InternalServerError;
                    statusMessage = AppConstants.Error;
                    string strErrorMsg = AppConstants.Error_Message + dbEx.Message;
                    errorlist.Add(new Error(AppConstants.INTERNAL_SERVER_ERROR_MSG, AppConstants.INTERNAL_SERVER_ERROR));
                    Logger.WriteLog(AppConstants.Error_Message + strErrorMsg + AppConstants.Inner_Exception + dbEx.InnerException +
                                    AppConstants.Stack_Trace + dbEx.StackTrace + AppConstants.Soure + dbEx.Source);
                }
            }

            //Write to log file if error is present
            if (errorlist.Count > 0)
            {
                //foreach (var error in errorlist)
                //{
                //    Logger.WriteLog(AppConstants.Error + " in PostToDo() " +AppConstants.Error_Code
                //                   + error.errorCode + AppConstants.Error_Message + error.errorMessage);
                //}
                errorlist.ForEach(error => Logger.WriteLog(AppConstants.Error + " in PostToDo() " + AppConstants.Error_Code
                                                           + error.errorCode + AppConstants.Error_Message + error.errorMessage));
            }
            responseHeader.statusCode    = statusCode;
            responseHeader.statusMessage = statusMessage;
            responseHeader.error         = errorlist;
            todoResponse.responseHeader  = responseHeader;
            responseBody.todo            = _repository.getAllTodo();
            todoResponse.responseBody    = responseBody;
            return(todoResponse);
        }