public async Task CreateLogin(Login login) { try { await _loginProvider.CreateLogin(login); } catch (Exception e) { throw new Exception(e.Message); } }
public async Task <IActionResult> AddLogin(string familyId, [FromBody] string[] emailIds) { if (emailIds == null || emailIds.Length == 0) { return(BadRequest("Empty emailIds")); } var emails = emailIds.Distinct(); var registrations = await Task.WhenAll(emails.Select(_loginProvider.IsRegistered)); if (registrations.Any(r => r)) { var registeredEmails = emails.Zip(registrations, (e, r) => Tuple.Create(e, r)).Where(t => t.Item2).Select(t => t.Item1); return(BadRequest($"Email Id(s) are already registered. {string.Join(",", registeredEmails)}")); } var context = GetUserContext(); var createdLogins = await Task.WhenAll(emails.Select(email => _loginProvider.CreateLogin( new User { LoginId = email, ChurchId = context.ChurchId, FamlyId = familyId, Email = email, Role = UserRole.User }))); var family = await DataRepository.GetFamily(context.ChurchId, familyId); var logins = new List <string>(); if (family.Logins != null) { logins.AddRange(family.Logins); } var failedLogins = new List <string>(); foreach (var tup in emails.Zip(createdLogins, System.Tuple.Create)) { if (tup.Item2) { logins.Add(tup.Item1); } else { failedLogins.Add(tup.Item1); _logger.LogError($"Failed to add loginId : {tup.Item2} in the context {context}"); } } if (failedLogins.Count > 0) { return(BadRequest($"Failed to create logins.{string.Join(",", failedLogins.ToArray())}")); } family = new Family { ChurchId = context.ChurchId, FamilyId = familyId, Logins = logins }; var result = await DataRepository.UpdateFamily(family); return(result ? Ok() : StatusCode((int)HttpStatusCode.InternalServerError)); }