Exemplo n.º 1
0
        private IEnumerable <ForeignRelation> GetTimeEntryTagRelations(TimeEntryTagData data)
        {
            yield return(new ForeignRelation()
            {
                Name = "TimeEntryId",
                Type = typeof(TimeEntryData),
                Required = true,
                Id = data.TimeEntryId,
            });

            yield return(new ForeignRelation()
            {
                Name = "TagId",
                Type = typeof(TagData),
                Required = true,
                Id = data.TagId,
            });
        }
        private async Task <List <TagData> > UpdateTagsWithWorkspace(Guid timeEntryId, Guid workspaceId, List <TagData> oldTagList)
        {
            var dataStore = ServiceContainer.Resolve <IDataStore> ();

            // Get new workspace tag list.
            var tagList = await dataStore.Table <TagData> ()
                          .Where(r => r.WorkspaceId == workspaceId && r.DeletedAt == null)
                          .ToListAsync();

            // Get new tags to create and existing tags from previous workspace.
            var tagsToCreate = new List <TagData> (oldTagList.Where(t => tagList.IndexOf(n => n.Name.Equals(t.Name)) == -1));
            var commonTags   = new List <TagData> (tagList.Where(t => oldTagList.IndexOf(n => n.Name.Equals(t.Name)) != -1));

            // Create new tags.
            for (int i = 0; i < tagsToCreate.Count; i++)
            {
                var newTag = await TagModel.AddTag(workspaceId, tagsToCreate[i].Name);

                tagsToCreate[i] = newTag;
            }

            // Contact both lists.
            var newTagList = commonTags.Concat(tagsToCreate);

            // Delete existing tag relationships from relationship table.
            var oldRelationships = await dataStore.Table <TimeEntryTagData> ()
                                   .Where(t => t.TimeEntryId == timeEntryId && t.DeletedAt == null)
                                   .ToListAsync();

            oldRelationships.ForEach(async(r) => await dataStore.DeleteAsync(r));

            // Create and save new relationships
            foreach (var item in newTagList)
            {
                var r = new TimeEntryTagData {
                    TagId       = item.Id,
                    TimeEntryId = timeEntryId
                };
                await dataStore.PutAsync(r);
            }

            return(newTagList.ToList());
        }
Exemplo n.º 3
0
        private void OnDataChange(TimeEntryTagData data, DataAction action)
        {
            var shouldUpdate = false;
            var isExcluded   = action == DataAction.Delete ||
                               data.DeletedAt != null ||
                               data.TimeEntryId != timeEntryId;

            if (isExcluded)
            {
                shouldUpdate = tagIds.Remove(data.TagId);
            }
            else
            {
                shouldUpdate = tagIds.Add(data.TagId);
                var shouldAdd = shouldUpdate && !tagsList.Any(i => i.Id == data.TagId);

                if (shouldAdd)
                {
                    // Try to add TagData from cache, or load it
                    var tag = TagCache.Get(data.TagId);
                    if (tag != null)
                    {
                        tagsList.Add(tag);
                    }
                    else
                    {
                        shouldUpdate = false;
                        LoadTagData(data.TagId);
                    }
                }
            }

            if (shouldUpdate)
            {
                OnUpdated();
            }
        }