Complete project

This commit is contained in:
2025-03-17 10:01:32 +04:00
parent bcc5d1daf4
commit 46c040c642
41 changed files with 1951 additions and 127 deletions

View File

@@ -1,10 +1,14 @@
import Message, { CreateMessageDTO } from '@/entities/message';
import MessageGateway from '@/shared/gateways/message';
import MessageService from '@/shared/services/message';
import { Body, Controller, Get, Post } from '@nestjs/common';
@Controller('message')
export class MessageController {
constructor(private messageService: MessageService) {}
constructor(
private messageService: MessageService,
private messageGateway: MessageGateway,
) {}
@Get()
async getTopOfHistory(): Promise<Message[]> {
@@ -13,6 +17,8 @@ export class MessageController {
@Post()
async send(@Body() message: CreateMessageDTO): Promise<Message> {
return await this.messageService.addMessage(message);
const newMessage = await this.messageService.addMessage(message);
this.messageGateway.sendMessage(newMessage);
return newMessage;
}
}

View File

@@ -5,6 +5,9 @@ export class Message {
@PrimaryGeneratedColumn()
id: number;
@Column()
text: string;
@Column()
timeOfSend: string;

View File

@@ -1,12 +1,15 @@
import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { ValidationPipe } from '@nestjs/common';
import { WsAdapter } from '@nestjs/platform-ws';
import AppModule from './modules/app';
import AppModule from '@/modules/app';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe());
app.useWebSocketAdapter(new WsAdapter(app));
const options = new DocumentBuilder()
.setTitle('Chat')

View File

@@ -4,13 +4,14 @@ import { ConfigModule } from '@nestjs/config';
import config from '@/configuration/configuration';
import databaseConfig from '@/configuration/database';
import MessageModule from '../message';
import MessageModule from '@/modules/message';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [config],
load: [config, databaseConfig],
}),
TypeOrmModule.forRoot(databaseConfig()),

View File

@@ -1,5 +1,6 @@
import MessageController from '@/controllers/message';
import Message from '@/entities/message';
import MessageGateway from '@/shared/gateways/message';
import MessageService from '@/shared/services/message';
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@@ -7,6 +8,6 @@ import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [TypeOrmModule.forFeature([Message])],
controllers: [MessageController],
providers: [MessageService],
providers: [MessageService, MessageGateway],
})
export class MessageModule {}

View File

@@ -0,0 +1,3 @@
import { MessageGateway } from './message.gateway';
export default MessageGateway;

View File

@@ -0,0 +1,17 @@
import Message from '@/entities/message';
import { OnGatewayConnection, WebSocketGateway } from '@nestjs/websockets';
import { Socket } from 'socket.io';
@WebSocketGateway(8002)
export class MessageGateway implements OnGatewayConnection {
private clients: Socket[] = [];
handleConnection(client: Socket) {
this.clients.push(client);
}
sendMessage = (message: Message) => {
console.log(message, this.clients.length);
this.clients.forEach((client) => client.send(JSON.stringify(message)));
};
}