스토리파이 오늘 밤에 1차 배포 목표로 달려 봄!
async addLike(userId: string, bookId: string) {
try {
const book = await this.findBookById(bookId);
if (!book) {
throw new NotFoundException('Book not found');
}
if (!book.likes.includes(new Types.ObjectId(userId))) {
book.likes.push(new Types.ObjectId(userId));
book.likesCount = book.likes.length; // Increment likesCount
return await this.updateBookLike(bookId, book);
} else {
throw new BadRequestException('You already liked this book');
}
} catch (error) {
Logger.error(`addLike 실패: ${error.message}`);
throw new Error(`좋아요 실패했습니다. 다시 시도해 주세요.`);
}
}
async addLike(userId: string, bookId: string) {
try {
// ObjectId 검증
if (!Types.ObjectId.isValid(userId) || !Types.ObjectId.isValid(bookId)) {
throw new BadRequestException('Invalid ID format');
}
const updateResult = await this.bookModel.findOneAndUpdate(
{
_id: bookId,
likes: { $ne: userId }, // 사용자 ID가 likes 배열에 없는 경우에만 업데이트
},
{
$push: { likes: userId }, // likes 배열에 사용자 ID 추가
$inc: { likesCount: 1 }, // likesCount 1 증가
},
{ new: true }
);
if (!updateResult) {
throw new NotFoundException('Book not found or user already liked');
}
return updateResult;
} catch (error) {
Logger.error(`addLike 실패: ${error.message}`);
throw new Error(`좋아요 실패했습니다. 다시 시도해 주세요.`);
}
}
간헐적이라기에는 fly.io에서 꽤 높은 빈도로 연결 refuse 에러가 발생.
일시적 오류인 줄 알았는데, 요청 대기는 0.0.0.0:3000에서 받지 않고 있어서 계속 오류가 발생하는 것 같음.
nest.js에서 연결 포트만 지정하지 않고 호스트도 함께 지정해서 해결 시도.
await app.listen(3000, '0.0.0.0');
근데 nest는 호스트를 지정하지 않으면 기본적으로 0.0.0.0 과 :: 로 된다고 하는데 왜 0.0.0.0:3000 연결 거절 에러가 뜰까?
이 문제가 아니었음.
임시로 이벤트 수신을 위해 telegram bot 연동
https://www.npmjs.com/package/node-telegram-bot-api
telegram 모듈은 전역으로 모든 모듈에서 사용됨.
따라서 모듈마다 추가하지 않고 전역 모듈로 설정.
이렇게 하면 별도 import를 하지 않아도 됨.
단, providers에는 service를 기입해야지 의존성 주입 가능
// 글로벌 데코레이터
@Global()
@Module({
controllers: [TelegramController],
providers: [TelegramService],
})
export class TelegramModule {}