Prashikshak / API /src /controller /sachet.controller.ts
Abhisingh-18's picture
Initial commit: Prashikshak - disaster management training platform
9a92a42
Raw
History Blame Contribute Delete
5.04 kB
import { Request, Response } from 'express';
import axios from 'axios';
const SACHET_BASE_URL = 'https://sachet.ndma.gov.in/cap_public_website';
/**
* Proxy endpoint for fetching earthquake alerts from SACHET API
*/
export const fetchEarthquakeAlerts = async (req: Request, res: Response): Promise<Response> => {
try {
const response = await axios.get(`${SACHET_BASE_URL}/FetchEarthquakeAlerts`, {
timeout: 10000,
headers: {
'Accept': 'application/json',
'User-Agent': 'Prashikshak-Backend/1.0'
}
});
return res.status(200).json({
success: true,
data: response.data
});
} catch (error: any) {
console.error('Error fetching earthquake alerts:', error.message);
return res.status(error.response?.status || 500).json({
success: false,
message: 'Failed to fetch earthquake alerts',
error: error.message
});
}
};
/**
* Proxy endpoint for fetching IMD Nowcast alerts from SACHET API
*/
export const fetchNowcastAlerts = async (req: Request, res: Response): Promise<Response> => {
try {
const response = await axios.get(`${SACHET_BASE_URL}/FetchIMDNowcastAlerts`, {
timeout: 10000,
headers: {
'Accept': 'application/json',
'User-Agent': 'Prashikshak-Backend/1.0'
}
});
return res.status(200).json({
success: true,
data: response.data
});
} catch (error: any) {
console.error('Error fetching nowcast alerts:', error.message);
return res.status(error.response?.status || 500).json({
success: false,
message: 'Failed to fetch nowcast alerts',
error: error.message
});
}
};
/**
* Proxy endpoint for fetching all alert details from SACHET API
*/
export const fetchAllAlertDetails = async (req: Request, res: Response): Promise<Response> => {
try {
const response = await axios.get(`${SACHET_BASE_URL}/FetchAllAlertDetails`, {
timeout: 10000,
headers: {
'Accept': 'application/json',
'User-Agent': 'Prashikshak-Backend/1.0'
}
});
return res.status(200).json({
success: true,
data: response.data
});
} catch (error: any) {
console.error('Error fetching all alert details:', error.message);
return res.status(error.response?.status || 500).json({
success: false,
message: 'Failed to fetch all alert details',
error: error.message
});
}
};
/**
* Proxy endpoint for fetching statewise filter data from SACHET API
*/
export const fetchStatewiseFilter = async (req: Request, res: Response): Promise<Response> => {
try {
const response = await axios.get(`${SACHET_BASE_URL}/../locales/en/statewiseFilter.json`, {
timeout: 10000,
headers: {
'Accept': 'application/json',
'User-Agent': 'Prashikshak-Backend/1.0'
}
});
return res.status(200).json({
success: true,
data: response.data
});
} catch (error: any) {
console.error('Error fetching statewise filter:', error.message);
return res.status(error.response?.status || 500).json({
success: false,
message: 'Failed to fetch statewise filter',
error: error.message
});
}
};
/**
* Fetch all alerts in a single request (optimized endpoint)
*/
export const fetchAllAlerts = async (req: Request, res: Response): Promise<Response> => {
try {
const [earthquakeRes, nowcastRes, generalRes] = await Promise.all([
axios.get(`${SACHET_BASE_URL}/FetchEarthquakeAlerts`, {
timeout: 10000,
headers: { 'Accept': 'application/json', 'User-Agent': 'Prashikshak-Backend/1.0' }
}),
axios.get(`${SACHET_BASE_URL}/FetchIMDNowcastAlerts`, {
timeout: 10000,
headers: { 'Accept': 'application/json', 'User-Agent': 'Prashikshak-Backend/1.0' }
}),
axios.get(`${SACHET_BASE_URL}/FetchAllAlertDetails`, {
timeout: 10000,
headers: { 'Accept': 'application/json', 'User-Agent': 'Prashikshak-Backend/1.0' }
})
]);
return res.status(200).json({
success: true,
data: {
earthquakes: earthquakeRes.data,
nowcast: nowcastRes.data,
general: generalRes.data
}
});
} catch (error: any) {
console.error('Error fetching all alerts:', error.message);
return res.status(error.response?.status || 500).json({
success: false,
message: 'Failed to fetch all alerts',
error: error.message
});
}
};