Skip to content

Commit

Permalink
MERGE :: soyeonkim0227/Tips-API-006 -> main
Browse files Browse the repository at this point in the history
PR :: 팁 추천
  • Loading branch information
gurdl0525 authored Jun 5, 2024
2 parents 6324a1c + 191a121 commit 2fc9711
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 1 deletion.
4 changes: 4 additions & 0 deletions src/core/tip/port/tip.in.port.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,8 @@ export interface ReadDetailTipUseCase {

export interface SearchTipUseCase {
searchTip(dto: SearchTipRequest,token: string): Promise<object[]>
}

export interface ReadRecommendedTipUseCase {
readRecommendedTip(): Promise<object[]>;
}
7 changes: 6 additions & 1 deletion src/core/tip/port/tip.out.port.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { ModifyTipRequest, SearchTipRequest } from 'src/presentation/tip/dto/tip.request';
import {
ModifyTipRequest,
SearchTipRequest,
} from 'src/presentation/tip/dto/tip.request';
import { Tip } from '../../../domain/tip/tip.entity';

export interface SaveTipPort {
Expand All @@ -13,4 +16,6 @@ export interface ReadTipPort {
findByIdOrFail(tipId: number): Promise<Tip>;

searchTip(dto: SearchTipRequest): Promise<object[]>;

readAllTipByRandom(): Promise<object[]>;
}
2 changes: 2 additions & 0 deletions src/core/tip/tip.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { UserRepository } from '../../domain/user/user.repository';
import {
ModifyTipService,
ReadDetailTipService,
ReadRecommendedTipService,
SearchTipService,
WriteTipService,
} from './tip.service';
Expand All @@ -30,6 +31,7 @@ import { JwtModule } from '@nestjs/jwt';
{ provide: 'modifyTip', useClass: ModifyTipService },
{ provide: 'readDetailTip', useClass: ReadDetailTipService },
{ provide: 'searchTip', useClass: SearchTipService },
{ provide: 'readRecommendedTip', useClass: ReadRecommendedTipService },
],
})
export class TipModule {}
16 changes: 16 additions & 0 deletions src/core/tip/tip.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
ModifyTipUseCase,
ReadDetailTipUseCase,
ReadRecommendedTipUseCase,
SearchTipUseCase,
WriteTipUseCase,
} from './port/tip.in.port';
Expand Down Expand Up @@ -91,3 +92,18 @@ export class SearchTipService implements SearchTipUseCase {
return data;
};
}

export class ReadRecommendedTipService implements ReadRecommendedTipUseCase {
constructor(
@Inject('tip out port')
private readonly readTipPort: ReadTipPort,
) {}

readRecommendedTip = async (): Promise<object[]> => {
const data = await this.readTipPort.readAllTipByRandom();

if (data.length === 0) throw new HttpException('There is No Content', 204);

return data;
};
}
15 changes: 15 additions & 0 deletions src/domain/tip/tip.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,19 @@ export class TipRepository implements SaveTipPort, UpdateTipPort, ReadTipPort {
.groupBy('tip.id')
.getRawMany();
};

readAllTipByRandom = async (): Promise<object[]> => {
return await this.tipEntity
.createQueryBuilder('tip')
.select([
'tip.id',
'tip.title',
'tip.content',
'tip.writer_id',
'tip.created_at',
])
.orderBy('RAND()')
.limit(18)
.getRawMany();
};
}
11 changes: 11 additions & 0 deletions src/presentation/tip/tip.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { Response } from 'express';
import {
ModifyTipUseCase,
ReadDetailTipUseCase,
ReadRecommendedTipUseCase,
SearchTipUseCase,
WriteTipUseCase,
} from '../../core/tip/port/tip.in.port';
Expand All @@ -35,6 +36,8 @@ export class TipController {
private readonly readDetailTipUseCase: ReadDetailTipUseCase,
@Inject('searchTip')
private readonly searchTipUseCase: SearchTipUseCase,
@Inject('readRecommendedTip')
private readonly readRecommendedTipUseCase: ReadRecommendedTipUseCase,
) {}

@Post()
Expand Down Expand Up @@ -98,4 +101,12 @@ export class TipController {
.json({ tips: await this.searchTipUseCase.searchTip(dto, token) })
.send();
}

@Get('/recommend')
async readRecommended(@Res() res: Response): Promise<Response> {
return res
.status(200)
.json({ posts: await this.readRecommendedTipUseCase.readRecommendedTip() })
.send();
}
}

0 comments on commit 2fc9711

Please sign in to comment.