import { Repository } from 'typeorm'; import { Server } from '../entities/Server.js'; import { getAppDataSource } from '../connection.js'; /** * Repository for Server entity */ export class ServerRepository { private repository: Repository; constructor() { this.repository = getAppDataSource().getRepository(Server); } /** * Find all servers */ async findAll(): Promise { return await this.repository.find({ order: { createdAt: 'ASC' } }); } /** * Find server by name */ async findByName(name: string): Promise { return await this.repository.findOne({ where: { name } }); } /** * Create a new server */ async create(server: Omit): Promise { const newServer = this.repository.create(server); return await this.repository.save(newServer); } /** * Update an existing server */ async update(name: string, serverData: Partial): Promise { const server = await this.findByName(name); if (!server) { return null; } const updated = this.repository.merge(server, serverData); return await this.repository.save(updated); } /** * Delete a server */ async delete(name: string): Promise { const result = await this.repository.delete({ name }); return (result.affected ?? 0) > 0; } /** * Check if server exists */ async exists(name: string): Promise { const count = await this.repository.count({ where: { name } }); return count > 0; } /** * Count total servers */ async count(): Promise { return await this.repository.count(); } /** * Find servers by owner */ async findByOwner(owner: string): Promise { return await this.repository.find({ where: { owner }, order: { createdAt: 'ASC' } }); } /** * Find enabled servers */ async findEnabled(): Promise { return await this.repository.find({ where: { enabled: true }, order: { createdAt: 'ASC' } }); } /** * Set server enabled status */ async setEnabled(name: string, enabled: boolean): Promise { return await this.update(name, { enabled }); } /** * Rename a server */ async rename(oldName: string, newName: string): Promise { const server = await this.findByName(oldName); if (!server) { return false; } server.name = newName; await this.repository.save(server); return true; } } export default ServerRepository;