RC-9-property-service #10

Merged
evgeniywas merged 2 commits from RC-9-property-service into dev 2023-10-12 10:31:16 +03:00
2 changed files with 68 additions and 1 deletions

View File

@@ -1,5 +1,7 @@
import AuthService from './authService';
import FirebaseService from './firebaseService';
import PropertyService from './propertyService';
// TODO: change to firebase secrets or to use firebase functions
const firebaseConfig = {
apiKey: 'AIzaSyBqMGmOF0-DkYDpnsmZwpf5S8w5cL3fBb8',
@@ -12,7 +14,15 @@ const firebaseConfig = {
measurementId: 'G-JW7J8ZQ9FJ',
};
// TopHap
const propertyConfig = {
dataBaseURL: process.env.REACT_APP_PROPERTY_DATA_BASE_URL,
widgetBaseURL: process.env.REACT_APP_PROPERTY_WIDGET_BASE_URL,
apiKey: process.env.REACT_APP_PROPERTY_API_KEY,
};
const firebase = new FirebaseService(firebaseConfig);
const authService = new AuthService();
const propertyService = new PropertyService(propertyConfig);
export { authService, firebase };
export { authService, firebase, propertyService };

View File

@@ -0,0 +1,57 @@
import axios from 'axios';
const widgets = {
absorptionRate: 'absorption-rate',
crime: 'crime',
hazards: 'hazards',
mapPreview: 'map-preview',
marketTrends: 'market-trends',
noise: 'noise',
population: 'population',
propertyTypes: 'property-types',
rentEstimate: 'rent-estimate',
thEstimate: 'th-estimate',
turnover: 'turnover',
walkability: 'walkability',
zipCodeMap: 'zip-code-map',
};
export default class PropertyService {
#dataApi;
#widgetApi;
constructor(config) {
const { dataBaseURL, widgetBaseURL, apiKey } = config;
this.#dataApi = axios.create({
baseURL: dataBaseURL,
headers: { 'X-API-Key': apiKey },
});
this.#widgetApi = axios.create({
baseURL: widgetBaseURL,
params: {
sid: apiKey,
},
});
}
fetchProperty(params) {
return this.#dataApi.get('/property', { params });
}
search(body) {
return this.#dataApi.post('/search', body);
}
fetchComparables(params) {
return this.#dataApi.get('/comparables', { params });
}
fetchWidgetByPropertyId(widget, propertyId, params) {
return this.#widgetApi.get(`${widget}/${propertyId}`, { params });
}
fetchWidgetByAddress(widget, params) {
return this.#widgetApi.get(`${widget}/address`, { params });
}
}