public List<Contribution> GetAllContributionsFromEvent(Event eventTarget)
 {
     using (SynchronicWorldContext context = new SynchronicWorldContext())
     {
         return context.Events.Include(e => e.Contributions.Select(c=>c.Person)).Where(e => e.Name.Equals(eventTarget.Name)).FirstOrDefault().Contributions.ToList();
     }
 }
 public Event UpdateEvent(Event updatedEvent)
 {
     using (SynchronicWorldContext context = new SynchronicWorldContext())
     {
         // if address or name are null or name is already taken
         if (context.Events.Where(e => e.Name.Equals(updatedEvent.Name) && !e.Id.Equals(updatedEvent.Id)).Count() != 0
             || updatedEvent.Name.Equals("")
             || updatedEvent.Address.Equals("")
             || updatedEvent.Description.Equals(""))
         {
             return null;
         }
         Event eventInDb = context.Events.Where(e => e.Id.Equals(updatedEvent.Id)).FirstOrDefault();
         if (eventInDb == null)
         {
             return null;
         }
         eventInDb.Address = updatedEvent.Address;
         eventInDb.Date = updatedEvent.Date;
         eventInDb.Description = updatedEvent.Description;
         eventInDb.Name = updatedEvent.Name;
         eventInDb.Status = updatedEvent.Status;
         eventInDb.Type = updatedEvent.Type;
         context.SaveChanges();
         return eventInDb;
     }
 }
 public Event AddContribution(Contribution contribution, Event eventTarget)
 {
     using (SynchronicWorldContext context = new SynchronicWorldContext())
     {
         var contributionInDb = context.Contributions.Where(c => c.Name.ToLower().Equals(contribution.Name.ToLower())).FirstOrDefault();
         var eventInDb = context.Events.Include(e => e.Contributions).Where(e => e.Name.ToLower().Equals(eventTarget.Name.ToLower())).FirstOrDefault();
         if (contributionInDb == null || eventInDb == null)
         {
             return null;
         }
         eventInDb.Contributions.Add(contributionInDb);
         context.SaveChanges();
         return eventInDb;
     }
 }
 public bool DeleteEvent(Event eventToDelete)
 {
     using (SynchronicWorldContext context = new SynchronicWorldContext())
     {
         Event EventInDb = context.Events.Include(e => e.Persons).Include(e=>e.Contributions).Where(e => e.Id.Equals(eventToDelete.Id)).FirstOrDefault();
         if (EventInDb == null)
         {
             return false;
         }
         EventInDb.Persons.Clear();
         EventInDb.Contributions.Clear();
         context.Events.Remove(EventInDb);
         context.SaveChanges();
         return true;
     }
 }
 public Event CreateEvent(Event eventToCreate)
 {
     using (SynchronicWorldContext context = new SynchronicWorldContext())
     {
         // if address or name are null or name is already taken
         if(context.Events.Where(e=>e.Name.Equals(eventToCreate.Name)).Count()!=0
             || eventToCreate.Name.Equals("")
             || eventToCreate.Address.Equals("")
             || eventToCreate.Description.Equals(""))
         {
             return null;
         }
         Event newEvent = context.Events.Add(eventToCreate);
         context.SaveChanges();
         return newEvent;
     }
 }
 public bool AddPersonToOpenEvent(Event eventTarget, Person person)
 {
     using (SynchronicWorldContext context = new SynchronicWorldContext())
     {
         Person PersonInDb = context.Persons.Where(p => p.Nickname.ToLower().Equals(person.Nickname.ToLower())).FirstOrDefault();
         if (PersonInDb == null)
         {
             return false;
         }
         if (context.Events.Include(e=>e.Persons).Where(e => e.Name.ToLower().Equals(eventTarget.Name.ToLower())).FirstOrDefault().Persons.Contains(PersonInDb)
             || !context.Events.Where(e=>e.Name.ToLower().Equals(eventTarget.Name.ToLower())).FirstOrDefault().Status.ToString().Equals(EventStatus.Open.ToString()))
         {
             return false;
         }
         context.Events.Where(e => e.Name.Equals(eventTarget.Name)).FirstOrDefault().Persons.Add(PersonInDb);
         context.SaveChanges();
         return true;
     }
 }
 public List<Person> GetAllPersonsFromOpenEvent(Event eventTarget)
 {
     using (SynchronicWorldContext context = new SynchronicWorldContext())
     {
         if (!context.Events.Where(e => e.Name.ToLower().Equals(eventTarget.Name.ToLower())).FirstOrDefault().Status.ToString().Equals(EventStatus.Open.ToString()))
         {
             return null;
         }
         return context.Events.Include(e => e.Persons).Where(e => e.Name.Equals(eventTarget.Name)).FirstOrDefault().Persons;
     }
 }