mirror of
https://github.com/YuzuZensai/Minikura.git
synced 2026-03-30 21:27:36 +00:00
✨ feat: topology, and improves handling
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import type { DomainEvent } from "../domain/events/domain-event";
|
||||
import { logger } from "./logger";
|
||||
|
||||
type EventHandler<T extends DomainEvent = DomainEvent> = (event: T) => void | Promise<void>;
|
||||
|
||||
@@ -14,7 +15,7 @@ export class EventBus {
|
||||
if (!this.handlers.has(eventName)) {
|
||||
this.handlers.set(eventName, new Set());
|
||||
}
|
||||
this.handlers.get(eventName)!.add(handler as EventHandler);
|
||||
this.handlers.get(eventName)?.add(handler as EventHandler);
|
||||
return () => {
|
||||
this.handlers.get(eventName)?.delete(handler as EventHandler);
|
||||
};
|
||||
@@ -28,7 +29,7 @@ export class EventBus {
|
||||
try {
|
||||
await handler(event);
|
||||
} catch (error) {
|
||||
console.error(`[EventBus] Error in handler for ${eventName}:`, error);
|
||||
logger.error({ err: error, eventName }, "Error executing event handler");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import "./server-event.handler";
|
||||
import "./user-event.handler";
|
||||
|
||||
console.log("[EventBus] All event handlers registered");
|
||||
import { logger } from "../logger";
|
||||
|
||||
logger.debug("All domain event handlers registered");
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
import { wsService } from "../../application/di-container";
|
||||
import {
|
||||
ServerCreatedEvent,
|
||||
ServerDeletedEvent,
|
||||
ServerUpdatedEvent,
|
||||
} from "../../domain/events/server-lifecycle.events";
|
||||
import { eventBus } from "../event-bus";
|
||||
import { wsService } from "../../application/di-container";
|
||||
import { logger } from "../logger";
|
||||
|
||||
eventBus.subscribe(ServerCreatedEvent, async (event) => {
|
||||
console.log(`[Event] Server created: ${event.serverId} (${event.serverType})`);
|
||||
logger.info({ serverId: event.serverId, serverType: event.serverType }, "Server created event");
|
||||
wsService.broadcast("create", event.serverType, event.serverId);
|
||||
});
|
||||
|
||||
eventBus.subscribe(ServerUpdatedEvent, async (event) => {
|
||||
console.log(`[Event] Server updated: ${event.serverId}`);
|
||||
logger.info({ serverId: event.serverId }, "Server updated event");
|
||||
wsService.broadcast("update", "server", event.serverId);
|
||||
});
|
||||
|
||||
eventBus.subscribe(ServerDeletedEvent, async (event) => {
|
||||
console.log(`[Event] Server deleted: ${event.serverId}`);
|
||||
logger.info({ serverId: event.serverId }, "Server deleted event");
|
||||
wsService.broadcast("delete", "server", event.serverId);
|
||||
});
|
||||
|
||||
@@ -3,17 +3,19 @@ import {
|
||||
UserUnsuspendedEvent,
|
||||
} from "../../domain/events/server-lifecycle.events";
|
||||
import { eventBus } from "../event-bus";
|
||||
import { logger } from "../logger";
|
||||
|
||||
eventBus.subscribe(UserSuspendedEvent, async (event) => {
|
||||
if (event.suspendedUntil) {
|
||||
console.log(
|
||||
`[Event] User suspended: ${event.userId} until ${event.suspendedUntil.toISOString()}`
|
||||
logger.warn(
|
||||
{ userId: event.userId, suspendedUntil: event.suspendedUntil.toISOString() },
|
||||
"User suspended with expiry"
|
||||
);
|
||||
} else {
|
||||
console.log(`[Event] User suspended: ${event.userId} indefinitely`);
|
||||
logger.warn({ userId: event.userId }, "User suspended indefinitely");
|
||||
}
|
||||
});
|
||||
|
||||
eventBus.subscribe(UserUnsuspendedEvent, async (event) => {
|
||||
console.log(`[Event] User unsuspended: ${event.userId}`);
|
||||
logger.info({ userId: event.userId }, "User unsuspended");
|
||||
});
|
||||
|
||||
5
apps/backend/src/infrastructure/logger.ts
Normal file
5
apps/backend/src/infrastructure/logger.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import { createLogger } from "@minikura/shared";
|
||||
|
||||
export { createLogger };
|
||||
|
||||
export const logger = createLogger("backend-api");
|
||||
@@ -1,5 +1,4 @@
|
||||
import { prisma, type UpdateSuspensionInput, type UpdateUserInput, type User } from "@minikura/db";
|
||||
import { UserRole } from "../../../domain/entities/enums";
|
||||
import type { UserRepository } from "../../../domain/repositories/user.repository";
|
||||
|
||||
export class PrismaUserRepository implements UserRepository {
|
||||
|
||||
Reference in New Issue
Block a user