feat: add Redis Manager module with controller, service, and entity; refactor app module imports
This commit is contained in:
19
src/redisManager/entities/redis.node.entity.ts
Normal file
19
src/redisManager/entities/redis.node.entity.ts
Normal 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;
|
||||
}
|
||||
19
src/redisManager/redis.manager.controller.ts
Normal file
19
src/redisManager/redis.manager.controller.ts
Normal 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
|
||||
);
|
||||
}
|
||||
}
|
||||
13
src/redisManager/redisManager.module.ts
Normal file
13
src/redisManager/redisManager.module.ts
Normal 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 {}
|
||||
57
src/redisManager/redisNode/redis.node.service.ts
Normal file
57
src/redisManager/redisNode/redis.node.service.ts
Normal 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,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user