public async Task <BaseResponse> Create([FromBody] GroupCreateRequest request) { var response = new BaseResponse(); if (request == null || !ModelState.IsValid) { HttpContext.Response.StatusCode = StatusCodes.Status400BadRequest; response.Message = "Invalid input(s)."; return(response); } var group = new Group { Name = request.Name, Private = request.Private, Size = request.Size }; try { Group createdGroup = null; if (await _groupsRepository.Create(group)) { createdGroup = await _groupsRepository.GetByName(group.Name); } else { throw new Exception(); } if (createdGroup != null) { if (await _groupsRepository.AddUser(HttpContext.User.GetUserId(), createdGroup.Id)) { response.Message = "Group successfully created!"; response.Success = true; } } } catch (Exception ex) { try { await _groupsRepository.Delete(group); // If the User addition fails, we need to delete the group we created. } catch { Console.WriteLine(ex.Message); HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError; response.Message = "Failed to delete created group."; } Console.WriteLine(ex.Message); HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError; response.Message = "Failed to create group."; } return(response); }