Skip to content
Snippets Groups Projects
machines.service.ts 3.46 KiB
import { Injectable } from '@angular/core';
import { Machine } from './machine';
import { AuthService } from './auth.service';
import { environment } from '../environments/environment';

import { catchError, map, tap } from 'rxjs/operators';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { FormBuilder, FormGroup } from '@angular/forms';


@Injectable()
export class MachinesService {

  private machinesURL = "http://200.236.31.223:3000/api/machines";
	//private machinesURL = "http://localhost:3000/api/machines";

	httpOptions = { headers: new HttpHeaders({	}) };

	private updateHttpHeader() {
		this.httpOptions.headers = 
			this.httpOptions.headers.set('Authorization', this.authService.getToken());
		
	}

	private translateToServer(machine: Machine, op) {
		
		const formData = new FormData()
	  formData.append('serial_number', machine.serial_number);
	  formData.append('room', machine.room);
	  formData.append('date_last_maintenance', 
						machine.date_last_maintenance.month + '-' +
						machine.date_last_maintenance.day + '-' +
						machine.date_last_maintenance.year
						);
	  formData.append('date_next_maintenance', 
						machine.date_next_maintenance.month + '-' +
						machine.date_next_maintenance.day + '-' +
						machine.date_next_maintenance.year
						);
	  formData.append('status', machine.Status);

		formData.append('address', machine.address);
	  formData.append('address_number', machine.address_number);
	  formData.append('district', machine.district);
	  formData.append('city', machine.city);
	  formData.append('state', machine.state);

		if ((op == "post") || (machine.image.size != 0 )) { //if is post or image exists
			console.log("sending image");
			formData.append('file', machine.image, machine.image.name);
		}

		return formData;
	}

	getMachines(): Observable<Object> {
		return this.http.get(this.machinesURL)
			.pipe(
				tap(_ => console.log('fetched machines')),
				catchError(this.handleError<Observable<Object>>("getMachines")));
	}

	addMachine(machine: Machine): Observable<Machine> {
	
		if (this.authService.loggedIn()) { this.updateHttpHeader() }

		return this.http.post<any>(this.machinesURL,
																	this.translateToServer(machine, "post"), 
																	this.httpOptions
																	).pipe(
			tap(_ => console.log("added machine with serial number "+ machine.serial_number)),
			catchError(this.handleError<Machine>("addMachine"))
		);
	}

	updateMachine(machine: Machine): Observable<any> {

		if (this.authService.loggedIn()) { this.updateHttpHeader() }

		return this.http.put(this.machinesURL+"/"+machine.id,
													this.translateToServer(machine, "put"),
													this.httpOptions).pipe(
			tap(_ => console.log("updated machine with serial number " + machine.serial_number)),
			catchError(this.handleError<Machine>("updateMachine"))
		);
	}

	deleteMachine(id) {

		if (this.authService.loggedIn()) { this.updateHttpHeader() }
		
		return this.http.delete(this.machinesURL+"/"+id,
														this.httpOptions).pipe(
			tap(_ => console.log("removed machine with serial number " + id)),
			catchError(this.handleError<Machine>("removeMachine"))
		);

	}


	private handleError<T> (operation = 'operation', result?: T) {
		return (error: any): Observable<T> => {

			console.error(error);

			return Observable.of(result as T);
		}
	}

  constructor(private http: HttpClient,
							private authService: AuthService) { }

}