Добавил сортировку по свежести
This commit is contained in:
parent
b48e6d11b7
commit
ab8071da07
2
.env
2
.env
|
|
@ -3,3 +3,5 @@ DB_PORT=3306
|
||||||
DB_USER=root
|
DB_USER=root
|
||||||
DB_PASS=root
|
DB_PASS=root
|
||||||
DB_NAME=db_name
|
DB_NAME=db_name
|
||||||
|
REDIS_HOST=127.0.0.1
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
@ -20,11 +20,14 @@
|
||||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@keyv/redis": "^5.1.6",
|
||||||
|
"@nestjs/cache-manager": "^3.1.3",
|
||||||
"@nestjs/common": "^11.0.1",
|
"@nestjs/common": "^11.0.1",
|
||||||
"@nestjs/config": "^4.0.2",
|
"@nestjs/config": "^4.0.2",
|
||||||
"@nestjs/core": "^11.0.1",
|
"@nestjs/core": "^11.0.1",
|
||||||
"@nestjs/platform-express": "^11.0.1",
|
"@nestjs/platform-express": "^11.0.1",
|
||||||
"@nestjs/sequelize": "^11.0.1",
|
"@nestjs/sequelize": "^11.0.1",
|
||||||
|
"cache-manager": "^7.2.9",
|
||||||
"cors": "^2.8.6",
|
"cors": "^2.8.6",
|
||||||
"mysql2": "^3.16.0",
|
"mysql2": "^3.16.0",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import { AppService } from './app.service';
|
||||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||||
import { BlacklistModule } from './modules/blacklist/blacklist.module';
|
import { BlacklistModule } from './modules/blacklist/blacklist.module';
|
||||||
import { SequelizeModule } from '@nestjs/sequelize';
|
import { SequelizeModule } from '@nestjs/sequelize';
|
||||||
|
import { CacheModule } from '@nestjs/cache-manager';
|
||||||
|
import { createKeyv } from '@keyv/redis';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
|
|
@ -25,6 +27,21 @@ import { SequelizeModule } from '@nestjs/sequelize';
|
||||||
synchronize: true, // Включите обратно для синхронизации
|
synchronize: true, // Включите обратно для синхронизации
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
|
CacheModule.registerAsync({
|
||||||
|
imports: [ConfigModule],
|
||||||
|
inject: [ConfigService],
|
||||||
|
isGlobal: true, // Делает модуль доступным во всем приложении
|
||||||
|
useFactory: (configService: ConfigService) => {
|
||||||
|
const url = `redis://${configService.get<string>('REDIS_HOST')}:${configService.get<string>('REDIS_PORT')}`;
|
||||||
|
return {
|
||||||
|
stores: [
|
||||||
|
createKeyv(url, {
|
||||||
|
namespace: '',
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}),
|
||||||
BlacklistModule,
|
BlacklistModule,
|
||||||
],
|
],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import { InjectModel } from '@nestjs/sequelize';
|
import { InjectModel } from '@nestjs/sequelize';
|
||||||
import { BlacklistReport } from './models/blacklistReport.model';
|
import { BlacklistReport } from './models/blacklistReport.model';
|
||||||
import { BlacklistItem } from './types/blacklistItem';
|
import { BlacklistItem } from './types/blacklistItem';
|
||||||
|
|
@ -6,12 +6,15 @@ import { BlacklistItemList } from './types/blacklistItemList';
|
||||||
import { BlacklistReportDto } from './dto/blacklistReport';
|
import { BlacklistReportDto } from './dto/blacklistReport';
|
||||||
import { BadRequestException } from '@nestjs/common';
|
import { BadRequestException } from '@nestjs/common';
|
||||||
import { Sequelize, Op } from 'sequelize';
|
import { Sequelize, Op } from 'sequelize';
|
||||||
|
import { CACHE_MANAGER } from '@nestjs/cache-manager';
|
||||||
|
import { Cache } from '@nestjs/cache-manager';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class BlacklistService {
|
export class BlacklistService {
|
||||||
constructor(
|
constructor(
|
||||||
@InjectModel(BlacklistReport)
|
@InjectModel(BlacklistReport)
|
||||||
private blacklistReportModel: typeof BlacklistReport,
|
private blacklistReportModel: typeof BlacklistReport,
|
||||||
|
@Inject(CACHE_MANAGER) private cacheManager: Cache,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
getHealthCheck(): string {
|
getHealthCheck(): string {
|
||||||
|
|
@ -19,7 +22,20 @@ export class BlacklistService {
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAllRecords(): Promise<BlacklistItemList> {
|
async getAllRecords(): Promise<BlacklistItemList> {
|
||||||
|
const cacheKey = 'hunt-blacklist:all';
|
||||||
|
const cachedRecords = await this.cacheManager.get<any[]>(cacheKey);
|
||||||
|
if (cachedRecords && Array.isArray(cachedRecords)) {
|
||||||
|
const readyRecords = cachedRecords.map((item) =>
|
||||||
|
this.blacklistReportModel.build(item, { isNewRecord: false }),
|
||||||
|
);
|
||||||
|
return this.groupRecordsByLink(readyRecords);
|
||||||
|
}
|
||||||
const allRecords = await this.blacklistReportModel.findAll({ raw: true });
|
const allRecords = await this.blacklistReportModel.findAll({ raw: true });
|
||||||
|
if (allRecords.length > 0) {
|
||||||
|
await this.cacheManager.set(cacheKey, allRecords, 60 * 1000);
|
||||||
|
const check = await this.cacheManager.get(cacheKey);
|
||||||
|
console.log('Данные в кэше:', check);
|
||||||
|
}
|
||||||
return this.groupRecordsByLink(allRecords);
|
return this.groupRecordsByLink(allRecords);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -37,11 +53,24 @@ export class BlacklistService {
|
||||||
}
|
}
|
||||||
|
|
||||||
async getRecordsByLink(link: string): Promise<BlacklistItemList> {
|
async getRecordsByLink(link: string): Promise<BlacklistItemList> {
|
||||||
|
const cacheKey = `hunt-blacklist:link:${link}`;
|
||||||
|
const cachedRecords = await this.cacheManager.get<any[]>(cacheKey);
|
||||||
|
if (cachedRecords && Array.isArray(cachedRecords)) {
|
||||||
|
const readyRecords = cachedRecords.map((item) =>
|
||||||
|
this.blacklistReportModel.build(item, { isNewRecord: false }),
|
||||||
|
);
|
||||||
|
return this.groupRecordsByLink(readyRecords);
|
||||||
|
}
|
||||||
const allRecords: BlacklistReport[] =
|
const allRecords: BlacklistReport[] =
|
||||||
await this.blacklistReportModel.findAll({
|
await this.blacklistReportModel.findAll({
|
||||||
raw: true,
|
raw: true,
|
||||||
where: { steam_link: link },
|
where: { steam_link: link },
|
||||||
});
|
});
|
||||||
|
if (allRecords.length > 0) {
|
||||||
|
await this.cacheManager.set(cacheKey, allRecords, 60 * 1000);
|
||||||
|
const check = await this.cacheManager.get(cacheKey);
|
||||||
|
console.log('Данные в кэше:', check);
|
||||||
|
}
|
||||||
return this.groupRecordsByLink(allRecords);
|
return this.groupRecordsByLink(allRecords);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue