diff --git a/frontend/src/app/interfaces/preset.interface.ts b/frontend/src/app/interfaces/preset.interface.ts new file mode 100644 index 0000000..2a81e2b --- /dev/null +++ b/frontend/src/app/interfaces/preset.interface.ts @@ -0,0 +1,7 @@ +/** Represents the structure of a search preset. */ +export interface Preset { + preset_id: number; + parameter: string; + tag_label: string; + value: number[]; +} diff --git a/frontend/src/app/interfaces/region.interface.ts b/frontend/src/app/interfaces/region.interface.ts new file mode 100644 index 0000000..784f805 --- /dev/null +++ b/frontend/src/app/interfaces/region.interface.ts @@ -0,0 +1,6 @@ +/** Represents the structure of a region. */ +export interface Region { + region_id: number; + name: string; + country: string; +} diff --git a/frontend/src/app/interfaces/result.interface.ts b/frontend/src/app/interfaces/result.interface.ts new file mode 100644 index 0000000..1ca48be --- /dev/null +++ b/frontend/src/app/interfaces/result.interface.ts @@ -0,0 +1,15 @@ +import {SearchParam} from './search-request.interface'; + +/** Represents the structure of one search result. */ +export interface Result { + region_id: string; + region_name: string; + score: number; + scores: Score[]; +} + +export interface Score { + type: SearchParam; + value: number; + score: number; +} diff --git a/frontend/src/app/interfaces/search-request.interface.ts b/frontend/src/app/interfaces/search-request.interface.ts new file mode 100644 index 0000000..1095fb6 --- /dev/null +++ b/frontend/src/app/interfaces/search-request.interface.ts @@ -0,0 +1,25 @@ +export enum SearchParam { + FROM = 'from', + TO = 'to', + TEMPERATURE = 'temperature', + PRECIPITATION = 'precipitation', + RAINDAYS = 'raindays', + HUMIDITY = 'humidity', + SUNHOURS = 'sunhours', + ALCOHOL = 'alcohol', + FOOD = 'food' +} + +export interface SearchParams { + from: number; + to: number; + price?: number[]; + exclude_region_ids?: number[]; + temperature?: number[]; + precipitation?: number[]; + raindays?: number[]; + humidity?: number[]; + sunhours?: number[]; + alcohol?: number[]; + food?: number[]; +} diff --git a/frontend/src/app/services/data.service.spec.ts b/frontend/src/app/services/data.service.spec.ts new file mode 100644 index 0000000..a5283fc --- /dev/null +++ b/frontend/src/app/services/data.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { DataService } from './data.service'; + +describe('DataService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: DataService = TestBed.get(DataService); + expect(service).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/services/data.service.ts b/frontend/src/app/services/data.service.ts new file mode 100644 index 0000000..d9714a1 --- /dev/null +++ b/frontend/src/app/services/data.service.ts @@ -0,0 +1,36 @@ +import {Injectable} from '@angular/core'; +import {HttpClient, HttpParams} from '@angular/common/http'; +import {Preset} from '../interfaces/preset.interface'; +import {Result} from '../interfaces/result.interface'; +import {SearchParams} from '../interfaces/search-request.interface'; +import {Region} from '../interfaces/region.interface'; + +@Injectable({ + providedIn: 'root' +}) +export class DataService { + + private readonly API_URL = 'https://example.com/api/v1/'; + + constructor(private http: HttpClient) { + } + + public searchRegions(searchParams: SearchParams): Promise { + const params = new HttpParams(); + params.append('q', btoa(JSON.stringify(searchParams))); + + return this.http.get(this.API_URL + 'search', {params}).toPromise(); + } + + public getAllPresets(): Promise { + return this.http.get(this.API_URL + 'preset').toPromise(); + } + + public getAllRegions(): Promise { + return this.http.get(this.API_URL + 'region').toPromise(); + } + + public toMinMaxArray(min: number, max: number): number[] { + return [min, max]; + } +}