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