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)); } }