Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { HttpClient, HttpParams } from '@angular/common/http';
- import { Injectable } from '@angular/core';
- import { Observable, Subject } from 'rxjs';
- import { tap } from 'rxjs/operators';
- import { ListResponse } from '../shared/list-response/list-response';
- import { objectToHttpParams } from '../shared/utils/objectToHttpParams';
- import { PORTUGAL_DISTRICTS } from '../shared/utils/portugal-districts';
- import { VenuesQueryParams } from './api/venues-query-params';
- import { VENUE_TYPES } from './utils/venue-types';
- import { Venue } from './venue';
- @Injectable({
- providedIn: 'root'
- })
- export class VenuesService {
- private venuesUpdated = new Subject<boolean>();
- venuesUpdated$ = this.venuesUpdated.asObservable();
- constructor(private httpClient: HttpClient) {}
- searchVenues(searchParams: VenuesQueryParams, authorized?: boolean): Observable<ListResponse> {
- const params = this.parseSearchParams(searchParams);
- const url = authorized ? 'venues' : 'pub/venues';
- return this.httpClient.get<ListResponse>(url, {
- params
- });
- }
- approvedVenues(searchParams?: VenuesQueryParams): Observable<ListResponse> {
- return this.searchVenues({ ...searchParams, approved: true }, true);
- }
- unapprovedVenues(searchParams?: VenuesQueryParams): Observable<ListResponse> {
- return this.searchVenues({ ...searchParams, approved: false }, true);
- }
- getVenue(id: string, authorized?: boolean): Observable<Venue> {
- const url = authorized ? 'venues/' : 'pub/venues/';
- return this.httpClient.get<Venue>(url + id);
- }
- approveVenue(id: string): Observable<void> {
- return this.httpClient.put<void>('venues/' + id + '/approve', null).pipe(tap(() => this.venuesUpdated.next(true)));
- }
- rejectVenue(id: string, rejectedDescription: string): Observable<void> {
- return this.httpClient
- .put<void>('venues/' + id + '/reject', { rejectedDescription })
- .pipe(tap(() => this.venuesUpdated.next(true)));
- }
- addVenue(venue: Venue): Observable<Venue> {
- return this.httpClient.post<Venue>('venues', venue).pipe(tap(() => this.venuesUpdated.next(true)));
- }
- deleteVenue(venueId: string): Observable<void> {
- return this.httpClient.delete<void>('venues/' + venueId).pipe(tap(() => this.venuesUpdated.next(true)));
- }
- editVenue(venueId: string, venue: Venue): Observable<void> {
- return this.httpClient.put<void>('venues/' + venueId, venue).pipe(tap(() => this.venuesUpdated.next(true)));
- }
- getVenueImageUploadUrl(venueId: string): Observable<string> {
- return this.httpClient.get<string>('venues/' + venueId + '/pictures');
- }
- getVenuesCount(): Observable<number> {
- return this.httpClient.get<number>('pub/venues/count');
- }
- getVenuesCountByDistrict(district: PORTUGAL_DISTRICTS): Observable<number> {
- return this.httpClient.get<number>('pub/venues/count/' + district);
- }
- uploadImage(file: File, url: string): Observable<void> {
- return this.httpClient.put<void>(url, file, {
- reportProgress: true,
- headers: { 'content-type': file.type }
- });
- }
- private parseSearchParams(searchParams: VenuesQueryParams): HttpParams {
- const params = { ...searchParams };
- // clear nonexistent params in the backend
- if (params.type === VENUE_TYPES.ALL) {
- delete params.type;
- }
- if (params.district === PORTUGAL_DISTRICTS.ALL) {
- delete params.district;
- }
- if (params.query === '') {
- delete params.query;
- }
- if (params.capacity) {
- params.minCapacity = params.capacity[0];
- params.maxCapacity = params.capacity[1];
- delete params.capacity;
- }
- return objectToHttpParams(params);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement