From d915e9384f326bb1df576e709212623c9615e9d2 Mon Sep 17 00:00:00 2001 From: joan vicens Date: Tue, 27 Jun 2023 17:11:24 +0200 Subject: [PATCH] wip --- ...0230627120414-create-fuzzy-search-table.js | 9 ++++- .../fuzzy-search/fuzzy-search.controller.ts | 35 +++++++++++++++++++ .../fuzzy-search/fuzzy-search.module.ts | 3 +- .../fuzzy-search/fuzzy-search.usecase.ts | 12 +++++-- src/modules/fuzzy-search/look-up.model.ts | 2 +- .../fuzzy-search/look-up.repository.ts | 14 ++++++-- 6 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 src/modules/fuzzy-search/fuzzy-search.controller.ts diff --git a/migrations/20230627120414-create-fuzzy-search-table.js b/migrations/20230627120414-create-fuzzy-search-table.js index bfe63f701..45c6e14c4 100644 --- a/migrations/20230627120414-create-fuzzy-search-table.js +++ b/migrations/20230627120414-create-fuzzy-search-table.js @@ -17,7 +17,14 @@ module.exports = { user_uuid: { type: Sequelize.STRING(36), allowNull: false, - references: { model: 'users', key: 'uuid' }, + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, }, }); }, diff --git a/src/modules/fuzzy-search/fuzzy-search.controller.ts b/src/modules/fuzzy-search/fuzzy-search.controller.ts new file mode 100644 index 000000000..df00a32ee --- /dev/null +++ b/src/modules/fuzzy-search/fuzzy-search.controller.ts @@ -0,0 +1,35 @@ +import { Body, Controller, Get, Param, Put } from '@nestjs/common'; +import { FuzzySearchUseCases } from './fuzzy-search.usecase'; +import { ApiProperty, ApiTags } from '@nestjs/swagger'; +import { Public } from '../auth/decorators/public.decorator'; + +class RequestBody { + @ApiProperty() fileId: string; + @ApiProperty() name: string; + @ApiProperty() userId: string; +} + +@ApiTags('Fuzzy') +@Controller('fuzzy') +export class FuzzySearchController { + constructor(private readonly usecases: FuzzySearchUseCases) {} + + @Get('/:userId/:search') + @Public() + async fuzzySearch( + @Param('userId') userId: string, + @Param('serach') search: string, + ) { + return await this.usecases.fuzzySearch(userId, search); + } + + @Put('/') + @Public() + async add(@Body() content: RequestBody) { + await this.usecases.manualInsert({ + id: content.fileId, + userUuid: content.userId, + name: content.name, + }); + } +} diff --git a/src/modules/fuzzy-search/fuzzy-search.module.ts b/src/modules/fuzzy-search/fuzzy-search.module.ts index fc5f2e122..473293d97 100644 --- a/src/modules/fuzzy-search/fuzzy-search.module.ts +++ b/src/modules/fuzzy-search/fuzzy-search.module.ts @@ -3,10 +3,11 @@ import { SequelizeModule } from '@nestjs/sequelize'; import { LookUpModel } from './look-up.model'; import { SequelizeLookUpRepository } from './look-up.repository'; import { FuzzySearchUseCases } from './fuzzy-search.usecase'; +import { FuzzySearchController } from './fuzzy-search.controller'; @Module({ imports: [SequelizeModule.forFeature([LookUpModel])], - controllers: [], + controllers: [FuzzySearchController], providers: [ { provide: 'Look_Up_Repository', diff --git a/src/modules/fuzzy-search/fuzzy-search.usecase.ts b/src/modules/fuzzy-search/fuzzy-search.usecase.ts index 729abd292..18dd772ef 100644 --- a/src/modules/fuzzy-search/fuzzy-search.usecase.ts +++ b/src/modules/fuzzy-search/fuzzy-search.usecase.ts @@ -1,6 +1,6 @@ import { User } from '../user/user.domain'; import { LookUpRepository } from './look-up.repository'; -import { LookUp } from './look-up.domain'; +import { LookUp, LookUpAttributes } from './look-up.domain'; import { Inject } from '@nestjs/common'; export class FuzzySearchUseCases { constructor( @@ -8,7 +8,13 @@ export class FuzzySearchUseCases { private repository: LookUpRepository, ) {} - async fuzzySearch(user: User, text: string): Promise> { - return []; + async fuzzySearch(user: string, text: string): Promise> { + return this.repository.search(user, text); + } + + async manualInsert(att: LookUpAttributes) { + const lookupEntry = LookUp.build(att); + + await this.repository.instert(lookupEntry); } } diff --git a/src/modules/fuzzy-search/look-up.model.ts b/src/modules/fuzzy-search/look-up.model.ts index 4e991e576..4281a7eb6 100644 --- a/src/modules/fuzzy-search/look-up.model.ts +++ b/src/modules/fuzzy-search/look-up.model.ts @@ -3,7 +3,7 @@ import { LookUpAttributes } from './look-up.domain'; @Table({ underscored: true, - tableName: 'fuzzy-search', + tableName: 'fuzzy_search', }) export class LookUpModel extends Model implements LookUpAttributes { @PrimaryKey diff --git a/src/modules/fuzzy-search/look-up.repository.ts b/src/modules/fuzzy-search/look-up.repository.ts index 58bc98498..20199b3e9 100644 --- a/src/modules/fuzzy-search/look-up.repository.ts +++ b/src/modules/fuzzy-search/look-up.repository.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { LookUpAttributes } from './look-up.domain'; +import { LookUp, LookUpAttributes } from './look-up.domain'; import { InjectModel } from '@nestjs/sequelize'; import { LookUpModel } from './look-up.model'; import { fn } from 'sequelize'; @@ -10,6 +10,8 @@ export interface LookUpRepository { userUuid: UserAttributes['uuid'], partialName: string, ): Promise>; + + instert(entry: LookUp): Promise; } @Injectable() @@ -26,10 +28,18 @@ export class SequelizeLookUpRepository implements LookUpRepository { const items = await this.model.findAll({ where: { userUuid, - name: fn('to_tsvector', partialName), + name: fn('to_tsquery', partialName), }, }); return items; } + + async instert(entry: LookUp): Promise { + await this.model.create({ + id: entry.id, + name: entry.name, + userUuid: entry.userUuid, + }); + } }