import { Injectable } from '@nestjs/common';
import Redis from 'ioredis';
@Injectable()
export class RedisService {
private redisClient: Redis;
constructor() {
this.redisClient = new Redis({
host: process.env.REDIS_HOST,
port: parseInt(process.env.REDIS_PORT),
});
}
getRedis(){
return this.redisClient;
}
async setUserToken(
email: string,
token: string,
ttl: number
): Promise<string | null> {
return this.redisClient.set(`user:${email}:token`, token, 'EX', ttl);
}
async getUserToken(email: string): Promise<string | null> {
return this.redisClient.get(`user:${email}:token`);
}
async delUserToken(email: string): Promise<void> {
await this.redisClient.del(`user:${email}:token`);
return;
}
async setApiToken(
email: string,
tokenId: string,
token: string,
ttl: number
): Promise<string | null> {
return this.redisClient.set(
`user:${email}:api:${tokenId}`,
token,
'EX',
ttl
);
}
async getApiToken(email: string, tokenId: string): Promise<string | null> {
return this.redisClient.get(`user:${email}:api:${tokenId}`);
}
async getAllApiTokens(email: string): Promise<string[]> {
const keys = await this.redisClient.keys(`user:${email}:api:*`);
if (keys.length === 0) return [];
return this.redisClient.mget(...keys);
}
async delApiToken(email: string, tokenId: string): Promise<void> {
await this.redisClient.del(`user:${email}:api:${tokenId}`);
return;
}
async delAllApiTokens(email: string): Promise<void> {
const keys = await this.redisClient.keys(`user:${email}:api:*`);
if (keys.length > 0) {
await this.redisClient.del(...keys);
}
return;
}
}