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.
50 lines
1.5 KiB
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 };
|
|
}
|
|
}
|
|
}
|
|
|