private static async Task AssignTag(WorkspaceModel workspace, string tagName, TimeEntryModel timeEntry) { var store = ServiceContainer.Resolve <IDataStore>(); var existing = await store.Table <TagData>() .QueryAsync(r => r.WorkspaceId == workspace.Id && r.Name == tagName) .ConfigureAwait(false); var checkRelation = true; TagModel tag; if (existing.Count > 0) { tag = new TagModel(existing [0]); } else { tag = new TagModel() { Name = tagName, Workspace = workspace, }; await tag.SaveAsync().ConfigureAwait(false); checkRelation = false; } if (timeEntry != null) { var assignTag = true; if (checkRelation) { // Check if the relation already exists before adding it var relations = await store.Table <TimeEntryTagData> () .CountAsync(r => r.TimeEntryId == timeEntry.Id && r.TagId == tag.Id && r.DeletedAt == null) .ConfigureAwait(false); if (relations < 1) { assignTag = false; } } if (assignTag) { var relationModel = new TimeEntryTagModel() { TimeEntry = timeEntry, Tag = tag, }; await relationModel.SaveAsync().ConfigureAwait(false); timeEntry.Touch(); await timeEntry.SaveAsync().ConfigureAwait(false); } } }
public async Task AssignTag(string tagName) { if (model.Workspace == null) { return; } var store = ServiceContainer.Resolve <IDataStore>(); var existing = await store.Table <TagData>() .QueryAsync(r => r.WorkspaceId == workspace.Id && r.Name == tagName) .ConfigureAwait(false); var checkRelation = true; TagModel tag; if (existing.Count > 0) { tag = new TagModel(existing [0]); } else { tag = new TagModel { Name = tagName, Workspace = workspace, }; await tag.SaveAsync().ConfigureAwait(false); checkRelation = false; } if (model != null) { var assignTag = true; if (checkRelation) { // Check if the relation already exists before adding it var relations = await store.Table <TimeEntryTagData> () .CountAsync(r => r.TimeEntryId == model.Id && r.TagId == tag.Id && r.DeletedAt == null) .ConfigureAwait(false); if (relations < 1) { assignTag = false; } } if (assignTag) { foreach (var timeEntryData in timeEntryList) { var relationModel = new TimeEntryTagModel { TimeEntry = new TimeEntryModel(timeEntryData), Tag = tag, }; await relationModel.SaveAsync().ConfigureAwait(false); } model.Touch(); await model.SaveAsync().ConfigureAwait(false); } } }