codestates / codestates/Reciper-server

[✍️ Dev Log] 신승길 / 2021-05-24

Open
#132 0 comments 0 reactions 1 assignee Claimed by @gatsukichi View on GitHub
@katsukichi/불꽃코딩🔥 Dev Log
Dominant language
TypeScript
Stars
9
Forks
3
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?

- chats Entity에 room 추가

```ts
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
OneToMany,
ManyToMany,
JoinTable,
BaseEntity,
ManyToOne,
} from 'typeorm';
import { Projects } from './Projects';
import { Users } from './Users';
@Entity()
export class Chats extends BaseEntity {
@PrimaryGeneratedColumn()
id!: number;

@Column()
text!: string;

@CreateDateColumn({ name: 'createdAt' })
createdAt!: Date;

@UpdateDateColumn({ name: 'updatedAt' })
updatedAt!: Date;

@Column()
room!: string;

@ManyToOne(type => Users, writer => writer.chat)
writer!: Users;

@ManyToOne(type => Projects, doingProject => doingProject.chats)
project!: Projects;
}

```

- socket통신부분에 room을 사용하였고, to(room).emit부분과 join을사용한 룸입장 기능 구현 (추가해야할 부분은 leave)

```ts
try {
const pubClient = createClient({
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
password: process.env.REDIS_PASSWORD,
});
const subClient = pubClient.duplicate();
console.log('💌 redis pub/sub setting done');

io.adapter(redisAdapter(pubClient, subClient));
const project = io.of(`/project`);
// room 개념을썻을때 ,redis의 pub/sub이 안먹어서 서로 통신이 두절되는게 확인됬다.
// 추후 생각해보자 ( advanced의 채팅방,DM기능 )

project.use(async (socket: Socket, next: (err?: Error) => void) => {
if (await Projects.findOne({ where: { projectURL: socket.handshake.query.projectURL } })) {
// db조회해서 존재하는지 확인 조건 ⬆️
console.log('정상 처리');
next();
} else {
console.log('비정상 처리');
next(new Error());
}
});
project.on('connection', (socket: Socket) => {
// console.log('connection');
socket.on('join_room', room => {
console.log(room);
socket.join(room);
});
socket.on('message', async ({ room, name, message }) => {
console.log(room, name, message);
let chat;
const projects = await Projects.findOne({ where: { projectURL: socket.handshake.query.projectURL } });
//a,b 로 하드코딩 되어있으나, 실제로 미들웨어를 이용해서 사용자정보를 조회한다.
if (name === 'a') {
const user = await Users.findOne({ where: { id: 1 } });
chat = await Chats.create({ text: message, writer: user, project: projects, room });
} else if (name === 'b') {
const user = await Users.findOne({ where: { id: 2 } });
chat = await Chats.create({ text: message, writer: user, project: projects, room });
}
chat?.save();
project.to(room).emit('message', { name, message });
});
socket.on('totalMessageGet', async room => {
const projects = await Projects.findOne({ where: { projectURL: socket.handshake.query.projectURL } });
const chats = await getRepository(Chats).find({
where: { project: projects, room },
relations: ['writer'],
});
console.log(chats);
project.to(room).emit('totalMessageGet', chats);
});
});
} catch (err) {
console.log(err);
}

module.exports = server;

```
### 오늘의 프로젝트에서 힘든 점은 무엇인가요?

- 따로 힘든점은 없었다.
- join기능을 사용하는데 있어서, leave를 고려하지않는점을 빨리수정해야한다.
- 방이동에대한 leave를 얼른 구현해야한다.
-

### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?

- [ ] 채팅기능 완벽구현 (leave 까지만 구현해도 얼추 해결될꺼같다.)
- [ ] 칸반보드의 소켓통신, db 실시간저장 blocked = dragging true/false로 블락되는 박스 구현

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.