示例#1
0
        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);
        }