Skip to content

Instantly share code, notes, and snippets.

@RenatoFranca
Created November 30, 2020 12:37
Show Gist options
  • Save RenatoFranca/51e74b536c69cfa373affdc27588db25 to your computer and use it in GitHub Desktop.
Save RenatoFranca/51e74b536c69cfa373affdc27588db25 to your computer and use it in GitHub Desktop.

Revisions

  1. RenatoFranca created this gist Nov 30, 2020.
    154 changes: 154 additions & 0 deletions sertive.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,154 @@
    // Angular
    import { Injectable } from '@angular/core';
    import { Http, Response, Headers, RequestOptions } from '@angular/http';
    import { URLSearchParams } from '@angular/http';
    import { Observable } from 'rxjs/Observable';
    import { environment } from '../../environments/environment';
    import 'rxjs/add/operator/catch';
    import 'rxjs/add/operator/map';
    // Entidades
    import { Grupo } from '../_models/grupo';

    @Injectable()
    export class GrupoService {
    // Variáveis gerais
    headers: Headers;
    options: RequestOptions;
    token = environment.prefix + 'token';

    private paginaUrl = environment.apiUrl + '/grupos';

    /**
    * Construtor
    *
    * @param http
    */
    constructor(private http: Http) {
    }// end constructor()

    /**
    * Converte o retorno da API para json
    *
    * @param res
    * @returns {any|{}}
    */
    extractData(res: Response) {
    const body = res.json();
    return body || { };
    }// end extractData()

    /**
    * Adiciona um grupo
    *
    * @param {string} nome
    *
    * @returns {Observable<any | {}>}
    */
    adicionar(nome: string, permissoes: any) {
    const body = new URLSearchParams();
    body.set('nome', nome);
    body.set('permissoes', permissoes);
    const headers = new Headers();
    headers.append('token', localStorage.getItem(this.token));
    const options = new RequestOptions({ headers: headers });

    return this.http.post(this.paginaUrl, body, options)
    .map(this.extractData);
    }// end adicionar()

    /**
    * Deleta um grupo
    *
    * @param {string} slug
    *
    * @returns {Observable<Grupo>}
    */
    deletar(slug:string): Observable<Grupo> {
    const headers = new Headers();
    headers.append('token', localStorage.getItem(this.token));
    const options = new RequestOptions({ headers: headers });

    return this.http.delete(this.paginaUrl + '/' + slug, options)
    .map(this.extractData);
    }// end deletar()

    /**
    * Edita um grupo
    *
    * @param {string} nome
    * @param {string} slug
    *
    * @returns {Observable<any | {}>}
    */
    editar(id: number, nome: string, permissoes: any, slug: string) {
    console.log(slug);
    const body = new URLSearchParams();
    body.set('id', id.toString());
    body.set('nome', nome);
    body.set('permissoes', permissoes);
    body.set('slug', slug);
    const headers = new Headers();
    headers.append('token', localStorage.getItem(this.token));
    const options = new RequestOptions({ headers: headers });

    return this.http.put(this.paginaUrl + '/' + slug, body, options)
    .map(this.extractData);
    }// end editar()

    /**
    * Consulta um grupo
    *
    * @param slug
    * @returns {Observable<R>}
    */
    ler(slug: string): Observable<Grupo> {
    return this.http.get(this.paginaUrl + '/' + slug)
    .map(this.extractData)
    .catch(this.handleError);
    }// end ler()

    /**
    * Lista os grupos
    *
    * @param {number} quantidade
    * @param {string} ordem
    * @param {number} pagina
    *
    * @returns {Observable<Grupo[]>}
    */
    listar(quantidade: number = 10, ordem: string = 'desc', pagina: number = 1): Observable<Grupo[]> {
    return this.http.get(this.paginaUrl + '?ordem=' + ordem + '&quantidade=' + quantidade + '&pagina=' + pagina)
    .map(this.extractData)
    .catch(this.handleError);
    }// end listar()

    /**
    * Consulta o total de grupos cadastrados
    *
    * @returns {Observable<Grupo[]>}
    */
    lerTotal(): Observable<Grupo[]> {
    return this.http.get(this.paginaUrl + '?total')
    .map(this.extractData)
    .catch(this.handleError);
    }// end lerTotal()

    /**
    * Manipula os erros e retorna um json
    *
    * @param error
    * @returns {any}
    */
    private handleError (error: Response | any) {
    let errMsg: string;
    if (error instanceof Response) {
    const body = error.json() || '';
    const err = body.error || JSON.stringify(body);
    errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
    } else {
    errMsg = error.message ? error.message : error.toString();
    }
    return Observable.throw(errMsg);
    }// end handleError()

    }// end GrupoService