mirror of
https://github.com/StepanovPlaton/Chat.git
synced 2026-04-04 04:40:42 +04:00
Complete project
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@ export class Message {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
|
||||
@Column()
|
||||
text: string;
|
||||
|
||||
@Column()
|
||||
timeOfSend: string;
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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()),
|
||||
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
3
backend/src/shared/gateways/message/index.ts
Normal file
3
backend/src/shared/gateways/message/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
import { MessageGateway } from './message.gateway';
|
||||
|
||||
export default MessageGateway;
|
||||
17
backend/src/shared/gateways/message/message.gateway.ts
Normal file
17
backend/src/shared/gateways/message/message.gateway.ts
Normal 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)));
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user