| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Threading.Tasks;
 
- using InABox.Clients;
 
- using InABox.Core;
 
- namespace Comal.Classes
 
- {
 
-     public class KanbanSubscriberSet
 
-     {
 
-         private readonly List<KanbanSubscriber> _subscribers = new List<KanbanSubscriber>();
 
-         public KanbanSubscriberSet(IEnumerable<Guid> kanbanids)
 
-         {
 
-             _subscribers.Clear();
 
-             var result = new Client<KanbanSubscriber>().Query(
 
-                 new Filter<KanbanSubscriber>(x => x.Kanban.ID).InList(kanbanids.ToArray()),
 
-                 new Columns<KanbanSubscriber>(x => x.ID).Add(x => x.Kanban.ID).Add(x => x.Employee.ID).Add(x => x.Assignee).Add(x => x.Manager)
 
-                     .Add(x => x.Observer));
 
-             if (result.Rows.Any())
 
-                 _subscribers.AddRange(result.Rows.Select(x => x.ToObject<KanbanSubscriber>()));
 
-         }
 
-         public void Save(bool wait = true)
 
-         {
 
-             var update = Task.Run(() =>
 
-             {
 
-                 var updates = _subscribers.Where(x => (x.Manager || x.Assignee || x.Observer) && (x.IsChanged() || Equals(x.ID, Guid.Empty)));
 
-                 new Client<KanbanSubscriber>().Save(updates, "");
 
-             });
 
-             var delete = Task.Run(() =>
 
-             {
 
-                 var deletes = _subscribers.Where(x => !x.Manager && !x.Assignee && !x.Observer).ToArray();
 
-                 new Client<KanbanSubscriber>().Delete(deletes, "");
 
-             });
 
-             if (wait)
 
-                 Task.WaitAll(update, delete);
 
-         }
 
-         private KanbanSubscriber EnsureSubscriber(Guid kanbanid, Guid employeeid)
 
-         {
 
-             var subscriber = _subscribers.FirstOrDefault(x => Equals(x.Kanban.ID, kanbanid) && Equals(x.Employee.ID, employeeid));
 
-             if (subscriber == null)
 
-             {
 
-                 subscriber = new KanbanSubscriber();
 
-                 subscriber.Kanban.ID = kanbanid;
 
-                 subscriber.Employee.ID = employeeid;
 
-                 _subscribers.Add(subscriber);
 
-             }
 
-             return subscriber;
 
-         }
 
-         public void EnsureManager(Guid kanbanid, Guid employeeid)
 
-         {
 
-             var manager = EnsureSubscriber(kanbanid, employeeid);
 
-             // No-one else can be a manager
 
-             var others = _subscribers.Where(x => Equals(x.Kanban.ID, kanbanid)).ToArray();
 
-             foreach (var other in others)
 
-                 other.Manager = false;
 
-             // only this one!
 
-             manager.Manager = true;
 
-         }
 
-         public void EnsureAssignee(Guid kanbanid, Guid employeeid)
 
-         {
 
-             var assignee = EnsureSubscriber(kanbanid, employeeid);
 
-             // No-one else can be a assignee
 
-             var others = _subscribers.Where(x => Equals(x.Kanban.ID, kanbanid)).ToArray();
 
-             foreach (var other in others)
 
-                 other.Assignee = false;
 
-             // only this one!
 
-             assignee.Assignee = true;
 
-         }
 
-         public void EnsureObserver(Guid kanbanid, Guid employeeid)
 
-         {
 
-             var observer = EnsureSubscriber(kanbanid, employeeid);
 
-             // Employee can only be an observer once
 
-             var subscribers = _subscribers.Where(x => Equals(x.Kanban.ID, kanbanid) && Equals(x.Employee.ID, employeeid)).ToArray();
 
-             foreach (var subscriber in subscribers)
 
-                 subscriber.Observer = false;
 
-             observer.Observer = true;
 
-         }
 
-     }
 
- }
 
 
  |