Small Nest.js-based project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
test-assignment-parcellab/src/packages.service.ts

50 lines
1.5 KiB

import { Inject, Injectable } from '@nestjs/common';
import {
Dependencies,
geocodingProviderDependency,
packagesRepositoryDependency,
weatherProviderDependency,
} from './dependencies';
import { CarrierType } from './types';
@Injectable()
export class PackagesService {
constructor(
@Inject(packagesRepositoryDependency)
private readonly packagesRepository: Dependencies[typeof packagesRepositoryDependency],
@Inject(geocodingProviderDependency)
private readonly geocodingProvider: Dependencies[typeof geocodingProviderDependency],
@Inject(weatherProviderDependency)
private readonly weatherProvider: Dependencies[typeof weatherProviderDependency],
) {}
async getPackageInfoWithWeather(
carrier: CarrierType,
trackingNumber: string,
) {
const packageDataResponse = await this.packagesRepository.getPackage(
carrier,
trackingNumber,
);
if (!packageDataResponse.found) {
return null;
}
const packageData = packageDataResponse.value;
try {
const receiverLocation = await this.geocodingProvider.geocode(
packageData.receiverAddress,
);
const receiverWeather =
await this.weatherProvider.getCurrentWeather(receiverLocation);
return {
packageData,
receiverWeather,
};
} catch {
return { packageData };
}
}
}