Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
JoanVicens committed Jun 27, 2023
1 parent 280d823 commit d915e93
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 8 deletions.
9 changes: 8 additions & 1 deletion migrations/20230627120414-create-fuzzy-search-table.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},
});
},
Expand Down
35 changes: 35 additions & 0 deletions src/modules/fuzzy-search/fuzzy-search.controller.ts
Original file line number Diff line number Diff line change
@@ -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,
});
}
}
3 changes: 2 additions & 1 deletion src/modules/fuzzy-search/fuzzy-search.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
12 changes: 9 additions & 3 deletions src/modules/fuzzy-search/fuzzy-search.usecase.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
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(
@Inject('Look_Up_Repository')
private repository: LookUpRepository,
) {}

async fuzzySearch(user: User, text: string): Promise<Array<LookUp>> {
return [];
async fuzzySearch(user: string, text: string): Promise<Array<LookUp>> {
return this.repository.search(user, text);
}

async manualInsert(att: LookUpAttributes) {
const lookupEntry = LookUp.build(att);

await this.repository.instert(lookupEntry);
}
}
2 changes: 1 addition & 1 deletion src/modules/fuzzy-search/look-up.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 12 additions & 2 deletions src/modules/fuzzy-search/look-up.repository.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -10,6 +10,8 @@ export interface LookUpRepository {
userUuid: UserAttributes['uuid'],
partialName: string,
): Promise<Array<LookUpAttributes>>;

instert(entry: LookUp): Promise<void>;
}

@Injectable()
Expand All @@ -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<void> {
await this.model.create({
id: entry.id,
name: entry.name,
userUuid: entry.userUuid,
});
}
}

0 comments on commit d915e93

Please sign in to comment.