Exemple #1
0
        public IActionResult CancelMinistryInvite(string authSessionCookie, string ministry)
        {
            FirebaseToken firebaseToken = FirebaseAuth.DefaultInstance.VerifySessionCookieAsync(authSessionCookie).Result;
            string        firebaseUid   = firebaseToken.Uid;

            using (DatabaseContext database = new DatabaseContext())
            {
                User user = database.Users.Single(u => u.FirebaseUid == firebaseUid);

                Country country = database.Countries.Single(c => c.CountryName == user.CountryName);

                MinistryHelper.MinistryCode ministryCode = (MinistryHelper.MinistryCode)Enum.Parse(typeof(MinistryHelper.MinistryCode), ministry);

                if (user.Ministry == MinistryHelper.MinistryCode.PrimeMinister)
                {
                    InvitedMinister invitedMinister = database.InvitedMinisters.Single(im => im.CountryName == country.CountryName && im.Ministry == ministryCode);
                    database.InvitedMinisters.Remove(invitedMinister);

                    return(Content("success"));
                }
                else
                {
                    return(StatusCode(403));
                }
            }
        }
Exemple #2
0
        public IActionResult DeclineMinistryInvite(string authSessionCookie, string ministry, string newCountryName)
        {
            FirebaseToken firebaseToken = FirebaseAuth.DefaultInstance.VerifySessionCookieAsync(authSessionCookie).Result;
            string        firebaseUid   = firebaseToken.Uid;

            using (DatabaseContext database = new DatabaseContext())
            {
                User user = database.Users.Single(u => u.FirebaseUid == firebaseUid);

                Country newCountry = database.Countries.Single(c => c.CountryName == newCountryName);

                MinistryHelper.MinistryCode ministryCode = (MinistryHelper.MinistryCode)Enum.Parse(typeof(MinistryHelper.MinistryCode), ministry);

                if (database.InvitedMinisters.Any(im => im.Username == user.Username && im.CountryName == newCountry.CountryName && im.Ministry == ministryCode))
                {
                    InvitedMinister invitedMinister = database.InvitedMinisters.Single(im => im.Username == user.Username && im.CountryName == newCountry.CountryName && im.Ministry == ministryCode);
                    database.InvitedMinisters.Remove(invitedMinister);

                    Notification notification = NotificationHelper.GenerateMinisterialInvitationDeclinedNotification(database.Users.Single(u => u.CountryName == newCountry.CountryName && u.Ministry == MinistryHelper.MinistryCode.PrimeMinister).Username, user.Username, ministryCode);
                    database.Notifications.Add(notification);

                    database.SaveChanges();

                    return(Content("success"));
                }
                else
                {
                    return(StatusCode(403));
                }
            }
        }
Exemple #3
0
        public IActionResult InviteMinister(string authSessionCookie, string ministry, string invitedUsername)
        {
            FirebaseToken firebaseToken = FirebaseAuth.DefaultInstance.VerifySessionCookieAsync(authSessionCookie).Result;
            string        firebaseUid   = firebaseToken.Uid;

            using (DatabaseContext database = new DatabaseContext())
            {
                User user = database.Users.Single(u => u.FirebaseUid == firebaseUid);

                Country country = database.Countries.Single(c => c.CountryName == user.CountryName);

                if (user.Ministry == MinistryHelper.MinistryCode.PrimeMinister)
                {
                    MinistryHelper.MinistryCode ministryCode = (MinistryHelper.MinistryCode)Enum.Parse(typeof(MinistryHelper.MinistryCode), ministry);

                    if (database.Users.Any(u => u.CountryName == country.CountryName && u.Ministry == ministryCode))
                    {
                        return(Content("Error: There is already a minister in that ministry. Dismiss them before inviting a new one."));
                    }

                    if (database.InvitedMinisters.Any(im => im.CountryName == country.CountryName && im.Ministry == ministryCode))
                    {
                        return(Content("Error: A user is already being invited to this ministry. Wait until they accept or decline the invitation, or cancel it."));
                    }

                    InvitedMinister invitedMinister = new InvitedMinister
                    {
                        Username    = invitedUsername,
                        CountryName = country.CountryName,
                        Ministry    = ministryCode
                    };
                    database.InvitedMinisters.Add(invitedMinister);

                    Notification notification = NotificationHelper.GenerateMinisterialInvitationNotification(user.Username, invitedMinister.Username, invitedMinister.Ministry);
                    database.Notifications.Add(notification);

                    database.SaveChanges();

                    return(Content("success"));
                }
                else
                {
                    return(StatusCode(403));
                }
            }
        }
Exemple #4
0
        public IActionResult AcceptMinistryInvite(string authSessionCookie, string ministry, string newCountryName, string ministryToReplacePM = null)
        {
            FirebaseToken firebaseToken = FirebaseAuth.DefaultInstance.VerifySessionCookieAsync(authSessionCookie).Result;
            string        firebaseUid   = firebaseToken.Uid;

            using (DatabaseContext database = new DatabaseContext())
            {
                User user = database.Users.Single(u => u.FirebaseUid == firebaseUid);

                Country newCountry = database.Countries.Single(c => c.CountryName == newCountryName);

                MinistryHelper.MinistryCode ministryCode = (MinistryHelper.MinistryCode)Enum.Parse(typeof(MinistryHelper.MinistryCode), ministry);

                if (database.InvitedMinisters.Any(im => im.Username == user.Username && im.CountryName == newCountry.CountryName && im.Ministry == ministryCode))
                {
                    InvitedMinister invitedMinister = database.InvitedMinisters.Single(im => im.Username == user.Username && im.CountryName == newCountry.CountryName && im.Ministry == ministryCode);
                    database.InvitedMinisters.Remove(invitedMinister);

                    if (user.CountryName != null)
                    {
                        if (user.Ministry == MinistryHelper.MinistryCode.PrimeMinister)
                        {
                            Country oldCountry = database.Countries.Single(c => c.CountryName == user.CountryName);

                            bool stillMinisters; // will there still be ministers after the PM leaves? / are there any other ministers in the old country?
                            stillMinisters = database.Users.Any(u => u.CountryName == oldCountry.CountryName);
                            if (!stillMinisters)
                            {
                                database.Countries.Remove(oldCountry);
                            }

                            else
                            {
                                MinistryHelper.MinistryCode ministryToReplacePMCode = (MinistryHelper.MinistryCode)Enum.Parse(typeof(MinistryHelper.MinistryCode), ministryToReplacePM);

                                if (!database.Users.Any(u => u.CountryName == oldCountry.CountryName && u.Ministry == ministryToReplacePMCode))
                                {
                                    return(Content("Error: The minister you are trying to set as Prime Minister doesn't exist."));
                                }

                                User newPrimeMinister = database.Users.Single(u => u.CountryName == oldCountry.CountryName && u.Ministry == ministryToReplacePMCode);
                                newPrimeMinister.Ministry = MinistryHelper.MinistryCode.PrimeMinister;
                            }
                        }
                    }
                    user.CountryName = newCountry.CountryName;
                    user.Ministry    = ministryCode;

                    Notification notification = NotificationHelper.GenerateMinisterialInvitationAcceptedNotification(database.Users.Single(u => u.CountryName == newCountry.CountryName && u.Ministry == MinistryHelper.MinistryCode.PrimeMinister).Username, user.Username, ministryCode);
                    database.Notifications.Add(notification);

                    database.SaveChanges();

                    return(Content("success"));
                }
                else
                {
                    return(StatusCode(403));
                }
            }
        }