private async Task <string> ResumeSession(T1000Context db, string dbsid)
        {
            try
            {
                var result = await db.Database.SqlQuery <string>($"SELECT armulcheck.db_session_resume('{dbsid}')").FirstOrDefaultAsync();

                switch (result)
                {
                case "-1":
                case "-1 Сессия не существует или не активна.":
                    throw new PublicException("Пользователь не авторизован в T1000");

                case "-2":
                case "-2 Время сеанса истекло":
                    throw new SessionExpiredException("Время сессии истекло");

                case "-3":
                    throw new PublicException("Нет прав доступа");

                default:
                    return(result);
                }
            }
            catch (SessionExpiredException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new PublicException("Ошибка продления сессии", ex);
            }
        }
        private async Task <SearchByInnResult> SearchCompanyNameByInn(T1000Context db, string inn, string dbsid, int resumeSessionTriesLeft)
        {
            var newDbsid = dbsid;

            var result = await db.Database.SqlQuery <string>($"SELECT armulcheck.proc_spr_ul_check_inn_wso('{dbsid}','{inn}')").FirstOrDefaultAsync() ?? "";

            switch (result)
            {
            case "-1":
            case "-1 Сессия не существует или не активна.":
                throw new PublicException("Пользователь не авторизован в T1000");

            case "-2":
            case "-2 Время сеанса истекло":
                if (resumeSessionTriesLeft > 0)
                {
                    newDbsid = await ResumeSession(db, dbsid);

                    return(await SearchCompanyNameByInn(db, inn, dbsid, resumeSessionTriesLeft - 1));
                }
                throw new SessionExpiredException("Не удалось продлить сессию");

            case "-3":
                throw new PublicException("Нет прав доступа");

            default:
                return(new SearchByInnResult {
                    CompanyName = result,
                    NewDbsid = newDbsid
                });
            }
        }
 public async Task Logout(string dbsid)
 {
     using (var db = new T1000Context())
     {
         await db.Database.ExecuteSqlCommandAsync($"SELECT armulcheck.sp_logout('{dbsid}')");
     }
 }
 public async Task <SearchByInnResult> SearchCompanyNameByInnAsync(string inn, string dbsid)
 {
     using (var db = new T1000Context())
     {
         return(await SearchCompanyNameByInn(db, inn, dbsid, ResumeSessionMaxTries));
     }
 }
 public async Task <LoginResultDomain> Login(string login, string password, string userarm)
 {
     using (var db = new T1000Context())
     {
         return(await db.Database.SqlQuery <LoginResultDomain>($"SELECT dbsId, userId FROM armulcheck.sp_login_wso('{login}','{password}','{userarm}') LIMIT 1").FirstOrDefaultAsync());
     }
 }