public UserGroup(MongoUserGroup mongoUserGroup, IReadOnlyDictionary <ObjectId, MongoUserGroupMemberUser> userDictionary) { Id = mongoUserGroup.Id; Name = mongoUserGroup.Name; Members = mongoUserGroup.Members?.Select(u => new UserGroupMember(u, userDictionary)); CreatedAt = mongoUserGroup.CreatedAt; UpdatedAt = mongoUserGroup.UpdatedAt; }
public static async Task <APIGatewayProxyResponse> PostUserGroups(APIGatewayProxyRequest request, ILambdaContext context) { try { var body = JsonConvert.DeserializeObject <UserGroupCreateRequest>(request.Body); var user = await UsersCollection.AsQueryable().Select(MongoUserGroupMemberUser.UserProjection).FirstOrDefaultAsync(u => u.Id == body.UserId).ConfigureAwait(false); if (user == null) { throw new Exception("User Not Found"); } // TODO : Check for conflict! IE User is already the owner of a UserGroup! Also check if the group name is already in use. IE make name unique. /* * return new APIGatewayProxyResponse * { * StatusCode = (int) HttpStatusCode.Conflict, * Body = JsonConvert.SerializeObject(new ApiResponse<ApiError> * { * Data = new ApiError * { * Type = ApiError.ErrorType.ApiError, * Message = "A change with that Id already exits." * } * }, ApiGatewayUtil.DefaultSerializerSettings), * Headers = ApiGatewayUtil.DefaultHeaders * }; */ var mongoUserGroup = new MongoUserGroup(body, user); await UserGroupsCollection.InsertOneAsync(mongoUserGroup).ConfigureAwait(false); var userDictionary = new[] { user }.ToDictionary(u => u.Id); return(new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.Created, Body = JsonConvert.SerializeObject(new ApiGatewayUtil.ApiResponse <UserGroup> { Data = new UserGroup(mongoUserGroup, userDictionary), }, ApiGatewayUtil.DefaultSerializerSettings), Headers = ApiGatewayUtil.DefaultHeaders }); } catch (Exception e) { return(new APIGatewayProxyResponse { StatusCode = e is JsonSerializationException ? (int)HttpStatusCode.BadRequest : (int)HttpStatusCode.InternalServerError, Body = JsonConvert.SerializeObject(new ApiGatewayUtil.ApiResponse <ApiGatewayUtil.ApiError> { Data = new ApiGatewayUtil.ApiError { Type = ApiGatewayUtil.ApiError.ErrorType.ApiError, Message = e.Message } }, ApiGatewayUtil.DefaultSerializerSettings), Headers = ApiGatewayUtil.DefaultHeaders }); } }