/// <summary> /// Liest die Daten für die Anzeige der Seite aus der Datenbank. /// </summary> /// <param name="token"></param> /// <returns></returns> private async Task InitializeAsync(Token token) { Token = token ?? throw new ArgumentNullException(nameof(token)); // Die angemeldeten Fächer des Users auslesen var subjectRegistrations = from r in _context.Registrations where r.TokenId == token.TokenId select new SubjectRegistration { SubjectId = r.SubjectId, SubjectName = r.Subject.Name, RegistrationId = r.RegistrationId, Rating = r.Rating }; if (!subjectRegistrations.Any()) { // Wenn keine Anmeldung besteht, wird eine leere Anmeldung für jedes vorhandene // Fach erstellt. subjectRegistrations = from s in _context.Subjects select new SubjectRegistration { SubjectId = s.SubjectId, SubjectName = s.Name }; } RegistrationStats = await(from r in _context.Registrations where r.Rating == 1 group r by r.Subject.SubjectId into g orderby g.Key select new RegistrationStat { SubjectId = g.Key, RegistrationCount = g.Count() }).ToListAsync(); SubjectRegistrations = new SubjectRegistrationList(await subjectRegistrations.ToListAsync()); }
/// <summary> /// Speichert die Formulareingaben in der Datenbank. /// </summary> /// <param name="id">Token</param> /// <param name="subjectRegistrations">Formulardaten, die gespeichert werden müssen.</param> /// <returns></returns> public async Task <IActionResult> OnPostAsync(string id, SubjectRegistrationList subjectRegistrations) { // Nur mit gültigem Token verarbeiten. var token = _context.Tokens.Find(id); if (token == null) { return(NotFound()); } // Die restlichen Daten für die Anzeige (Statistik) nachladen, denn es werden nur die // Formulardaten übermittelt. if (ModelState.IsValid) { foreach (var r in subjectRegistrations ?? Enumerable.Empty <SubjectRegistration>()) { if (r.RegistrationId == 0) { _context.Registrations.Add(new Registration { SubjectId = r.SubjectId, TokenId = id, Rating = r.Rating }); } else { var registration = _context.Registrations.Find(r.RegistrationId); registration.Rating = r.Rating; } } _context.SaveChanges(); token.LastValidRegistration = DateTime.UtcNow; _context.SaveChanges(); } await InitializeAsync(token); return(Page()); }