Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 41 additions & 21 deletions src/features/funding/funding.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,19 +95,19 @@ export class FundingService {
.createQueryBuilder('friend')
.where(
'((friend.userId = :userId AND friend.friendId = :friendId) OR (friend.userId = :friendId AND friend.friendId = :userId))',
{ userId: user.userId, friendId: userId })
{ userId: user.userId, friendId: userId },
)
.andWhere('friend.status = :status', { status: FriendStatus.Friend })
.getOne();

if (!friendship) {
queryBuilder.andWhere(
'funding.fundPubl = :publ',
{ publ: true }
)
queryBuilder.andWhere('funding.fundPubl = :publ', { publ: true });
}
}
} else {
queryBuilder.where('funding.fundUser != :userId', { userId: user.userId });
queryBuilder.where('funding.fundUser != :userId', {
userId: user.userId,
});

const friendIds = await this.friendRepository
.createQueryBuilder('friend')
Expand All @@ -132,10 +132,10 @@ export class FundingService {
if (friendIdsArray.length > 0) {
// 친구 목록이 있는 경우
if (fundPublFilter === 'all') {
queryBuilder.andWhere(
'funding.fundPubl = :publ',
{ publ: true, ids: friendIdsArray },
);
queryBuilder.andWhere('funding.fundPubl = :publ', {
publ: true,
ids: friendIdsArray,
});
} else if (fundPublFilter === 'friends') {
queryBuilder.andWhere('funding.fundUser IN (:...ids)', {
ids: friendIdsArray,
Expand Down Expand Up @@ -224,21 +224,33 @@ export class FundingService {

queryBuilder.take(limit);

queryBuilder.leftJoinAndSelect('funding.fundUser', 'user');
// .leftJoinAndSelect('user.image', 'img');
queryBuilder.leftJoinAndSelect('funding.fundUser', 'u');

// 현재 Nested Entity에는 ImageInstanceManager#mapImage를 사용할 수 없다.
queryBuilder.leftJoinAndMapOne(
'u.image',
'image',
'ui',
`
(u.defaultImgId IS NOT NULL AND ui.imgId = u.defaultImgId) OR
(u.defaultImgId IS NULL AND ui.subId = u.userId AND ui.imgType = :imgType)
`,
{ imgType: ImageType.User },
);

const fundingPromies: Promise<FundingDto>[] = await queryBuilder
.getMany()
.then((fundings: Funding[]) =>
fundings.map(async (funding) => {
const fundUserImgUrl = await this.imageManager
.getImages(funding.fundUser)
.then((images) => images[0].imgUrl);

const { gifts, giftImgUrls } =
await this.giftService.findAllGift(funding);

return new FundingDto(funding, fundUserImgUrl, gifts, giftImgUrls);
return new FundingDto(
funding,
funding.fundUser.image.imgUrl,
gifts,
giftImgUrls,
);
}),
);

Expand Down Expand Up @@ -288,7 +300,7 @@ export class FundingService {
user: User,
): Promise<FundingDto> {
// TODO - accessToken -> User 객체로 변환하기
let funding = new Funding(
const funding = new Funding(
user,
createFundingDto.fundTitle,
createFundingDto.fundCont,
Expand All @@ -306,7 +318,7 @@ export class FundingService {

const funding_save = await this.fundingRepository.save(funding);

let fundImg: string[] = [];
const fundImg: string[] = [];
if (createFundingDto.fundImg) {
// subId = fundId, imgType = "Funding" Image 객체를 만든다.
const fundImgUrls = [createFundingDto.fundImg]; // TODO - CreateFundingDto.fundImg -> fundImgUrls 로 변경하기
Expand Down Expand Up @@ -344,7 +356,10 @@ export class FundingService {
updateFundingDto: UpdateFundingDto,
user: User,
): Promise<FundingDto> {
const funding = await this.findFundingByUuidAndUserId(fundUuid, user.userId);
const funding = await this.findFundingByUuidAndUserId(
fundUuid,
user.userId,
);
const fundId = funding.fundId;

// endAt이 앞당겨지면 안된다.
Expand All @@ -356,7 +371,12 @@ export class FundingService {
}

// 이미지 업데이트
const fundingImg = await this.updateFundingImage(funding, updateFundingDto.fundImg, fundId, user);
const fundingImg = await this.updateFundingImage(
funding,
updateFundingDto.fundImg,
fundId,
user,
);

// Funding 업데이트
await this.fundingRepository.update(
Expand Down
26 changes: 12 additions & 14 deletions src/features/gift/gift.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,25 +34,23 @@ export class GiftService {
giftImgUrls: string[];
count: number;
}> {
const [gifts, count] = await this.giftRepository.findAndCount({
where: { funding: { fundId: fund.fundId } },
relations: ['funding'],
order: { giftOrd: 'ASC' },
});

const giftImgUrls: string[] = [];
const qb = this.giftRepository
.createQueryBuilder('g')
.leftJoinAndSelect('g.funding', 'f', 'g.fundId = :fundId')
.where('g.fundId = :fundId', {
fundId: fund.fundId,
})
.orderBy('g.giftOrd', 'ASC');
this.imageManager.mapImage(qb);
const [gifts, count] = await qb.getManyAndCount();

// Gift 배열을 ResponseGiftDto 배열로 변환
const responseGifts = await Promise.all(
gifts.map(async (gift) => {
const { imgUrl, isDef } = await this.getGiftImageUrl(gift);
if (imgUrl && !isDef) {
giftImgUrls.push(imgUrl);
}
return new ResponseGiftDto(gift, imgUrl || '');
}),
gifts.map((gift) => new ResponseGiftDto(gift, gift.image.imgUrl)),
);

const giftImgUrls: string[] = gifts.map((g) => g.image.imgUrl);

return { gifts: responseGifts, giftImgUrls, count };
}

Expand Down
Loading