public IActionResult LoadPhoto(IFormFile files)
        {
            try
            {
                // из запроса получаем логин
                var userLogin = this.HttpContext.User.Identity.Name;

                // проверяем что пришел именно файл изображение
                CheckValidImageType(files);

                // обновляем фото в БД
                var isSuccess = _accountService.UpdatePhoto(files, userLogin);
                if (!isSuccess)
                {
                    throw new InvalidOperationException($"Ошибка загрузки файла в БД!");
                }



                return(Json(RespоnceManager.CreateSucces("Фото профиля успешно обновлено")));
            }
            catch (Exception ex)
            {
                return(Json(RespоnceManager.CreateError(ex)));
            }
        }
        public async Task <Responce> TryCreateAccountAsync(InputAccount inputAccount)
        {
            var login = inputAccount.Login;

            try
            {
                var typeAccount = await postgres.TypeAccount.FirstOrDefaultAsync(w => w.NameTtype == inputAccount.Role);

                if (LoginExists(login))
                {
                    throw new InvalidOperationException($"Пользователь с логином {login} уже существует!");
                }

                if (typeAccount == null)
                {
                    throw new InvalidOperationException($"Тип учетной записи {inputAccount.Role} не найден в базе даных!");
                }

                var newAccount = AccountBulder.Create(typeAccount.IdTypeAccount, inputAccount);
                postgres.Account.Add(newAccount);
                await postgres.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                return(RespоnceManager.CreateError(ex));
            }
            return(RespоnceManager.CreateSucces($"Пользователь {login} успешно создан!"));
        }
 public JsonResult SignUp(Account newAccount)
 {
     try
     {
         auth.AddAccount(newAccount);
         return(Json(RespоnceManager.CreateSucces("Аккаунт успешно добавлен!")));
     }
     catch (Exception ex)
     {
         // в случае неудачи возвращаем причину
         return(Json(RespоnceManager.CreateError(ex)));
     }
 }
 public Responce GetAlbum(int idAlbum)
 {
     try
     {
         if (!AlbumExists(idAlbum))
         {
             throw new InvalidOperationException($"Ошибка! В базе данных не найден альбом с id {idAlbum}!");
         }
         var postgresAlbum = postgres.Album.FindAsync(idAlbum).Result;
         var outputAlbum   = bulder.BuldAlbum(postgresAlbum);
         outputAlbum.Tracks = bulder.GetListTracksAsync(postgresAlbum).Result;
         return(RespоnceManager.CreateSucces(outputAlbum));
     }
     catch (Exception ex)
     {
         return(RespоnceManager.CreateError(ex.Message));
     }
 }
        public async Task <Responce> GetAlbumListAsync()
        {
            List <OutputAlbum> albumsRespone = new List <OutputAlbum>();

            try
            {
                var postgeresAlbums = await postgres.Album.ToListAsync();

                foreach (var album in postgeresAlbums)
                {
                    var outputAlbum = bulder.BuldAlbum(album);
                    albumsRespone.Add(outputAlbum);
                }
                return(RespоnceManager.CreateSucces(albumsRespone));
            }
            catch (Exception ex)
            {
                return(RespоnceManager.CreateError(ex.Message));
            }
        }
        public Responce GetToken(InputAccount inputAccount)
        {
            var    login = inputAccount.Login;
            string access_token;

            try
            {
                if (!AccountExists(inputAccount))
                {
                    throw new InvalidOperationException("Invalid username or password!");
                }

                JWTManager tokenManager = new JWTManager(Configuration);
                var        typeAccount  = GetTypeAccount(login);
                access_token = tokenManager.BuldToken(typeAccount, login);
            }
            catch (Exception ex)
            {
                return(RespоnceManager.CreateError(ex));
            }
            return(RespоnceManager.CreateSucces(access_token));
        }
        public JsonResult ChangePassword(Account account)
        {
            try
            {
                // из запроса получаем логин
                var login = this.HttpContext.User.Identity.Name;

                // в полученный класс аккаунт добавляем полученный логин
                account.Login = login;

                // проверяем что логин и пароль верны
                _accountService.CheckPasswordCorrect(account);

                // меняем пароль
                var result = _accountService.ChangePassword(account);

                return(Json(RespоnceManager.CreateSucces(result)));
            }
            catch (Exception ex)
            {
                // в случае неудачи возвращаем причину
                return(Json(RespоnceManager.CreateError(ex)));
            }
        }
        public async Task <JsonResult> SignInAsync(Account inputAccount)
        {
            try
            {
                // если такой аккаунт существует, то
                auth.CheckAccountExist(inputAccount);

                // аутентификация
                await Authenticate(inputAccount.Login);

                //создаем ссылку, и отправляем ее, чтобы потом зайти по ней

                string scheme       = Url.ActionContext.HttpContext.Request.Scheme;
                var    callbackLink = Url.Action("Main", "TutorMenu", null, scheme);

                // возвращаем результат
                return(Json(RespоnceManager.CreateSucces(callbackLink)));
            }
            catch (Exception ex)
            {
                // в случае неудачи возвращаем причину
                return(Json(RespоnceManager.CreateError(ex)));
            }
        }
        public JsonResult Continue(InputUserAnswer userAnswer)
        {
            var continueModel = _tutorService.Continue(this.HttpContext, userAnswer);

            return(Json(RespоnceManager.CreateSucces(continueModel)));
        }