feat: add Redis Manager module with controller, service, and entity; refactor app module imports

This commit is contained in:
Boris D
2025-09-29 13:32:03 +03:00
parent 0d5b2830ed
commit 5f24388394
9 changed files with 142 additions and 101 deletions

View File

@ -0,0 +1,19 @@
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
@Entity("redisNode")
export class RedisNode {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({ type: "varchar", length: 255 })
host: string;
@Column({ type: "int" })
port: number;
@Column({ type: "varchar", length: 255 })
user: string | null;
@Column({ type: "varchar", length: 255 })
password: string | null;
}

View File

@ -0,0 +1,19 @@
import { Body, Controller, Post } from "@nestjs/common";
import { RedisNodeService } from "./redisNode/redis.node.service";
@Controller("redis")
export class RedisManagerController {
constructor(private readonly redisNodeService: RedisNodeService) {}
@Post("node/create")
addRedisNode(
@Body() body: { host: string; port: number; user: string; password: string }
) {
return this.redisNodeService.create(
body.host,
body.port,
body.user,
body.password
);
}
}

View File

@ -0,0 +1,13 @@
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { RedisNode } from "./entities/redis.node.entity";
import { RedisManagerController } from "./redis.manager.controller";
import { RedisNodeService } from "./redisNode/redis.node.service";
@Module({
imports: [TypeOrmModule.forFeature([RedisNode])],
controllers: [RedisManagerController],
providers: [RedisNodeService],
exports: [RedisNodeService],
})
export class RedisManagerModule {}

View File

@ -0,0 +1,57 @@
import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { RedisNode } from "../entities/redis.node.entity";
import { Repository } from "typeorm";
@Injectable()
export class RedisNodeService {
constructor(
@InjectRepository(RedisNode)
private readonly redisNodeRepository: Repository<RedisNode>
) {}
async create(
host: string,
port: number,
user: string,
password: string
): Promise<RedisNode> {
const existingNode = await this.redisNodeRepository.findOne({
where: { host, port },
});
if (existingNode) {
existingNode.password = password;
existingNode.user = user;
return await this.redisNodeRepository.save(existingNode);
}
const redisNode = this.redisNodeRepository.create({
host,
port,
user,
password,
});
return this.redisNodeRepository.save(redisNode);
}
async getConnectionOptions(id: string): Promise<{
host: string;
port: number;
username: string;
password: string;
}> {
const node = await this.redisNodeRepository.findOne({ where: { id } });
if (!node) {
throw new Error("Redis node not found");
}
return {
host: node.host,
port: node.port,
username: node.user,
password: node.password,
};
}
}