Esempio n. 1
0
        public Task Handle(UsersCreatedEvent message, CancellationToken cancellationToken)
        {
            // 恭喜您,注册成功,欢迎加入我们。

            return(Task.CompletedTask);
        }
Esempio n. 2
0
        public Task <Unit> Handle(CreateUsersCommand message, CancellationToken cancellationToken)
        {
            // 命令验证
            if (!message.IsValid())
            {
                // 错误信息收集
                NotifyValidationErrors(message);
                // 返回,结束当前线程
                return(Task.FromResult(new Unit()));
            }

            var ip = string.Empty;

            SystemHelper.GetLocalIP(ref ip);

            // 实例化领域模型,这里才真正的用到了领域模型
            // 注意这里是通过构造函数方法实现
            var address = new Address(message.Province, message.City, message.County, message.Street, message.Detailed);

            #region
            var user = new Users(
                Guid.NewGuid(),
                message.Type,
                message.MtypeId,
                message.NickName,
                message.Surname,
                message.Name,
                message.RealName,
                message.Phone,
                message.Email,
                message.BirthDate,
                message.Sex,
                message.Age,
                message.Gravatar,
                message.Avatar,
                message.Motto,
                message.Bio,
                message.Idcard,
                message.Major,
                message.Polity,
                message.NowState,
                message.State,
                address,
                message.Company,
                message.Website,
                message.Weibo,
                message.Blog,
                message.Url,
                DateTime.Now, //message.RegisterTime,
                ip,           //message.RegisterIp,
                DateTime.Now, //message.LastLoginTime,
                ip,           //message.LastLoginIp,
                DateTime.Now, //message.LastModifiedTime,
                ip,           //message.LastModifiedIp,
                message.UserAuths,
                message.Sort
                );
            #endregion

            #region 检查
            //// 判断用户名是否存在
            //// 这些业务逻辑,当然要在领域层中(领域命令处理程序中)进行处理
            //var existingUsers = _UsersRepository.GetByName(users.Name);
            //if (existingUsers != null && existingUsers.Id != users.Id)
            //{
            //    //引发错误事件
            //    Bus.RaiseEvent(new DomainNotification("", "该用户名已经被使用!"));
            //    return Task.FromResult(new Unit());
            //}
            // 判断邮箱是否存在
            var existingUsers = _UsersRepository.GetByEmail(user.Email);
            if (existingUsers != null && existingUsers.Id != user.Id)
            {
                if (!existingUsers.Equals(user))
                {
                    Bus.RaiseEvent(new DomainNotification("", "该邮箱已经被使用!"));
                    return(Task.FromResult(new Unit()));
                }
            }
            #endregion

            var emailcompose = user.Email.Split("@");
            var password     = emailcompose.Length > 0 ? $"{emailcompose[0]}*" : "agooday*";
            user.UserAuths = user.UserAuths != null && user.UserAuths.Count > 0 ? user.UserAuths : new List <UserAuths>()
            {
                new UserAuths(Guid.NewGuid())
                {
                    UserId           = user.Id,
                    IdentityType     = "email",
                    Identifier       = user.Email,
                    Credential       = password.ToMd5(),
                    State            = 1,
                    AuthTime         = DateTime.Now,
                    LastModifiedTime = DateTime.Now,
                    Verified         = true,
                }
            };

            // 持久化
            _UsersRepository.Add(user);

            #region
            //var emailcompose = user.Email.Split("@");
            //var password = emailcompose.Length > 0 ? $"{emailcompose[0]}*" : "agooday*";
            //var userAuths = user.UserAuths ?? new List<UserAuths>() {
            //    new UserAuths(Guid.NewGuid())
            //    {
            //        UserId = user.Id,
            //        IdentityType = "email",
            //        Identifier = user.Email,
            //        Credential = password.ToMd5(),
            //        State = 1,
            //        AuthTime = DateTime.Now,
            //        LastModifiedTime = DateTime.Now,
            //        Verified = true,
            //    }
            //};
            //foreach (var item in userAuths)
            //{
            //    item.UserId = user.Id;
            //    _UserAuthsRepository.Add(item);
            //}
            #endregion

            // 统一提交
            if (Commit())
            {
                // 提交成功后,这里需要发布领域事件
                // 比如欢迎用户注册邮件呀,短信呀等
                #region
                var userscreatedevent = new UsersCreatedEvent(
                    user.Id,
                    user.Type,
                    user.MtypeId,
                    user.NickName,
                    user.Surname,
                    user.Name,
                    user.RealName,
                    user.Phone,
                    user.Email,
                    user.BirthDate,
                    user.Sex,
                    user.Age,
                    user.Gravatar,
                    user.Avatar,
                    user.Motto,
                    user.Bio,
                    user.Idcard,
                    user.Major,
                    user.Polity,
                    user.NowState,
                    user.State,
                    user.Address.Province, user.Address.City, user.Address.County, user.Address.Street, user.Address.Detailed,
                    user.Company,
                    user.Website,
                    user.Weibo,
                    user.Blog,
                    user.Url,
                    user.RegisterTime,
                    user.RegisterIp,
                    user.LastLoginTime,
                    user.LastLoginIp,
                    user.LastModifiedTime,
                    user.LastModifiedIp,
                    user.UserAuths,
                    user.Sort
                    );
                #endregion
                Bus.RaiseEvent(userscreatedevent);
            }

            return(Task.FromResult(new Unit()));
        }