Skip to content

Commit

Permalink
refactor: UsersService setOverDueDay -> withLendingInfo (#574)
Browse files Browse the repository at this point in the history
* refactor: if문 제거

map과 foreach는 배열이 비어있어도 동작에 영향을 주지 않으므로 제거

* refactor: reduce 사용

* refactor: 객체 변경을 피함

* refactor: 변수명 통일

사용자 명칭이 user와 item으로 다르게 불리던 것을 user로 통일

* refactor: 메서드명을 동작과 일치하게 변경

실제로 유저를 변경하지 않고 대여 기록과 함께 반환하므로

* docs: 메서드 설명 추가

* docs: TODO 추가
  • Loading branch information
scarf005 authored Jul 11, 2023
1 parent a868cbf commit 2e51856
Showing 1 changed file with 17 additions and 19 deletions.
36 changes: 17 additions & 19 deletions backend/src/users/users.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,22 @@ export default class UsersService {
this.usersRepository = new UsersRepository();
}

async setOverDueDay(items: models.User[]): Promise<models.User[]> {
const usersIdList = items.map((user: models.User) => ({ userId: user.id }));
/**
* 기존 사용자 배열에 대출과 연체 정보를 추가하여 반환합니다.
*
* @returns 사용자의 대출 정보를 포함한 사용자 정보 배열
* @todo 대출 정보까지 함께 쿼리하는 searchUsersBy 메서드를 만들고 searchUserBy* 에서 사용하도록 수정
*/
async withLendingInfo(users: models.User[]): Promise<models.User[]> {
const usersIdList = users.map((user) => ({ userId: user.id }));
const lending = await this.usersRepository
.getLending(usersIdList) as unknown as models.Lending[];
if (items) {
return items.map((item: models.User) => {
const rtnObj: models.User = Object.assign(item);
rtnObj.lendings = lending.filter((lend) => lend.userId === item.id);
rtnObj.overDueDay = 0;
if (rtnObj.lendings.length) {
rtnObj.lendings.forEach((lend: models.Lending) => {
rtnObj.overDueDay += (+lend.overDueDay);
});
}
return rtnObj;
});
}
return items;

return users.map((user) => {
const lendings = lending.filter((lend) => lend.userId === user.id);
const overDueDay = lendings.reduce((acc, cur) => acc + cur.overDueDay, 0);
return { ...user, lendings, overDueDay };
});
}

async userLendings(userId: number) {
Expand All @@ -46,7 +44,7 @@ export default class UsersService {
{ nickname: Like(`%${nicknameOrEmail}%`) },
{ email: Like(`%${nicknameOrEmail}`) },
], limit, page);
const setItems = await this.setOverDueDay(items);
const setItems = await this.withLendingInfo(items);
const meta: types.Meta = {
totalItems: count,
itemCount: setItems.length,
Expand All @@ -59,7 +57,7 @@ export default class UsersService {

async searchUserById(id: number) {
let items = (await this.usersRepository.searchUserBy({ id }, 0, 0))[0];
items = await this.setOverDueDay(items);
items = await this.withLendingInfo(items);
return { items };
}

Expand All @@ -80,7 +78,7 @@ export default class UsersService {

async searchAllUsers(limit: number, page: number) {
const [items, count] = await this.usersRepository.searchUserBy(1, limit, page);
const setItems = await this.setOverDueDay(items);
const setItems = await this.withLendingInfo(items);
const meta: types.Meta = {
totalItems: count,
itemCount: setItems.length,
Expand Down

0 comments on commit 2e51856

Please sign in to comment.