mirror of
https://gitlab.com/mobicoop/v3/service/ad.git
synced 2026-01-10 21:02:41 +00:00
find ads by user id query, dto and controller
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import { IQueryHandler, QueryHandler } from '@nestjs/cqrs';
|
||||
import { AD_REPOSITORY } from '@modules/ad/ad.di-tokens';
|
||||
import { AdRepositoryPort } from '../../ports/ad.repository.port';
|
||||
import { Inject } from '@nestjs/common';
|
||||
import { AdEntity } from '../../../domain/ad.entity';
|
||||
import { FindAdsByUserIdQuery } from './find-ads-by-user-id.query';
|
||||
|
||||
@QueryHandler(FindAdsByUserIdQuery)
|
||||
export class FindAdsByUserIdQueryHandler implements IQueryHandler {
|
||||
constructor(
|
||||
@Inject(AD_REPOSITORY)
|
||||
private readonly repository: AdRepositoryPort,
|
||||
) {}
|
||||
async execute(query: FindAdsByUserIdQuery): Promise<AdEntity[]> {
|
||||
return await this.repository.findAll(
|
||||
{
|
||||
userUuid: query.userId,
|
||||
},
|
||||
{
|
||||
waypoints: true,
|
||||
schedule: true,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import { QueryBase } from '@mobicoop/ddd-library';
|
||||
|
||||
export class FindAdsByUserIdQuery extends QueryBase {
|
||||
readonly userId: string;
|
||||
|
||||
constructor(userId: string) {
|
||||
super();
|
||||
this.userId = userId;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ package ad;
|
||||
service AdService {
|
||||
rpc FindOneById(AdById) returns (Ad);
|
||||
rpc FindAllByIds(AdsById) returns (Ads);
|
||||
rpc FindAllByUserId(UserById) returns (Ads);
|
||||
rpc Create(Ad) returns (AdById);
|
||||
rpc Update(Ad) returns (Ad);
|
||||
rpc Delete(AdById) returns (Empty);
|
||||
@@ -14,6 +15,10 @@ message AdById {
|
||||
string id = 1;
|
||||
}
|
||||
|
||||
message UserById {
|
||||
string id = 1;
|
||||
}
|
||||
|
||||
message AdsById {
|
||||
repeated string ids = 1;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
import { IsString } from 'class-validator';
|
||||
|
||||
export class FindAdsByUserIdRequestDto {
|
||||
@IsString()
|
||||
id: string;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import { Controller, UsePipes } from '@nestjs/common';
|
||||
import { QueryBus } from '@nestjs/cqrs';
|
||||
import { GrpcMethod, RpcException } from '@nestjs/microservices';
|
||||
import { AdEntity } from '@modules/ad/core/domain/ad.entity';
|
||||
import { AdMapper } from '@modules/ad/ad.mapper';
|
||||
import { RpcExceptionCode } from '@mobicoop/ddd-library';
|
||||
import { RpcValidationPipe } from '@mobicoop/ddd-library';
|
||||
import { GRPC_SERVICE_NAME } from '@src/app.constants';
|
||||
import { AdsResponseDto } from '../dtos/ads.response.dto';
|
||||
import { FindAdsByUserIdQuery } from '@modules/ad/core/application/queries/find-ads-by-user-id/find-ads-by-user-id.query';
|
||||
import { FindAdsByUserIdRequestDto } from './dtos/find-ads-by-user-id.request.dto';
|
||||
|
||||
@UsePipes(
|
||||
new RpcValidationPipe({
|
||||
whitelist: false,
|
||||
forbidUnknownValues: false,
|
||||
}),
|
||||
)
|
||||
@Controller()
|
||||
export class FindAdsByUserIdGrpcController {
|
||||
constructor(
|
||||
protected readonly mapper: AdMapper,
|
||||
private readonly queryBus: QueryBus,
|
||||
) {}
|
||||
|
||||
@GrpcMethod(GRPC_SERVICE_NAME, 'FindAllByUserId')
|
||||
async findAllByUserId(
|
||||
data: FindAdsByUserIdRequestDto,
|
||||
): Promise<AdsResponseDto> {
|
||||
try {
|
||||
const ads: AdEntity[] = await this.queryBus.execute(
|
||||
new FindAdsByUserIdQuery(data.id),
|
||||
);
|
||||
return {
|
||||
ads: ads.map((ad: AdEntity) => this.mapper.toResponse(ad)),
|
||||
};
|
||||
} catch (e) {
|
||||
throw new RpcException({
|
||||
code: RpcExceptionCode.UNKNOWN,
|
||||
message: e.message,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user