public IActionResult AddArtistMember(int artistId, ArtistMember artistMember) { try { if (!ClientKeyIsValid()) { return(Unauthorized()); } if (!UserIsAuthenticatedAndAuthorized(MethodBase.GetCurrentMethod())) { return(Unauthorized()); } if (!UserIsAuthorizedForArtist(artistId)) { return(Unauthorized()); } var invalidArtistPathResult = InvalidArtistPathResult(artistId); if (invalidArtistPathResult != null) { return(invalidArtistPathResult); } artistMember.ArtistId = artistId; var taskResults = _addArtistMemberTask.DoTask(artistMember); return(taskResults.Success ? Json(taskResults) : Error(taskResults.Exception)); } catch (Exception e) { return(Error(e)); } }
public TaskResult <User> DoTask(UserInvitation userInvitation) { try { var invitation = _dbContext.UserInvitations.Where(ui => ui.Uuid == userInvitation.Uuid) .Include(ui => ui.InvitedByUser) .Single(); if (invitation.Type == UserType.Unassigned) { throw new TaskException(SystemMessage("USER_INVITATION_UNASSIGNED")); } var newUser = userInvitation.CreatedUser; newUser.AuthenticationId = invitation.Email; newUser.Type = invitation.Type; newUser.Roles = invitation.Roles; var newPerson = newUser.Person; newPerson.Email = invitation.Email; var addPersonResult = _addPersonTask.DoTask(newPerson); if (!addPersonResult.Success) { throw addPersonResult.Exception; } var personId = addPersonResult.Data; var proId = newUser.PerformingRightsOrganization?.Id ?? newUser.PerformingRightsOrganizationId; var publisherId = invitation.Publisher?.Id ?? invitation.PublisherId; var recordLabelId = invitation.RecordLabel?.Id ?? invitation.RecordLabelId; var artistId = invitation.Artist?.Id ?? invitation.ArtistId; newUser.Person = null; newUser.PersonId = personId; newUser.PerformingRightsOrganization = null; newUser.PerformingRightsOrganizationId = proId; newUser.Publisher = null; newUser.PublisherId = publisherId; newUser.RecordLabel = null; newUser.RecordLabelId = recordLabelId; _dbContext.Users.Add(newUser); _dbContext.SaveChanges(); invitation.CreatedUser = null; invitation.CreatedUserId = newUser.Id; invitation.AcceptedOn = DateTime.UtcNow; _dbContext.SaveChanges(); invitation.CreatedUser = newUser; if (artistId.HasValue) { var artist = _dbContext.Artists.Single(a => a.Id == artistId.Value); if (invitation.Roles.HasFlag(SystemUserRoles.ArtistMember)) { var artistMember = new ArtistMember { Artist = artist, Member = newPerson, StartedOn = DateTime.Today }; var addArtistMemberResult = _addArtistMember.DoTask(artistMember); if (!addArtistMemberResult.Success) { throw addArtistMemberResult.Exception; } } else if (invitation.Roles.HasFlag(SystemUserRoles.ArtistManager)) { var artistManager = new ArtistManager { Artist = artist, Manager = newPerson, StartedOn = DateTime.Today }; var addArtistManagerResult = _addArtistManager.DoTask(artistManager); if (!addArtistManagerResult.Success) { throw addArtistManagerResult.Exception; } } } newUser.Person = newPerson; newUser.PerformingRightsOrganization = proId > 0 ? _dbContext.PerformingRightsOrganizations.Where(p => p.Id == proId) .Include(p => p.Country) .SingleOrDefault() : null; newUser.Publisher = publisherId > 0 ? _dbContext.Publishers.Where(p => p.Id == publisherId) .Include(p => p.Address).ThenInclude(a => a.Country) .SingleOrDefault() : null; newUser.RecordLabel = recordLabelId > 0 ? _dbContext.RecordLabels.Where(l => l.Id == recordLabelId) .Include(p => p.Address).ThenInclude(a => a.Country) .SingleOrDefault() : null; userInvitation.LoginLink = ApplicationSettings.Web.Domain + WebRoutes.Login; var installation = _getInstallationTask.DoTask(null).Data; var emailTemplate = EmailTemplate($"{invitation.Type}Welcome.html"); var body = ReplaceTokens(emailTemplate, invitation, installation); var subject = ReplaceTokens(_htmlService.GetTitle(emailTemplate), invitation, installation); _emailService.SendEmail(newUser.Person.FirstAndLastName, newUser.Person.Email, installation.Name, ApplicationSettings.Mail.From, subject, body); return(new TaskResult <User>(newUser)); } catch (Exception e) { return(new TaskResult <User>(new TaskException(e))); } }