public Task <Result <object> > Register(AdvanceRegisterModel model)
        => Result <object> .TryAsync(async() =>
        {
            model.User.Password = _cryptoService.ComputeSha512Hash(model.User.Password);

            var username          = model.User.Firstname.ToCharArray()[0] + "." + model.User.Lastname;
            var duplicateUsername = await _repository.FirstOrDefaultAsNoTrackingAsync <User>(u =>
                                                                                             u.Username == username);
            if (duplicateUsername.Success && duplicateUsername.Data != null)
            {
                username = model.User.Firstname + "." + model.User.Lastname;
            }
            duplicateUsername = await _repository.FirstOrDefaultAsNoTrackingAsync <User>(u =>
                                                                                         u.Username == username);
            if (duplicateUsername.Success && duplicateUsername.Data != null)
            {
                username = model.User.Firstname + "." + model.User.Lastname + new Random(1000).Next();
            }

            var duplicateMobile = await _repository.FirstOrDefaultAsNoTrackingAsync <User>(u =>
                                                                                           u.Mobile == model.User.Mobile);
            if (duplicateMobile.Success && duplicateMobile.Data != null)
            {
                return(Result <object> .Failed(Error.WithData(1000, new[] { "Duplicate Mobile Number " })));
            }

            var duplicateEmail = await _repository.FirstOrDefaultAsNoTrackingAsync <User>(u =>
                                                                                          u.Email == model.User.Email);
            if (duplicateEmail.Success && duplicateEmail.Data != null)
            {
                return(Result <object> .Failed(Error.WithData(1000, new[] { "Duplicate Email Address " })));
            }

            var result = await _repository.FirstOrDefaultAsync <Role>(r => r.Name == "NormalUser",
                                                                      r => r.RoleFeature.Select(rf => rf.Feature.FeaturePermission.Select(fp => fp.Permission)));
            var role = result.Data;

            var id   = Guid.NewGuid();
            var user = new User
            {
                Id           = id,
                Address      = model.User.Address,
                City         = model.User.City,
                Province     = model.User.Province,
                CreationDate = DateTime.Now,
                DateOfBirth  = model.User.DateOfBirth ?? DateTime.Now,
                Email        = model.User.Email,
                Enabled      = true,
                SinNumber    = model.User.SinNumber,
                Firstname    = model.User.Firstname,
                Password     = _cryptoService.ComputeSha512Hash("" + model.User.DateOfBirth.Value.Year),
                PostalCode   = model.User.PostalCode,
                Lastname     = model.User.Lastname,
                Latitude     = model.User.Latitude,
                PoBox        = model.User.PoBox,
                Gender       = model.User.Gender,
                Longtitude   = model.User.Longtitude,
                AvatarId     = model.User.AvatarId,
                Receipt      = model.User.Receipts != null && model.User.Receipts.Any()
                        ? model.User.Receipts.Select(r => new Receipt {
                    BlobId = r, UserId = id, Id = Guid.NewGuid()
                })
                               .ToList()
                        : null,
                Mobile        = model.User.Mobile,
                Role          = role,
                Username      = username,
                MaritalStatus = (byte)MaritalStatus.Single,
            };

            var linkUser = new LinkedUser
            {
                Id           = Guid.NewGuid(),
                FirstUserId  = user.Id,
                SecondUserId = generalDataService.User.Id,
                CreationDate = DateTime.Now,
                RelationType = model.RelationType,
                LinkStatus   = (byte)LinkStatus.Pending
            };

            _repository.Add(user);
            _repository.Add(linkUser);
            await _repository.CommitAsync();

            return(Result <object> .Successful(user.Id));
        });
        public async Task <Result <object> > Register([FromQuery] string placeid, [FromQuery] Guid surveyId,
                                                      AdvanceRegisterModel model)
        {
            var placeDetail = await _placeApi.PlaceDetail(placeid);

            if (placeDetail.Success)
            {
                model.User.Province   = placeDetail.Data.Item1;
                model.User.City       = placeDetail.Data.Item2;
                model.User.PostalCode = placeDetail.Data.Item3;
                model.User.Address    = placeDetail.Data.Item4;
            }


            var register = await _membershipServiceApi.AuthAuthApiService.Register(model);

            if (register.Success)
            {
                var userId     = new Guid(User.Claims.FirstOrDefault(c => c.Type == "Id").Value);
                var usersurvey = await _userSurveyBiz.GetByUserIdAndSurveyId(userId, model.SurveyId);

                if (usersurvey.Success)
                {
                    var userDependentSurvey = new UserDependentSurvey
                    {
                        Id           = Guid.NewGuid(),
                        UserSurveyId = usersurvey.Data.Id,
                        TuitionFee   = model.User.TuitionFee,
                        UserId       = new Guid((string)register.Data)
                    };
                    _repository.Add(userDependentSurvey);
                }


                if (model.User.Assessments != null && model.User.Assessments.Any())
                {
                    var id = Guid.NewGuid();
                    var userAssessmentSurvey = new UserAssessmentSurvey
                    {
                        Id                 = id,
                        UserId             = new Guid((string)register.Data),
                        UserAssessmentBlob = model.User.Assessments.Select(b => new UserAssessmentBlob
                        {
                            Id     = Guid.NewGuid(),
                            BlobId = b,
                            UserAssesmentSurveyId = id
                        }).ToList(),
                        UserSurveyId = usersurvey.Data.Id
                    };
                    _repository.Add(userAssessmentSurvey);
                }

                if (model.User.ExtraFiles != null && model.User.ExtraFiles.Any())
                {
                    var id    = Guid.NewGuid();
                    var blobs = await _repository.ListAsync <Blob>(b => model.User.ExtraFiles.Contains(b.Id));

                    blobs.Data.ToList().ForEach(b => b.Title = "Dependent_ExtraFile_" + b.Title);
                    var userAssessmentSurvey = new UserAssessmentSurvey
                    {
                        Id                 = id,
                        UserId             = new Guid((string)register.Data),
                        UserAssessmentBlob = model.User.ExtraFiles.Select(b => new UserAssessmentBlob
                        {
                            Id     = Guid.NewGuid(),
                            BlobId = b,
                            UserAssesmentSurveyId = id
                        }).ToList(),
                        UserSurveyId = usersurvey.Data.Id
                    };
                    _repository.Add(userAssessmentSurvey);
                    await _repository.CommitAsync();
                }

                await _repository.CommitAsync();


                return(Result <object> .Successful());
            }

            return(Result <object> .Failed(register.Error));
        }
Exemple #3
0
 public Task <Result <object> > Register(AdvanceRegisterModel model)
 => _userBiz.Register(model);