feat: enhance API and query handling with Redis caching; add QueryGuard for query validation; refactor services to utilize RedisClient for improved performance
This commit is contained in:
@ -3,6 +3,7 @@ import { Repository } from "typeorm";
|
||||
import { Query } from "../entities/query.entity";
|
||||
import { InjectRepository } from "@nestjs/typeorm";
|
||||
import { ProjectService } from "src/project/project.service";
|
||||
import { RedisClient } from "src/redis/redis.service";
|
||||
|
||||
@Injectable()
|
||||
export class QueryHandlerService {
|
||||
@ -10,7 +11,9 @@ export class QueryHandlerService {
|
||||
@InjectRepository(Query)
|
||||
private readonly queryRepository: Repository<Query>,
|
||||
@Inject(ProjectService)
|
||||
private readonly projectService: ProjectService
|
||||
private readonly projectService: ProjectService,
|
||||
@Inject(RedisClient)
|
||||
private readonly redisClient: RedisClient
|
||||
) {}
|
||||
|
||||
async createQuery(
|
||||
@ -34,6 +37,25 @@ export class QueryHandlerService {
|
||||
return query;
|
||||
}
|
||||
|
||||
async getQueryById(id: string) {
|
||||
const cached = await this.redisClient.get(`query_${id}`);
|
||||
|
||||
if (cached) {
|
||||
return cached;
|
||||
}
|
||||
|
||||
const query = await this.queryRepository.findOne({
|
||||
where: { id },
|
||||
relations: ["project"],
|
||||
});
|
||||
|
||||
if (query) {
|
||||
await this.redisClient.set(`query_${id}`, query, 300);
|
||||
}
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
async updateQuery(id: string, updateData: Partial<Query>) {
|
||||
const query = await this.queryRepository.findOne({ where: { id } });
|
||||
|
||||
@ -41,6 +63,8 @@ export class QueryHandlerService {
|
||||
throw new Error("Query not found");
|
||||
}
|
||||
|
||||
await this.redisClient.del(`query_${id}`);
|
||||
|
||||
Object.assign(query, updateData);
|
||||
return this.queryRepository.save(query);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user