TECNOLOBO

No recuerdas tu codigo?
Se te olvido como se hace?

Aqui podras guardar lo que necesiten
Y cuando sea necesesario

Creado por julian gomez
iiiiii

Crear un provider custom



Descripcion

crear un custom provider

Nota1


0. En nest se debe crear un modulo para guardar esta clase adaptadora y poder exportarla
1. creamos una insterface
2. creamos la clase adaptadora usando axius y usar el decorador @Injectable()
3. Se exporta en el modulo donde se creo esa clase adaptadora
4. cambiamos donde se use axios (SeedService) por la clase adaptadora
						

Modulo


a
						

Servicio


import { Injectable } from '@nestjs/common';
//import axios, { AxiosInstance } from 'axios';
import { PokemonResponse } from './interfaces/poke-interface.interface';
import { PokemonService } from '../pokemon/pokemon.service';
import { Pokemon } from 'src/pokemon/entities/pokemon.entity';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose/dist/common';
import { AxiusAdapter } from '../common/adapters/axius.adapter';


@Injectable()
export class SeedService {
  
  constructor(
    @InjectModel(Pokemon.name)
    private readonly PokemonModel:Model<Pokemon>,
    private readonly httpAdapter:AxiusAdapter //Aqui se implementa la clase para no usar directamente Axius
  ){

  }

  //private readonly axios:AxiosInstance = axios; //Se quita esto para usar la clase adaptadora.

  async executeSeed(){
    //const {data} = await this.axios.get<PokemonResponse>('https://pokeapi.co/api/v2/pokemon?limit=100');

    //Aqui ya se usa mi httpAdapter y se usa en vez de axius
    const data = await this.httpAdapter.get<PokemonResponse>('https://pokeapi.co/api/v2/pokemon?limit=100');

    //console.log(data);
    await this.PokemonModel.deleteMany();
    
    let pokemonInsert:{name:string,no:number}[]=[];
    data.results.forEach(async({name,url}) => {
      
      const segm = url.split('/');
      const no:number = +segm[segm.length-2];
      const newPokemon = {name,no};
      pokemonInsert.push(newPokemon);
         
    }); 
    
    await this.PokemonModel.insertMany(pokemonInsert);

    return 'Todo ok';
  }
}

						

Controlador


import { HttpAdapter } from '../interfaces/http-adapte-interf';
import axios, { AxiosInstance } from 'axios';
import { Injectable } from '@nestjs/common';

@Injectable() //Para que sea inyectado en cualquier contructor
export class AxiusAdapter implements HttpAdapter{  

  private  axios:AxiosInstance = axios;

  async get<T>(url:string):Promise<T>{

    try {
      const {data} = await this.axios.get<T>(url);
      return data;
    } catch (error) {
      throw new Error('This is as error check logs');
    }

  }

}
						

Entity


//Se crea una interface para decirle a la clase adaptadora que obligue a que tenga este medoto

export interface HttpAdapter{
  get<T>(url:string):Promise<T>;
}
						

App.module


import { Module } from '@nestjs/common';
import { AxiusAdapter } from './adapters/axius.adapter'; //exportamos ese adapador nuevo creado

@Module({

  providers:[
    AxiusAdapter
  ],
  exports:[
    AxiusAdapter
  ]

})
export class CommonModule {}
						

Main


a
						

Vista


a