Beispiel #1
0
            public async Task <Unit> Handle(DeleteEventPartnerCommand request, CancellationToken cancellationToken)
            {
                if ((await DataContext.EventPartners.AsNoTracking().FirstOrDefaultAsync(m => m.Id == request.Id, cancellationToken)) == null)
                {
                    throw new EntityNotFoundException(nameof(EventPartner), request.Id);
                }

                var entity = new EventPartner
                {
                    Id         = request.Id,
                    RowVersion = request.RowVersion
                };

                try
                {
                    DataContext.EventPartners.Remove(entity);
                    await DataContext.SaveChangesAsync(cancellationToken);

                    return(Unit.Value);
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    throw ex;
                }
            }
        public async Task <IActionResult> PutEventPartner(EventPartner eventPartner)
        {
            // Make sure the person adding the user is either an admin or already a user for the partner
            var currentUser = await userRepository.GetUserByNameIdentifier(User.FindFirst(ClaimTypes.NameIdentifier).Value).ConfigureAwait(false);

            if (!currentUser.IsSiteAdmin)
            {
                var currentUserPartner = partnerUserRepository.GetPartnerUsers().FirstOrDefault(pu => pu.PartnerId == eventPartner.PartnerId && pu.UserId == currentUser.Id);

                if (currentUserPartner == null)
                {
                    return(Forbid());
                }
            }

            eventPartner.LastUpdatedByUserId = currentUser.Id;

            var updatedEventPartner = await eventPartnerRepository.UpdateEventPartner(eventPartner).ConfigureAwait(false);

            var user = await userRepository.GetUserByInternalId(eventPartner.CreatedByUserId).ConfigureAwait(false);

            // Notify Admins that a partner request has been responded to
            var subject     = "A partner request for an event has been responded to!";
            var message     = $"A partner request for an event has been responded to for event {eventPartner.EventId}!";
            var htmlMessage = $"A partner request for an event has been responded to for event {eventPartner.EventId}!";

            var recipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = Constants.TrashMobEmailName, Email = Constants.TrashMobEmailAddress
                }
            };

            await emailManager.SendSystemEmail(subject, message, htmlMessage, recipients, CancellationToken.None).ConfigureAwait(false);

            var partnerMessage     = emailManager.GetEmailTemplate(NotificationTypeEnum.EventPartnerResponse.ToString());
            var partnerHtmlMessage = emailManager.GetHtmlEmailTemplate(NotificationTypeEnum.EventPartnerResponse.ToString());
            var partnerSubject     = "A TrashMob.eco Partner has responded to your request!";

            partnerMessage     = partnerMessage.Replace("{UserName}", user.UserName);
            partnerHtmlMessage = partnerHtmlMessage.Replace("{UserName}", user.UserName);

            var dashboardLink = string.Format("https://www.trashmob.eco/manageeventdashboard/{0}", eventPartner.EventId);

            partnerMessage     = partnerMessage.Replace("{PartnerResponseUrl}", dashboardLink);
            partnerHtmlMessage = partnerHtmlMessage.Replace("{PartnerResponseUrl}", dashboardLink);

            var partnerRecipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = user.UserName, Email = user.Email
                },
            };

            await emailManager.SendSystemEmail(partnerSubject, partnerMessage, partnerHtmlMessage, partnerRecipients, CancellationToken.None).ConfigureAwait(false);

            return(Ok(updatedEventPartner));
        }
        public async Task <IActionResult> PostEventPartner(EventPartner eventPartner)
        {
            var currentUser = await userRepository.GetUserByNameIdentifier(User.FindFirst(ClaimTypes.NameIdentifier).Value).ConfigureAwait(false);

            if (currentUser == null || !ValidateUser(currentUser.NameIdentifier))
            {
                return(Forbid());
            }

            eventPartner.CreatedByUserId     = currentUser.Id;
            eventPartner.LastUpdatedByUserId = currentUser.Id;
            eventPartner.CreatedDate         = DateTimeOffset.UtcNow;
            eventPartner.LastUpdatedDate     = DateTimeOffset.UtcNow;
            await eventPartnerRepository.AddEventPartner(eventPartner).ConfigureAwait(false);

            var partnerLocation = partnerLocationRepository.GetPartnerLocations().FirstOrDefault(pl => pl.Id == eventPartner.PartnerLocationId);

            // Notify Admins that a new partner request has been made
            var subject     = "A New Partner Request for an Event has been made!";
            var message     = $"A new partner request for an event has been made for event {eventPartner.EventId}!";
            var htmlMessage = $"A new partner request for an event has been made for event {eventPartner.EventId}!";

            var recipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = Constants.TrashMobEmailName, Email = Constants.TrashMobEmailAddress
                }
            };

            await emailManager.SendSystemEmail(subject, message, htmlMessage, recipients, CancellationToken.None).ConfigureAwait(false);

            // Send welcome email to new User
            var partnerMessage     = emailManager.GetEmailTemplate(NotificationTypeEnum.EventPartnerRequest.ToString());
            var htmlPartnerMessage = emailManager.GetHtmlEmailTemplate(NotificationTypeEnum.EventPartnerRequest.ToString());
            var partnerSubject     = "A TrashMob.eco Event would like to Partner with you!";

            partnerMessage     = partnerMessage.Replace("{PartnerLocationName}", partnerLocation.Name);
            htmlPartnerMessage = htmlPartnerMessage.Replace("{PartnerLocationName}", partnerLocation.Name);

            var partnerRecipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = partnerLocation.Name, Email = partnerLocation.PrimaryEmail
                },
                new EmailAddress {
                    Name = partnerLocation.Name, Email = partnerLocation.SecondaryEmail
                }
            };

            await emailManager.SendSystemEmail(partnerSubject, partnerMessage, htmlPartnerMessage, partnerRecipients, CancellationToken.None).ConfigureAwait(false);

            return(Ok());
        }
Beispiel #4
0
            public async Task <Unit> Handle(CreateEventPartnerCommand request, CancellationToken cancellationToken)
            {
                var entity = new EventPartner
                {
                    EventId   = request.EventId,
                    PartnerId = request.Model.PartnerId
                };

                await DataContext.EventPartners.AddAsync(entity, cancellationToken);

                await DataContext.SaveChangesAsync(cancellationToken);

                return(Unit.Value);
            }
        public async Task <EventPartner> AddEventPartner(EventPartner eventPartner)
        {
            try
            {
                eventPartner.CreatedDate     = DateTimeOffset.UtcNow;
                eventPartner.LastUpdatedDate = DateTimeOffset.UtcNow;
                mobDbContext.EventPartners.Add(eventPartner);
                await mobDbContext.SaveChangesAsync().ConfigureAwait(false);

                return(await mobDbContext.EventPartners.FindAsync(eventPartner.EventId, eventPartner.PartnerId, eventPartner.PartnerLocationId).ConfigureAwait(false));
            }
            catch (DbUpdateException ex)
            {
                if ((ex.InnerException.InnerException is SqlException innerException) && (innerException.Number == 2627 || innerException.Number == 2601))
                {
                    return(null);
                }