#  원티드 프리온보딩 백엔드 인턴십 7th : 231117 TIL

- Author: @laetipark
- Published: 2023-12-21
- Updated: 2023-12-31
- Source: http://blex.me/@laetipark/%EC%9B%90%ED%8B%B0%EB%93%9C-%ED%94%84%EB%A6%AC%EC%98%A8%EB%B3%B4%EB%94%A9-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%9D%B8%ED%84%B4%EC%8B%AD-7th-231117-til
- Tags: 백엔드, til, nodejs, nestjs, 원티드, github, 프리온보딩, mailer

---

### 1️⃣ 할당된 업무에 대한 진행상황.
`in progress` : 단위 테스트 코드 작성  
`done` : 주석 및 메시지 처리, README 작성, 프로젝트 REST API, `cron`을 이용한 알림 `schedule` 기능 추가mailer 알림 기능 추가 완료

### 2️⃣ 진행한 작업에 대한 리뷰 및 커밋한 내용 리뷰진행.
- **요구사항 변경 내용 및 사유**
    - 기존 이용 중인 `사용자`들이 설정한 `평균 비율 값`이 `사용자`가 원하는 예산 설계에 적절하지 않을 수 있다고 생각함
        - ex) `기존 사용자`들와 `사용자`간의 예산 격차가 큼
        - ex) 추천대로 예산 비율을 받았으나, `사용자`의 `지출 취향`을 고려받는다는 보장이 없음
    - `사용자 총 예산과 근접한 다른 사용자 10명`의 `카테고리 별 예산` 목록을 가져오는 것이 좀 더 참고하기 좋다고 판단
        - 추후 기존 사용자들의 `적절한 지출 여부`를 추가해 예산 설계 추천의 정확성을 높여도 괜찮다고 생각
```typescript
await this.budgetRepository
      .createQueryBuilder('b')
      .select('b.user.id', 'userID')
      .addSelect(`ABS(SUM(b.amount) - :amount)`, 'diff')
      .setParameter('amount', amount)
      .where('b.user.id != :id', {
        id: id,
      })
      .orderBy('diff', 'ASC')
      .groupBy('b.user.id')
      .limit(10)
      .getRawMany();
```
- 디스코드의 `Webhook`으로 `알림` 기능을 구현하려 했으나, 알림을 허용한 사용자에 한하여 전달해야하는 기능이기 때문에, `Mailer` 모듈을 사용하였음.


### 3️⃣ Today I Learned
- `@nestjs-modules/mailer` 모듈을 사용하여 `월별 지출 추천`과 `오늘 지출 추천 알림 기능`을 구현하였는데, 이에 대해 정리해볼 생각입니다.
```typescript
this.mailerService.sendMail({
        to: user.email,
        subject: `[돈이 Money 알림] ${user.username}님의 총 지출 현황`,
        html: emailContent,
})
```

### 📁 수행 기업 과제 Repository
- [[ 돈이머니 ] 예산 관리 서비스 RESTful API 서버💰, laetipark, github](https://github.com/laetipark/money-is-money)
