示例#1
0
        protected async Task <ServiceResult> SetNameAsync(Material material, string name)
        {
            if (User.IsInRole(RoleNames.Admin))
            {
                if (string.IsNullOrWhiteSpace(name))
                {
                    material.Name = null;
                }
                else
                {
                    if (!materialsManager.IsNameValid(name))
                    {
                        return(ServiceResult.BadResult(new ErrorView("MaterialNameNotValid", "Invalid material name")));
                    }

                    if (name != material.Name && await materialsManager.IsNameInDb(name))
                    {
                        return(ServiceResult.BadResult(ErrorView.SoftError("MaterialNameAlreadyUsed",
                                                                           "This material name is already used")));
                    }

                    material.Name = name;
                }
            }

            return(ServiceResult.OkResult());
        }
        public async Task <ServiceResult> CategoryUp(string name)
        {
            using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                var category = await db.Categories.FirstOrDefaultAsync(x => x.Name == name);

                if (category == null)
                {
                    return(ServiceResult.BadResult());
                }

                var category2 = await db.Categories
                                .Where(x => x.ParentId == category.ParentId && x.SortNumber < category.SortNumber)
                                .OrderByDescending(x => x.SortNumber).FirstOrDefaultAsync();

                if (category2 == null)
                {
                    return(ServiceResult.BadResult());
                }

                await db.Categories.Where(x => x.Id == category.Id).Set(x => x.SortNumber, category2.SortNumber)
                .UpdateAsync();

                await db.Categories.Where(x => x.Id == category2.Id).Set(x => x.SortNumber, category.SortNumber)
                .UpdateAsync();

                transaction.Complete();
            }

            return(ServiceResult.OkResult());
        }
示例#3
0
        public async Task <ServiceResult> MaterialDownAsync(int id)
        {
            var material = await db.Materials.Where(x => !x.IsDeleted).FirstOrDefaultAsync(x => x.Id == id);

            if (material == null)
            {
                return(ServiceResult.BadResult());
            }

            var material2 = await db.Materials
                            .Where(x => !x.IsDeleted && x.CategoryId == material.CategoryId && x.SortNumber < material.SortNumber)
                            .OrderByDescending(x => x.SortNumber).FirstOrDefaultAsync();

            if (material2 == null)
            {
                return(ServiceResult.BadResult());
            }

            db.BeginTransaction();
            await db.Materials.Where(x => x.Id == material.Id).Set(x => x.SortNumber, material2.SortNumber)
            .UpdateAsync();

            await db.Materials.Where(x => x.Id == material2.Id).Set(x => x.SortNumber, material.SortNumber)
            .UpdateAsync();

            db.CommitTransaction();

            return(ServiceResult.OkResult());
        }
示例#4
0
        public virtual async Task <ServiceResult> RegisterAsync(NewUserArgs model)
        {
            var user = new User
            {
                UserName = model.UserName,
                Email    = model.Email,
                Avatar   = User.DefaultAvatar,
                Photo    = User.DefaultAvatar
            };

            using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                IdentityResult result = await userManager.CreateAsync(user, model.Password);

                await db.Users.Where(x => x.Id == user.Id).Set(x => x.Link, x => x.Id.ToString()).UpdateAsync();

                if (!result.Succeeded)
                {
                    return(ServiceResult.BadResult(new ErrorView(result.Errors)));
                }

                logger.LogInformation($"New user registered (id: {user.Id})");

                if (!user.EmailConfirmed)
                {
                    // Send email confirmation email
                    var confirmToken = await userManager.GenerateEmailConfirmationTokenAsync(user);

                    var emailConfirmUrl = globalOptions.SiteApi.AppendPathSegments("Auth", "ConfirmRegister")
                                          .SetQueryParams(new { uid = user.Id, token = confirmToken });

                    try
                    {
                        await EmailSenderService.SendEmailAsync(model.Email, "Please confirm your account",
                                                                $"Please confirm your account by clicking this <a href=\"{emailConfirmUrl}\">link</a>."
                                                                );
                    }
                    catch (Exception exception)
                    {
                        return(ServiceResult.BadResult(
                                   new ErrorView("EmailSendError", "Can not send email", exception)));
                    }


                    logger.LogInformation($"Sent email confirmation email (id: {user.Id})");
                }

                logger.LogInformation($"User logged in (id: {user.Id})");

                transaction.Complete();

                return(ServiceResult.OkResult());
            }
        }
示例#5
0
        public virtual async Task <ServiceResult> ResetPasswordSendEmailAsync(User user)
        {
            var resetToken = await userManager.GeneratePasswordResetTokenAsync(user);

            var resetPasswordUrl = globalOptions.SiteApi
                                   .AppendPathSegments("Account", "ResetPasswordShowClientDialog")
                                   .SetQueryParams(new { uid = user.Id, token = resetToken });

            try
            {
                await EmailSenderService.SendEmailAsync(user.Email, "You can reset your password",
                                                        $"Reset password by clicking this <a href=\"{resetPasswordUrl}\">link</a>."
                                                        );
            }
            catch (Exception)
            {
                ServiceResult.BadResult(new ErrorView("EmailSendError", "Server error. Can not send email."));
            }

            return(ServiceResult.OkResult());
        }