async public Task <IActionResult> FolderUpdateInstanceByType([FromBody] ResponseInstance model, string folderId, string dataTypeId, string instanceId) { string userId = User.GetUserId(); if (await CanManageFolder(userId, folderId) == false) { return(BadRequest("Cannot Manage Folder")); } var user = await _userManager.FindByIdAsync(userId); var query = new BsonDocument("$and", new BsonArray { new BsonDocument("FolderId", folderId), new BsonDocument("TypeId", dataTypeId), new BsonDocument("InstanceId", instanceId) }); model.InstanceData["UpdatedOn"] = model.LocalDateTime; model.InstanceData["UpdatedBy"] = user.Email; await _mongoDBContext.Instances.ReplaceOneAsync(query, model.InstanceData); return(Ok()); }
async public Task <IActionResult> FolderCreateInstanceByType([FromBody] ResponseInstance model, string folderId, string dataTypeId) { string userId = User.GetUserId(); if (await CanManageFolder(userId, folderId) == false) { return(BadRequest("Cannot Manage Folder")); } var user = await _userManager.FindByIdAsync(userId); model.InstanceData.Add("InstanceId", Guid.NewGuid().ToString()); model.InstanceData.Add("FolderId", folderId); model.InstanceData.Add("TypeId", dataTypeId); model.InstanceData.Add("CreatedOn", model.LocalDateTime); model.InstanceData.Add("CreatedBy", user.Email); model.InstanceData.Add("UpdatedOn", null); model.InstanceData.Add("UpdatedBy", null); await _mongoDBContext.Instances.InsertOneAsync(model.InstanceData); return(Ok(new ResponseId() { Id = model.InstanceData["InstanceId"] })); }
async public Task <ResponseId> CreateFolderInstance(string folderId, string dataTypeId, Dictionary <string, string> model) { ResponseInstance content = new ResponseInstance() { InstanceData = model, LocalDateTime = DateTime.Now.ToString("d-MMM-yyyy h:mm tt") }; return(await PostAsync <ResponseId>($"api/v1/folder/{folderId}/type/{dataTypeId}/instance", content)); }
async public Task UpdateFolderInstance(string folderId, string dataTypeId, string instanceId, Dictionary <string, string> model) { ResponseInstance content = new ResponseInstance() { Id = instanceId, InstanceData = model, LocalDateTime = DateTime.Now.ToString("d-MMM-yyyy h:mm tt") }; await PutAsync($"api/v1/folder/{folderId}/type/{dataTypeId}/instance/{instanceId}", content); }
async public Task <IActionResult> FolderGetInstanceById(string folderId, string dataTypeId, string instanceId) { string userId = User.GetUserId(); if (await CanManageFolder(userId, folderId) == false) { return(BadRequest("Cannot Manage Folder")); } //Query used in data results and count results. Separate the query from the rest of the pipeline so it can be reused. var query = new BsonDocument("$and", new BsonArray { new BsonDocument("FolderId", folderId), new BsonDocument("TypeId", dataTypeId), new BsonDocument("InstanceId", instanceId) }); PipelineDefinition <Dictionary <string, string>, Dictionary <string, string> > pipelineData = new BsonDocument[] { new BsonDocument("$match", query), new BsonDocument("$project", new BsonDocument { { "_id", 0 }, }) }; //Search var data = await _mongoDBContext.Instances.Aggregate(pipelineData).FirstOrDefaultAsync(); //Make sure the response object has all the fields defined DataType instanceType = await _db.DataTypes .Include(i => i.Fields) .Where(i => i.FolderId == folderId && i.Id == dataTypeId) .FirstOrDefaultAsync(); foreach (var field in instanceType.Fields) { if (data.ContainsKey(field.Id) == false) { data.Add(field.Id, null); } } ResponseInstance response = new ResponseInstance() { Id = instanceId, InstanceData = data }; return(Ok(response)); }