Example #1
0
 public IActionResult Create(NeuerBesuchViewModel neuerBesuchViewModel)
 {
     return(Execute(() =>
     {
         // Startzeit serverseitig setzen
         return _besuchService.Create(neuerBesuchViewModel);
     }));
 }
        public BesuchViewModel Create(NeuerBesuchViewModel neuerBesuch)
        {
            Guard.IsNotNull(neuerBesuch, nameof(neuerBesuch));
            Guard.IsNotNull(neuerBesuch.Besucher, nameof(neuerBesuch.Besucher));
            Guard.IsNotNull(neuerBesuch.Raeume, nameof(neuerBesuch.Raeume));

            using (var unit = new UnitOfWork())
            {
                var besucherRepo = unit.GetRepository <BesucherRepository>();
                neuerBesuch.Besucher.ForEach(x =>
                {
                    if (besucherRepo.GetBesucherById(x) == null)
                    {
                        throw new CustomException("Der Besucher wurde nicht gefunden: " + x);
                    }
                });

                var gebaeudeRepo = unit.GetRepository <GebaeudeRepository>();
                neuerBesuch.Raeume.ForEach(x =>
                {
                    if (gebaeudeRepo.GetRaumById(x) == null)
                    {
                        throw new CustomException("Der Raum wurde nicht gefunden: " + x);
                    }
                });


                var besuchRepo = unit.GetRepository <BesuchRepository>();
                var newBesuch  = new Besuch {
                    Startzeit = DateTime.Now
                };
                besuchRepo.Create(newBesuch);
                unit.SaveChanges();

                var besuchBesucher = neuerBesuch.Besucher?.Select(x => new BesuchBesucher {
                    BesuchId = newBesuch.Id, BesucherId = x
                })?.ToList();
                if (besuchBesucher?.Count > 0)
                {
                    besuchRepo.Create(besuchBesucher);
                }

                var besuchRaeume = neuerBesuch.Raeume?.Select(x => new BesuchRaum {
                    BesuchId = newBesuch.Id, RaumId = x
                })?.ToList();
                if (besuchRaeume?.Count > 0)
                {
                    besuchRepo.Create(besuchRaeume);
                }
                unit.SaveChanges();

                Besuch result = besuchRepo.GetById(newBesuch.Id);
                return(GetBesuchViewModelFromBesuch(unit, result));
            }
        }