public async Task <IHttpActionResult> GetAllUnacceptedForUser()
        {
            try
            {
                var problems = await ProblemCore.GetAllUnaccepted(Identity.Id);

                if (problems == null)
                {
                    return(BadRequest("Invalid Id or no problems found"));
                }

                var model = problems.Select(p => new ProblemModel
                {
                    Id          = p.Id,
                    UserId      = p.UserId,
                    Name        = p.Name,
                    Description = p.Description
                }).ToArray();

                return(Ok(model));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public async Task <IHttpActionResult> Get(Guid id)
        {
            try
            {
                var problem = await ProblemCore.GetAsync(id);

                if (problem == null)
                {
                    return(BadRequest("No problem with the given id found"));
                }

                var result = new ProblemModel
                {
                    Id          = problem.Id,
                    UserId      = problem.UserId,
                    Name        = problem.Name,
                    Description = problem.Description
                };

                return(Ok(result));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public async Task <IHttpActionResult> Update([FromBody] ProblemModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                var problemToUpdate = await ProblemCore.GetAsync(model.Id);

                if (problemToUpdate == null)
                {
                    return(BadRequest("Problem couldn't be found"));
                }

                problemToUpdate.Name        = model.Name;
                problemToUpdate.Description = model.Description;

                var result = await ProblemCore.UpdateAsync(problemToUpdate);

                if (result == null)
                {
                    return(BadRequest("Error updating problem"));
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public async Task <IHttpActionResult> Create([FromBody] ProblemModel model)
        {
            try
            {
                if (!ModelState.IsValid || string.IsNullOrWhiteSpace(model.Name) || string.IsNullOrWhiteSpace(model.Description))
                {
                    return(BadRequest(ModelState));
                }

                var problem = new Problem
                {
                    UserId      = Identity.Id,
                    Name        = model.Name,
                    Description = model.Description
                };

                var result = await ProblemCore.CreateAsync(problem);

                if (result == null)
                {
                    return(BadRequest("Invalid input"));
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public async Task <IHttpActionResult> Accept([FromBody] Problem model)
        {
            try
            {
                var result = await ProblemCore.AcceptProblem(model.Id).ConfigureAwait(false);

                if (result == null)
                {
                    return(BadRequest("Error accepting problem"));
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public async Task <IHttpActionResult> Delete(Guid id)
        {
            try
            {
                var result = await ProblemCore.DeleteAsync(id);

                if (!result)
                {
                    return(BadRequest("Error deleting problem"));
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }