mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-11-26 07:34:54 +00:00
Test AI PR Action from internal branch
This commit is contained in:
@ -1 +0,0 @@
|
|||||||
export * from './weather.controller';
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
import { Controller, Get, Query } from '@nestjs/common';
|
|
||||||
import { ApiOperation, ApiTags } from '@nestjs/swagger';
|
|
||||||
import { EnableDisableStatusEnum } from '@app/common/constants/days.enum';
|
|
||||||
import { ControllerRoute } from '@app/common/constants/controller-route'; // Assuming this is where the routes are defined
|
|
||||||
import { WeatherService } from '../services';
|
|
||||||
import { BaseResponseDto } from '@app/common/dto/base.response.dto';
|
|
||||||
import { GetWeatherDetailsDto } from '../dto/get.weather.dto';
|
|
||||||
|
|
||||||
@ApiTags('Weather Module')
|
|
||||||
@Controller({
|
|
||||||
version: EnableDisableStatusEnum.ENABLED,
|
|
||||||
path: ControllerRoute.WEATHER.ROUTE, // use the static route constant
|
|
||||||
})
|
|
||||||
export class WeatherController {
|
|
||||||
constructor(private readonly weatherService: WeatherService) {}
|
|
||||||
|
|
||||||
@Get()
|
|
||||||
@ApiOperation({
|
|
||||||
summary: ControllerRoute.WEATHER.ACTIONS.FETCH_WEATHER_DETAILS_SUMMARY,
|
|
||||||
description:
|
|
||||||
ControllerRoute.WEATHER.ACTIONS.FETCH_WEATHER_DETAILS_DESCRIPTION,
|
|
||||||
})
|
|
||||||
async fetchWeatherDetails(
|
|
||||||
@Query() query: GetWeatherDetailsDto,
|
|
||||||
): Promise<BaseResponseDto> {
|
|
||||||
return await this.weatherService.fetchWeatherDetails(query);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
import { ApiProperty } from '@nestjs/swagger';
|
|
||||||
import { Type } from 'class-transformer';
|
|
||||||
import { IsNumber } from 'class-validator';
|
|
||||||
|
|
||||||
export class GetWeatherDetailsDto {
|
|
||||||
@ApiProperty({
|
|
||||||
description: 'Latitude coordinate',
|
|
||||||
example: 35.6895,
|
|
||||||
})
|
|
||||||
@IsNumber()
|
|
||||||
@Type(() => Number)
|
|
||||||
lat: number;
|
|
||||||
|
|
||||||
@ApiProperty({
|
|
||||||
description: 'Longitude coordinate',
|
|
||||||
example: 139.6917,
|
|
||||||
})
|
|
||||||
@IsNumber()
|
|
||||||
@Type(() => Number)
|
|
||||||
lon: number;
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
export * from './weather.service';
|
|
||||||
@ -1,51 +0,0 @@
|
|||||||
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
|
||||||
import { HttpService } from '@nestjs/axios';
|
|
||||||
import { ConfigService } from '@nestjs/config';
|
|
||||||
import { firstValueFrom } from 'rxjs';
|
|
||||||
import { GetWeatherDetailsDto } from '../dto/get.weather.dto';
|
|
||||||
import { calculateAQI } from '@app/common/util/calculate.aqi';
|
|
||||||
import { BaseResponseDto } from '@app/common/dto/base.response.dto';
|
|
||||||
import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class WeatherService {
|
|
||||||
private readonly weatherApiUrl: string;
|
|
||||||
constructor(
|
|
||||||
private readonly configService: ConfigService,
|
|
||||||
private readonly httpService: HttpService,
|
|
||||||
) {
|
|
||||||
this.weatherApiUrl = this.configService.get<string>('WEATHER_API_URL');
|
|
||||||
}
|
|
||||||
|
|
||||||
async fetchWeatherDetails(
|
|
||||||
query: GetWeatherDetailsDto,
|
|
||||||
): Promise<BaseResponseDto> {
|
|
||||||
try {
|
|
||||||
const { lat, lon } = query;
|
|
||||||
const weatherApiKey = this.configService.get<string>(
|
|
||||||
'OPEN_WEATHER_MAP_API_KEY',
|
|
||||||
);
|
|
||||||
const url = `${this.weatherApiUrl}/current.json?key=${weatherApiKey}&q=${lat},${lon}&aqi=yes`;
|
|
||||||
|
|
||||||
const response = await firstValueFrom(this.httpService.get(url));
|
|
||||||
const pm2_5 = response.data.current.air_quality.pm2_5; // Raw PM2.5 (µg/m³)
|
|
||||||
|
|
||||||
return new SuccessResponseDto({
|
|
||||||
message: `Weather details fetched successfully`,
|
|
||||||
data: {
|
|
||||||
aqi: calculateAQI(pm2_5), // Converted AQI (0-500)
|
|
||||||
temperature: response.data.current.temp_c,
|
|
||||||
humidity: response.data.current.humidity,
|
|
||||||
},
|
|
||||||
statusCode: HttpStatus.OK,
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.log(`Error fetching weather data: ${error}`);
|
|
||||||
|
|
||||||
throw new HttpException(
|
|
||||||
`Api can't handle these lat and lon values`,
|
|
||||||
error.response?.status || HttpStatus.INTERNAL_SERVER_ERROR,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
import { Module } from '@nestjs/common';
|
|
||||||
import { ConfigModule } from '@nestjs/config';
|
|
||||||
import { HttpModule } from '@nestjs/axios'; // <-- Import this!
|
|
||||||
import { WeatherController } from './controllers';
|
|
||||||
import { WeatherService } from './services';
|
|
||||||
|
|
||||||
@Module({
|
|
||||||
imports: [ConfigModule, HttpModule],
|
|
||||||
controllers: [WeatherController],
|
|
||||||
providers: [WeatherService],
|
|
||||||
})
|
|
||||||
export class WeatherModule {}
|
|
||||||
Reference in New Issue
Block a user