- Создание простого сервиса на 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
- поиск в текстовом поле таблице базы данных
- поиск должен быть последовательный - то есть данные должны появляться постепенно
- поиск должен проходить по маске - РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ (бд это не поддерживает по умолчанию)
- поиск должен быть в нескольких потоках.
- поле в базе данных должно быть как полнотекстовый индекс (использовать его для поиска)
- angular должен быть как SPA проект
- иметь возможность поиска по колонкам
- иметь возможность фильтрации по колонкам
- должна быть аутентификация (условная)
- должна быть обработка ошибок
- завернуть все это в Docker
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 в контейнер.