Skip to content

artemgorbatuk/Task-Sequential-Search

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Использование шаблона long-pooling для получения информации из таблицы в базе данных

Описание задачи

  • Создание простого сервиса на c#, который осуществляет последовательный поиск в текстовом поле таблице базы данных.
  • Создание тестового клиента на JS (Angular, React.js, Vue.js на выбор) который выводит найденные совпадения

Используемый стек

  • Сервер БД MS SQL Server 17 и выше
  • Web сервер ASP NET 7 и выше
  • Angular, React.js, Vue.js на выбор

Требования к сервису

  • Сервис должен предоставлять два метода
    • post: /login Имя пользователя и пароль и вернуть true если admin/admin
    • get: /search должен принять параметры поиска и вернуть список результатов в реальном времени:
      • mask - входящий параметр, маска поиска в формате регулярного выражения
      • result - результатом должен быть список ID и TextData записей в таблицы совпадений, возвращаемых сразу после их обнаружения. Не ждите получения всех результатов, чтобы отправить их обратно во внешний интерфейс. Поиск должен продолжаться, и в конечном итоге все результаты должны быть возвращены.
  • Сервис должен быть оптимизирован по скорости. Используйте несколько потоков для перечисления записей и сканирования текста. Приветствуется любая оптимизация. Выбор инструментария за вами.
  • Можно добавлять нужные вам дополнительные объекты (полнотекстовый индекс, процедуры, функции, временные таблицы и т.д. на стороне СУБД)
  • Предусмотрите методы обработки ошибок в местах, где по вашему мнению они могут возникнуть.
  • Будет плюсом использование Clean Code concepts, SOLID, DRY.

Требования к клиенту

  • Клиентская часть должна включать в себя средство отображения данных в таблице, с полями поиска по колонкам, фильтрации и сортировки, простенький сервис авторизации.

Структура данных

create table TestTable(
ID int primary key identity(1,1)
,TextData nvarchar(128) not null);
go
declare @totalAdded int = 0
while @totalAdded < 100000
begin
insert into TestTable (TextData)
values (
replace(newID(), '-', '')
+ replace(newID(), '-', '')
+ replace(newID(), '-', '')
+ replace(newID(), '-', ''))
set @totalAdded = @totalAdded + 1
end

Мои комментарии к задаче

Текст задания в упрощенном виде

  1. поиск в текстовом поле таблице базы данных
  2. поиск должен быть последовательный - то есть данные должны появляться постепенно
  3. поиск должен проходить по маске - РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ (бд это не поддерживает по умолчанию)
  4. поиск должен быть в нескольких потоках.
  5. поле в базе данных должно быть как полнотекстовый индекс (использовать его для поиска)
  6. angular должен быть как SPA проект
  7. иметь возможность поиска по колонкам
  8. иметь возможность фильтрации по колонкам
  9. должна быть аутентификация (условная)
  10. должна быть обработка ошибок
  11. завернуть все это в Docker

Запуск docker-compose

repos\Task-Sequential-Search\Backend> docker-compose -f Api/docker-compose.yml up -d

нужно чтоб развернулись минимум 3 из 4 контейнеров : webapi , mssql , mssql-migrations , 4ый mssql-functions пока не в рабочем состоянии

Запуск проекта

проект работает и можно получать данные

  • поиск в текстовом поле таблице базы данных
  • поиск должен быть последовательный - то есть данные должны появляться постепенно
  • поиск должен проходить по маске - РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ (бд это не поддерживает по умолчанию)
  • поиск должен быть в нескольких потоках.
    WRN! сейчас используется IAsynEnumirable который отвечает за создание новых потоков при необходимости.
    Нужно ли работать c ThreadPool из задачи для меня не ясно. Тут по хорошему нужны уточнения.
  • поле в базе данных должно быть как полнотекстовый индекс
    WRN! индекс создан, но вот работает ли это, как с ним работать, нужно прочесть доп документацию по нему.
  • angular должен быть как SPA проект
    WRN! основные страницы и переходы созданы, но требуется поработать с HTML и CSS ,
    есть проблема толи с main , толи с app. пока не дошли руки разобратся почему выделяется блок сверху на других страницах.
    предположение есть. нужно просто посмотреть и решить вопрос.
  • иметь возможность поиска по колонкам
  • иметь возможность фильтрации по колонкам
  • должна быть аутентификация (условная)
    WRN! добавлена страница и ввод логина и пароля.
    нужно доделать чтоб выдавался jwt token и можно было разлогиниться не имея возможность искать текст.
  • должна быть обработка ошибок.
    WRN! Создан RequestResult и MessageType. Требуется вернуться к задаче.
  • завернуть все это в Docker
    WRN! Осталось 2 задачи : решить проблему с добавлением SQL CLR на SQL Server и упаковать Client в контейнер.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published