어떻게 링크에 무작위 스트링으로 반환할것인가?
어떻게 유저와 채널 아이디를 담을 것인가?
그렇다면 로직은 어떻게 짤 것인가?
1. 링크에서 user_id
와 channel_id
를 추출 후 2번으로.
2. 멤버 생성 함수로 멤버 추가
// 멤버 초대 링크 발급
async linkToInvite(channelId: number, email: string) {
/**
* 이메일을 받은 뒤 매칭되는 유저 id가져오기
* 랜덤 스트링 키에 user와 channel 아이디 값 넣어주기
* 수락 링크에는 매개변수로 랜덤 스트링을 넣어 주기
*/
const user = await this.userRepository.findOne({ where: { email }, select: ['id'] });
const uuid = crypto.randomUUID();
const userIdAndChannelId = `${user.id}_${channelId}`;
await redisCache.set(`randomKey:${uuid}`, userIdAndChannelId);
const url = `http://localhost:3000/channel/accept?code=${uuid}`;
return url;
}
// 링크를 해독하여 user와 channel id를 추출, 멤버 생성 함수로 연결
async getUserIdAndChannelIdFromLink(uuid: string) {
const Info = await redisCache.get(`randomKey:${uuid}`);
const userId = +Info.split('_')[0];
const channelId = +Info.split('_')[1];
await this.createMember(userId, channelId);
}
//TODO: 호출 형식 여쭤보기
// 링크 클릭 시 멤버 생성
async createMember(user: number, channel: number) {
const newMember = this.channelMemberRepository.create({
role: MemberRole.User,
user: user,
channel: channel,
} as any);
await this.channelMemberRepository.save(newMember);
return newMember;
}