« first day (2957 days earlier)      last day (408 days later) » 

06:57
A las güenas :-)
Asco de lunes :-(
07:32
Buenos dias
Semana corta hombre
Igual de mala que cualquier otra :-/
solo dos dias de sufrimiento
Luego siguen
 
4 hours later…
11:27
Buenas
Cuanto tiempo que no pisaba estos lares
 
2 hours later…
13:49
Buenas
Hola @nico
@NicolasOñate verdad que hay que darle al click
@Excorpion Hola
@Excorpion Me ha llegado igualmente
el nico y el nicolas ?
:O
los dos
mira @exco te debe de notificar
14:14
Ohh si que si
 
3 hours later…
17:10
alguien con experiencia en APi?
@NicolasOñate que api?
el problema no es con la api
si no con la tecnologia
tonces?
explicate un poco mejor
deje mi trabajo y tengo una prueba
tengo que atacar a esa api y obtener los datos en un proceso y guardarlos en una bbdd
y como nunca he hecho nada del estilo ando loco
Basicamente es esto:
Requirements
You need to create an ASP.NET web api application to expose the information provided by this api
http://www.tvmaze.com/api
Requirement 1
Implement a job to store in a database the information provided by the endpoint “Shows main
information”.
Requirement 2
Expose and endpoint to execute the job when will be need and securize it using an api key.
Requirement 3
Expose a public endpoint to query the information stored in the database.
aja
es simplemente que tu back conecte a esa api
nunca conectaste un back a una api?
17:14
si http client
pero tengo que guardar la info en mi bd
y cual seria el problema?
he tratado de usar entity framework para eso
pero no me va
ah bueno.. yo no uso EF ni que me paguen jajajaj
espera, no tengo que hacer una api de una api?
tengo que hacer una web que guarde datos???
@NicolasOñate parece ser que tenes que hacer una api para consultar otra api
tres endpoints
17:19
eso es lo que he pensado
uno que consulte main info y la guarde en la db
otro igual pero con una api key
entiendo
y otro que devuelva la info de la db
eso entiendo yo
yo tambien
nunca trabajaste un back?
17:20
si
pero no un back asi
como seria eso? es un back
como cualquier otro... a que te referis que nunca asi?
una api de una api, no jamas
si eso una api y de ahi atacar desde mi web
y cual seria la diferencia?
tenes que hacer un back.. sin front...
que reciba peticiones...
y vos consultar desde tu back, otra api...
en realidad, es lo mas comun del mundo jajaja
lo que me ralla es el obtener y guardar sin fin
porque tengo que atacar a /show/<numero>
y guardar cada show
como se cuantos hay o cojo solo uno?
con uno ya lo tengo
lo escribo a pelo y solucionado
creo dos cosas
que primero, esa duda a quien te dio el ejercicio...
y segundo, que supongo deberias recibir por parametro el id del show...
yo supongo que deben ser muchos como para traer todos...
@NicolasOñate si si lo vi...
es esa la funcion a la que atacaria
lo primero que he pensado es en usar un while o un for pero no se si es lo que se requiere
@NicolasOñate yo no creo que debas hacer eso
entonces, debo hacer un front con un input?
@NicolasOñate no
es una api
17:26
es que tampoco creo que sea eso
recibe por parametro el id...
claro, pero de donde saco ese id
y esas dudas, a quien te dio el ejercicio.. tal vez esta redactado confuso a proposito
@NicolasOñate lo recibis por parametro..
es una api.. puede recibir parametros..
es mas, vas a recibir una api key
entieeendo
entoces tengo que generarme un get
que ataque a eso!
y en el get que obtenga el id
17:28
no?
bah... volvemelo a explicar.. tu endpoint seria un get?
no pone nada de que no pueda serlo
asi que si
Requirement 1
Implement a job to store in a database the information provided by the endpoint “Shows main information”.
Requirement 2
Expose and endpoint to execute the job when will be need and securize it using an api key.
Requirement 3
Expose a public endpoint to query the information stored in the database.
el 3 es un get
pero desde bbdd
claro yo entiendo algo similar
primero vamos a ver si lo vemos igual:
1. un servicio que guarde en bbdd desde la api.
2. un endpoint que ejecute el 1 con una api key
3. mostrar los datos en bd
17:43
sip..
el 3 no es mostrar.. es que devuelva eso.. no hay front aca...
vale, ahora que estamos en sintonía, tengo un modelo para los datos y tengo esto.
public class TvMaze : DbContext
    {
        public DbSet<Information> Information { get; set; }

        public TvMaze(DbContextOptions<TvMaze> options) : base(options)
        {
        }
    }
[Route("api/[controller]")]
    [ApiController]
    public class TvMazeApi : ControllerBase
    {
        private readonly DataJob _dataJob;

        public TvMazeApi(DataJob dataJob)
        {
            _dataJob = dataJob;
        }

        [HttpPost("RequirementOne")]
        //[ApiKeyAuthorize]
        public IActionResult ExecuteJob([FromBody] Information show)
        {
            _dataJob.AddShow(show);
            return Ok("Job executed successfully.");
        }
    }
public class DataJob
    {
        private readonly TvMaze _dbContext;

        public DataJob(TvMaze dbContext)
        {
            _dbContext = dbContext;
        }

        public void AddShow(Information inf)
        {
            _dbContext.Information.Add(inf);
            _dbContext.SaveChanges();
        }
    }
el httpClient va en ExecuteJob de la api no?
@NicolasOñate si.. en los endpoints
y supongo que para la api que vas a necesitar un middleware...
var httpClient = new HttpClient();
var response = await httpClient.GetAsync("http://api.tvmaze.com/shows/{showId}");
var content = await response.Content.ReadAsStringAsync();
esto asi y tengo que pasarle el id en el post
@gbianchi estoy usando swager
@NicolasOñate no tiene nada que ver
DETALLE
no leas el content sin antes verificar el estado del pedido...
mira si no responde un 200
responde un 401
perdon 500
Unable to resolve service for type 'Codere.Controllers.DataJob' while attempting to activate 'Codere.Controllers.TvMazeApi'.
pero es porque aun no tengo puesta la obtencion de los datos de la api
17:56
ok
ahora si
500
Unable to resolve service for type 'Codere.Controllers.DataJob' while attempting to activate 'Codere.Controllers.TvMazeApi'.
}eso es un error de la api...
como que no comunica
me falta instanciarlo o que? no lo entiendo :(
@NicolasOñate quien devuelve esto?
ahhh es por entityFramework?
18:00
swagger?
y le estas pasando al controller esas clases por DI?
inyeccion de dependencias
o estas instanciando como la db?
me haces dudar
aaammigo
private readonly DataJob _dataJob;
lo instancio
pero no lo creo en ningun momento
18:03
y bueno.. crealo jajajaja
0 referencias
no se crea nunca
pero donde lo creo?
en el program?+
que cosa?
no se usar EF
pero no deberias pasar el context por DI?
el que sabe usar bien EF es @fredyfx
18:20
@gbianchi en core se pasa raro
he descubierto como
builder.Services.AddDbContext<TvMaze>(options => options.UseSqlServer("Server=---;Database=Codere;Trusted_Connection=True;"));
@NicolasOñate yo ni idea de eso... uso dapper
ni loco me meto con el quilombo que hace EF
a los entrevistadores les encanta
por eso si tengo una prueba y puedo usarlo pues lo meto
que se les iluminan los ojos
@NicolasOñate con EF?
si
y rabbitMQ
no se que tienen esas dos cosas que les encantan
buenas :D
me invocaron
aloha~
¿qué onda con EF?
¿Quieres aplicar patrón repositorio?
18:29
@NicolasOñate rabbit esta muy bien...
¿De qué tamaño es la aplicación que quieres desarrollar?
@fredyfx minuscula
pero bien hecha
¿Cuál es el problema actual?
te resumo, estoy realizando una prueba para un nuevo trabajo y me han pasado los siguientes puntos.
Requirements
You need to create an ASP.NET web api application to expose the information provided by this api
http://www.tvmaze.com/api
Requirement 1
Implement a job to store in a database the information provided by the endpoint “Shows main
information”.
Requirement 2
Expose and endpoint to execute the job when will be need and securize it using an api key.
Requirement 3
Expose a public endpoint to query the information stored in the database.
@fredyfx actualmente estoy en un punto que me falla la api externa
@NicolasOñate no no.. no te falla la api externa.. si ni llegaste a llamarla!!!
18:32
@gbianchi si, ya la llamo
¿Cómo estás llamando a dicha Api?
@NicolasOñate ah o sea, ya no recibis el 500 o cambio la razon del 500?
[HttpPost("RequirementOne")]
            //[ApiKeyAuthorize]
            public async Task<IActionResult> ExecuteJobAsync([FromBody] Information show, int showId)
            {
                var httpClient = new HttpClient();
                var response = await httpClient.GetAsync("https://api.tvmaze.com/shows/{showId}");
                var content = await response.Content.ReadAsStringAsync();

                _dataJob.AddShow(show);
                return Ok("Job executed successfully.");
            }
@gbianchi cambio la razon
12 mins ago, by Nicolas Oñate
builder.Services.AddDbContext<TvMaze>(options => options.UseSqlServer("Server=---;Database=Codere;Trusted_Connection=True;"));
con esto ya seteo el dbcontext
18:34
Esto fue del evento que hice con la gente de SOes y la comunidad de donde vengo, hace 7 años
@NicolasOñate revisa el estado de response antes de obtener los datos!!!!!!!
@gbianchi ahi estoy, me da 401
@fredyfx el video entero?
@NicolasOñate que viene en showId?
porque show viene por parametro?
porque no haces nada con content?
@gbianchi le inserto yo 1 desde swagger y lo coge
@NicolasOñate el código, aunque está en MVC, es similar.
18:37
@fredyfx ya veo
no voy mal encaminado
@NicolasOñate puedo decir que esa llamada esta mal?
estas metido en un lio por apurado...
inserto en el post el dato y todo bien
sigue el proceso hasta llegar al momento de obtenerlo de la api
no veo imagenes.. estoy en la ofi
y la llamada esta mal...
muy mal...
var response = await httpClient.GetAsync("https://api.tvmaze.com/shows/{showId}"); no le falta algo antes de abrir las comillas???
un $ por ejemplo para que mande el id, en lugar de esa cadena?
y por eso, me gusta construir las url en una variable anterior, para poder depurar...
@NicolasOñate no mmmmmmmmmm nada
18:43
Xd
kjajajaja
orden al programar...
ya decia yo
XDDD
yo llegando y dandome cuenta de esas cosas, y bianchi retando a nicolas por eso jsjs
la variable URL debe existir siempre que hay una llamada
de tipo string...
18:44
voy por la tabla :v
donde se construye la URL
para poder depurarla
mandarla a logs
o lo que sea...
nunca, pero nunca, me escribes la url directamente...
por motivos así, @gbianchi cada vez más Gandalf mode on.
siempre lo he hecho como dices pero por querer lucirme ...
@NicolasOñate no te luces, la cagas jajajajaj
@fredyfx yo me siento como pipin
18:45
XD!!!!!
@gbianchi XDDDD
el patito de hule te pega..
jajajjaja
jajajajajajaaj
@gbianchi XD!!!!!!!!
si vengo siendo su patito hace rato
18:49
vale ahora por lo que veo el problema viene de bbdd
que te dice
System.InvalidOperationException: Unable to determine the relationship represented by navigation 'Information.Externals' of type 'Externals'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.
pero esto es por como he construido el modelo y la bbdd
por no usar dapper.. con dapper y sqlite ya hubieras terminado jajajajaj
@gbianchi pero si voy a trabajar con esto... deberé usarlo
@NicolasOñate supongo que si...
te dijeron que trabajarias con eso?
18:52
si
entonces si.. aprendelo
es por ello que lo estoy usando y no MVC y cosas que manejo con facilidad
llevo todo el dia leyendo docs para meterme y darme de bruces XD
para desarrollar servicios web de buena manera, es altamente recomendable conocer:
1. Verbos HTTP (GET, POST, PUT, DELETE, PATCH)
2. Estados de respuesta de los códigos HTTP.
3. Mandar y leer información en headers.
4. Mandar y leer información de QueryStrings.
5. Mandar y leer información del Body.
1. ✅
2. ✅
3. ❌
4. ❌
5. ✅
apruebo para el trabajo XD
PATCH ?
espera espera, que es eso además de lo obvio que entiendo
2.- Para eso tengo un listado de los códigos, mi TDAH no me deja recordar lo no comunes :C
19:03
Patch tiene varias opciones, puedes eliminar un objeto, agregar un objeto o darle una actualización parcial de un objeto
Lo utilizo para actualizar entidades conforme vayan moviéndose en un formulario, así me evito el problema de "es que esto no se actualizaba hasta que le daba click en el botón guardar, ¿no hay autoguardado?"
solo uso post
el standard nunca pego fuerte en ningun lado...
(y get obviamente, el resto... bla)
GET y POST, PUT y DELETE casi nunca jamás... PATCH ni lo conocía jaja
cosas de la vida~
buscando entre mis repos, encontré este:
quizás te sea de utilidad @NicolasOñate
@fredyfx gracias le hecho un ojo
@NicolasOñate mejor los dos, cosa que amplias el panorama :v
@Excorpion ten esto en los bookmarks: json-patch-builder-online.github.io
19:11
Guardadete
Y ahora te sigo en github, ya que no tenía cuenta ahi aun hasta ahora
ahi casi siempre le hago forks a repos que considero interesantes, enfocados en .net principalmente, algunos de hacking y temas de importancia personal.
@fredyfx como mapeas tu la bbdd??
es lo unico que me falta segun creo
EF hace el trabajo.
utilizo Dapper para mappear SPs y algunas consultas que serían más simples en raw que en llamadas a EF.
Es que me esta siguiendo bien el hilo hasta que toca guardar en bbdd
que me salta con esto
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
 ---> Microsoft.Data.SqlClient.SqlException (0x80131904): El nombre de columna 'Id' no es válido.
El nombre de columna 'Id' no es válido.
cuando tengo estos campos en bbdd
probablemente tengas "ID", o "id"
19:27
CREATE TABLE [dbo].[Information](
	[Id] [int] NOT NULL,
	[Url] [nvarchar](50) NULL,
	[Name] [nvarchar](50) NULL,
	[Type] [nvarchar](50) NULL,
	[Language] [nvarchar](50) NULL,
	[Status] [nvarchar](50) NULL,
	[Runtime] [int] NULL,
	[AverageRuntime] [int] NULL,
	[Premiered] [datetime] NULL,
	[Ended] [datetime] NULL,
	[OficialSite] [nvarchar](50) NULL,
	[Weight] [int] NULL,
	[WebChannel] [nvarchar](50) NULL,
	[DvdCountry] [nvarchar](50) NULL,
	[Sumary] [nvarchar](50) NULL,
	[Updated] [int] NULL,
 CONSTRAINT [PK_Information] PRIMARY KEY CLUSTERED
@fredyfx es lo primero que he mirado y no
tengo Id
será porque lo tengo como primary?
¿está como autogenerada?
ya lo he visto
es a la hora de recogerlo
tengo 0
revisa el enlace que te acabo de compartir.
hay quienes les gusta utilizar [DataAnnotations], prefiero utilizar el configurador del ModelBuilder
19:33
lo que estoy haciendo es castear bien el objeto, que hay campos que no recogia
19:45
show me the code.
poweroverwhelming
blacksheepwall
ahora aplicamos un operationcwal y listo.
#SoloParaEntendidos
oro puro.
 
2 hours later…
21:33
Aloha~
21:48
aloha~
¿Cómo vas @Cris223511.dev ?

« first day (2957 days earlier)      last day (408 days later) »