Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions BackendAcademy/src/chat/chat.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { ChatService } from './chat.service';
import { CreateMessageDto } from './dto/create-message.dto';
import { CreateRoomDto } from './dto/create-room.dto';

@Controller('chat')
export class ChatController {
constructor(private readonly chatService: ChatService) {}

@Post('rooms')
createRoom(@Body() createRoomDto: CreateRoomDto) {
return this.chatService.createRoom(createRoomDto);
}

@Get('rooms')
findAllRooms() {
return this.chatService.findAllRooms();
}

@Get('rooms/:roomId')
findRoom(@Param('roomId') roomId: string) {
return this.chatService.findRoomById(roomId);
}

@Post('messages')
createMessage(@Body() createMessageDto: CreateMessageDto) {
return this.chatService.createMessage(createMessageDto);
}

@Get('rooms/:roomId/messages')
findMessagesByRoom(@Param('roomId') roomId: string) {
return this.chatService.findMessagesByRoom(roomId);
}
}
10 changes: 10 additions & 0 deletions BackendAcademy/src/chat/chat.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Module } from '@nestjs/common';
import { ChatController } from './chat.controller';
import { ChatService } from './chat.service';

@Module({
controllers: [ChatController],
providers: [ChatService],
exports: [ChatService],
})
export class ChatModule {}
42 changes: 42 additions & 0 deletions BackendAcademy/src/chat/chat.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { Injectable } from '@nestjs/common';
import { ChatRoom, Message } from './interfaces/chat.interface';
import { CreateMessageDto } from './dto/create-message.dto';
import { CreateRoomDto } from './dto/create-room.dto';

@Injectable()
export class ChatService {
private rooms: ChatRoom[] = [];
private messages: Message[] = [];

createRoom(createRoomDto: CreateRoomDto): ChatRoom {
const newRoom: ChatRoom = {
id: Math.random().toString(36).substring(2, 9),
...createRoomDto,
createdAt: new Date(),
};
this.rooms.push(newRoom);
return newRoom;
}

findAllRooms(): ChatRoom[] {
return this.rooms;
}

findRoomById(roomId: string): ChatRoom | undefined {
return this.rooms.find(r => r.id === roomId);
}

createMessage(createMessageDto: CreateMessageDto): Message {
const newMessage: Message = {
id: Math.random().toString(36).substring(2, 9),
...createMessageDto,
createdAt: new Date(),
};
this.messages.push(newMessage);
return newMessage;
}

findMessagesByRoom(roomId: string): Message[] {
return this.messages.filter(m => m.roomId === roomId);
}
}
5 changes: 5 additions & 0 deletions BackendAcademy/src/chat/dto/create-message.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export class CreateMessageDto {
roomId: string;
senderId: string;
content: string;
}
5 changes: 5 additions & 0 deletions BackendAcademy/src/chat/dto/create-room.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export class CreateRoomDto {
name?: string;
type: 'direct' | 'room';
participants: string[];
}
17 changes: 17 additions & 0 deletions BackendAcademy/src/chat/interfaces/chat.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
export type ChatType = 'direct' | 'room';

export interface ChatRoom {
id: string;
name?: string;
type: ChatType;
participants: string[];
createdAt: Date;
}

export interface Message {
id: string;
roomId: string;
senderId: string;
content: string;
createdAt: Date;
}
Loading