Пример #1
0
 public async Task CreateLogin(Login login)
 {
     try
     {
         await _loginProvider.CreateLogin(login);
     }
     catch (Exception e)
     {
         throw new Exception(e.Message);
     }
 }
Пример #2
0
        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));
        }