public async Task <IActionResult> Put(Guid id, [FromBody] MemberApiModel memberApi)
        {
            var memberDomain = await _service.UpdateMemberAsync(id, memberApi);

            MemberApiModel memberResult = _mapper.Map <MemberApiModel>(memberDomain);

            return(Ok(memberResult));
        }
        public async Task <IActionResult> Post([FromBody] MemberApiModel memberApi)
        {
            var memberDomain = await _service.CreateMemberAsync(memberApi);

            MemberApiModel memberResult = _mapper.Map <MemberApiModel>(memberDomain);

            return(Ok(memberResult));
        }
        public async Task <IActionResult> Get(Guid id)
        {
            Member memberDomain = await _service.GetMemberAsync(id);

            MemberApiModel member = _mapper.Map <MemberApiModel>(memberDomain);

            return(Ok(member));
        }
Beispiel #4
0
        public async Task <Member> UpdateMemberAsync(Guid id, MemberApiModel memberApi)
        {
            try
            {
                var validationResult = await _validator.ValidateAsync(memberApi);

                if (!validationResult.Errors.Any(x => x.Severity == Severity.Error))
                {
                    var member = await _memberRepository.GetAsync(id);

                    if (member == null)
                    {
                        throw new EntityNotFoundException("No se ha encontrado el usuario", "NotFound");
                    }

                    member.Update(memberApi.FirstName, memberApi.LastName, memberApi.Country, memberApi.PhoneNumber, memberApi.PostCode);

                    if (memberApi.Email != member.Email)
                    {
                        var existMemberWithEmail = await _memberRepository.GetByEmailAsync(memberApi.Email);

                        if (existMemberWithEmail != null)
                        {
                            throw new MemberDomainException($"Ya existe un usuario con el email: '{memberApi.Email}'", "ValidationErrors");
                        }

                        member.UpdateEmail(memberApi.Email);
                    }

                    //Se publican los eventos de dominio en caso por ejemplo, que se quiera notificar al usuario mediante correo o sms que se actualizado la direcciónd e correo electrónico, añadiremos un manejador que haga el envío de la notificación
                    //si quisieramos que este fuese completamente asíncrono, en dicho manejador añadiriamos al bus de servicio o a la cola el envío de dicho mensaje y otro microservicio estaría a
                    //la escucha para realizar el envío
                    await _mediator?.DispatchDomainEventsAsync(member);

                    await _memberRepository.UpdateAsync(member);

                    return(await _memberRepository.GetAsync(memberApi.Id));
                }
                else
                {
                    throw new MemberDomainException(string.Join(";", validationResult.Errors), "ValidationErrors");
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error al actualizar el usuario: {ex.Message}", ex);
                throw;
            }
        }
        public virtual ActionResult EditInfo(MemberApiModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var context = ModelFactory.GetUnitOfWork();
                    var mRepo = ModelFactory.GetRepository<IMemberRepository>(context);
                    Member m = mRepo.GetMemberFromToken(model.Token);

                    try
                    {
                        model.UpdateMember(m);
                        context.Commit();
                    }
                    catch (Exception ex)
                    {
                        _Logger.Error("EditInfo", ex);
                        context.Complete();
                        throw ex;
                    }

                    var newContext = ModelFactory.GetUnitOfWork();
                    mRepo = ModelFactory.GetRepository<IMemberRepository>(newContext);

                    m = mRepo.GetMemberFromToken(model.Token);
                    return new ObjectResult<AuthJson>(m.GetAuthData());
                }
                catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
                {
                    return new ObjectResult<AuthJson>(null, 400, dbEx.GetErrors());
                }
                catch (Exception ex)
                {
                    return new ObjectResult<AuthJson>(null, 400, ex.Message);
                }
            }
            else
            {
                return new ObjectResult<AuthJson>(null, 400, ModelState.GetErrors());
            }
        }
        public virtual ActionResult Register(MemberApiModel formData)
        {
            if (ModelState.IsValid)
            {
                var context = ModelFactory.GetUnitOfWork();
                var mRepo = ModelFactory.GetRepository<IMemberRepository>(context);
                var sendNewAccountMailPass = false;
                var sendNewAccountMail = false;
                try
                {
                    int memberId;

                    var memberData = new MemberMainData
                    {
                        FirstName = formData.FirstName,
                        LastName = formData.LastName,
                        PhoneNumber = formData.PhoneNumber
                    };
                    if (formData.FacebookId != 0)
                    {
                        memberData.Avatar = this.UploadFile(string.Format(MiscHelpers.FaceBookConstants.FacebookProfilePictureUrlPattern, formData.FacebookId), MiscHelpers.ImageSize.MemberAvatar, Member.AvatarFolder);
                    }
                    if (formData.BirthDate > DateTime.MinValue)
                    {
                        memberData.BirthDate = formData.BirthDate;
                    }
                    if (!string.IsNullOrEmpty(formData.FacebookLink))
                    {
                        memberData.Facebook = formData.FacebookLink;
                    }
                    if (!string.IsNullOrEmpty(formData.PhoneNumber))
                    {
                        memberData.PhoneNumber = formData.PhoneNumber;
                    }

                    if (string.IsNullOrEmpty(formData.Password))
                    {
                        sendNewAccountMailPass = _MembershipService.TryCreateAccount(formData.Email, memberData, out memberId);
                    }
                    else
                    {
                        sendNewAccountMail = _MembershipService.TryCreateAccount(formData.Email, formData.Password, memberData, out memberId);
                    }
                    var member = mRepo.Get(memberId);

                    try
                    {
                        object newMemberMail = null;
                        if (sendNewAccountMailPass)
                        {
                            var urlHelper = new UrlHelper(ControllerContext.RequestContext);

                            var newMemberMailContent = string.Format(Worki.Resources.Email.FacebookRegistration.Content,
                                                                    urlHelper.ActionAbsolute(MVC.Dashboard.Profil.Edit()),
                                                                    member.Email,
                                                                    _MembershipService.GetPassword(member.Email, null));

                            newMemberMail = _EmailService.PrepareMessageFromDefault(new MailAddress(member.Email, member.MemberMainData.FirstName),
                                Worki.Resources.Email.Activation.ActivationSubject,
                                WebHelper.RenderEmailToString(member.MemberMainData.FirstName, newMemberMailContent));

                        }
                        if (sendNewAccountMail)
                        {
                            var urlHelper = new UrlHelper(ControllerContext.RequestContext);

                            var newMemberMailContent = string.Format(Worki.Resources.Email.FacebookRegistration.ContentWithoutPass,
                                                                    urlHelper.ActionAbsolute(MVC.Dashboard.Profil.Edit()));

                            newMemberMail = _EmailService.PrepareMessageFromDefault(new MailAddress(member.Email, member.MemberMainData.FirstName),
                                Worki.Resources.Email.Activation.ActivationSubject,
                                WebHelper.RenderEmailToString(member.MemberMainData.FirstName, newMemberMailContent));
                        }
                        context.Commit();

                        if (sendNewAccountMail || sendNewAccountMailPass)
                        {
                            _EmailService.Deliver(newMemberMail);
                        }

                        return new ObjectResult<AuthJson>(ModelHelper.GetAuthData(_MembershipService, formData.Email));
                    }
                    catch (Exception ex)
                    {
                        _Logger.Error(ex.Message);
                        context.Complete();
                        throw ex;
                    }
                }
                catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
                {
                    return new ObjectResult<AuthJson>(null, 400, dbEx.GetErrors());
                }
                catch (Exception ex)
                {
                    _Logger.Error("Create", ex);
                    ModelState.AddModelError("", ex.Message);
                    return new ObjectResult<AuthJson>(null, 400, ex.Message);
                }
            }
            else
            {
                return new ObjectResult<AuthJson>(null, 400, ModelState.GetErrors());
            }
        }