예제 #1
0
        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());
        }
예제 #2
0
        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"]
            }));
        }
예제 #3
0
        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));
        }
예제 #4
0
        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);
        }
예제 #5
0
        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));
        }