You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesi贸n a prueba de IA

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

1 D铆as
19 Hrs
44 Min
31 Seg

Creaci贸n de servicios

18/22
Resources

Contributions 19

Questions 9

Sort by:

Want to see more contributions, questions and answers from the community?

Al minuto 7:42, cuando estamos verificando la categor铆a actual, es preferible seguir la estrategia guard. Consiste b谩sicamente en realizar validaciones y romper/interrumpir la ejecuci贸n antes de la l贸gica principal:

if(categoriaActual == null)
{
	return NotFound();
}
// Resto de la l贸gica

De esta manera evitamos el uso de else y el c贸digo es m谩s legible.

En el servicio de categor铆a hay un error al hacer el Update, se est谩n actualizando los datos de categoria con categor铆a. Y deber铆an actualizarse categoriaActual con los datos de categoria.

Adjunto mi clase Update de Categoria.

    public async Task Update(Guid id, Categoria categoria)
    {
        var categoriaActual = context.Categorias.Find(id);
        if (categoriaActual != null)
        {
            categoriaActual.Nombre = categoria.Nombre;
            categoriaActual.Descripcion = categoria.Descripcion;
            categoriaActual.Peso = categoria.Peso;

            await context.SaveChangesAsync();
        }

    }

Mi TareaService 馃槉

using webapi.Models;
namespace webapi.Services;


public class TareasService : ITareasService
{

    TareasContext context;
    public TareasService(TareasContext dbcontext)
    {
        context = dbcontext;
    }

    public IEnumerable<Tarea> Get()
    {
        return context.Tareas;
    }
    public async Task Save(Tarea tarea)
    {
        context.Add(tarea);
        await context.SaveChangesAsync();
    }

    public async Task Update(Guid id, Tarea tarea)
    {
        var tareaActual = context.Tareas.Find(id);
        if (tareaActual != null)
        {
            tareaActual.CategoriaId = tarea.CategoriaId;
            tareaActual.Titulo = tarea.Titulo;
            tareaActual.Descripcion = tarea.Descripcion;
            tareaActual.PrioridadTarea = tarea.PrioridadTarea;
            tareaActual.FechaCreacion = tarea.FechaCreacion;
            tareaActual.Categoria = tarea.Categoria;
            await context.SaveChangesAsync();
        }
    }

    public async Task Delete(Guid id)
    {
        var tareaActual = context.Tareas.Find(id);
        if (tareaActual != null)
        {
            context.Remove(tareaActual);
            await context.SaveChangesAsync();
        }
    }
}

public interface ITareasService
{
    IEnumerable<Tarea> Get();
    Task Save(Tarea tarea);
    Task Update(Guid id, Tarea tarea);
    Task Delete(Guid id);
}

Excelente clase

Aqu铆 dejo mi codigo, al cual comence usando la palabra reservada Task para tarea. Aprendan de los errores ajenos no hagan estas cosas sino tendran que estar asi igual que yo

using EF.Models;

namespace API.Service;
public class TaskService : ITaskService
{
    TaskContext context;

    public TaskService(TaskContext dbcontext)
    {
        context = dbcontext;
    }

    public IEnumerable<EF.Models.Task> Get()
    {
        return context.Tasks;
    }

    //Esta es la razon por la que no debemos usar palabras recervadas.
    public async System.Threading.Tasks.Task Save(EF.Models.Task Task)
    {
        context.Add(Task);
        await context.SaveChangesAsync();
    }

    public async System.Threading.Tasks.Task update(Guid id, EF.Models.Task Task)
    {
        var TaskPresent = context.Tasks.Find(id);
        if (TaskPresent != null)
        {
            TaskPresent.Title = Task.Title;
            TaskPresent.Description = Task.Description;
            TaskPresent.Date = Task.Date;
            TaskPresent.PriorityTask = Task.PriorityTask;

            await context.SaveChangesAsync();
        }
    }

    public async System.Threading.Tasks.Task Delete(Guid id)
    {
        var TaskPresent = context.Categoties.Find(id);
        if (TaskPresent != null)
        {
            context.Remove(TaskPresent);
            await context.SaveChangesAsync();
        }
    }

}

public interface ITaskService
{
    IEnumerable<EF.Models.Task> Get();
    System.Threading.Tasks.Task Delete(Guid id);
    System.Threading.Tasks.Task update(Guid id, EF.Models.Task Task);
    System.Threading.Tasks.Task Save(EF.Models.Task Task);

}
En el contexto de una API desarrollada con ASP.NET Core, un "servicio" se refiere a una clase o componente que encapsula la l贸gica de negocio o funcionalidad espec铆fica de la aplicaci贸n. Estos servicios est谩n dise帽ados para realizar tareas espec铆ficas y proporcionar funcionalidades reutilizables que pueden ser utilizadas por diferentes partes de la aplicaci贸n. En ASP.NET Core, la arquitectura t铆pica sigue el patr贸n de Inyecci贸n de Dependencias (Dependency Injection). Esto significa que los servicios necesarios para una operaci贸n espec铆fica se inyectan en lugar de ser instanciados directamente dentro de una clase. La Inyecci贸n de Dependencias facilita la gesti贸n de las dependencias y la modularidad del c贸digo. Aqu铆 hay algunas caracter铆sticas clave de los servicios en el contexto de una API ASP.NET Core: 1. **Encapsulaci贸n de L贸gica de Negocio:** Los servicios se utilizan para encapsular y organizar la l贸gica de negocio de la aplicaci贸n. Por ejemplo, un servicio puede encargarse de la autenticaci贸n, otro de la persistencia de datos en una base de datos, y otro de la l贸gica de negocio espec铆fica de un controlador. 2. **Reutilizaci贸n de C贸digo:** Al dividir la l贸gica de la aplicaci贸n en servicios, se fomenta la reutilizaci贸n de c贸digo. Varios controladores o componentes pueden utilizar el mismo servicio para realizar operaciones similares. 3. **Inyecci贸n de Dependencias:** En ASP.NET Core, los servicios se registran en el contenedor de inversi贸n de control (IoC) y se inyectan en las clases que los necesitan. Esto facilita la gesti贸n de dependencias y mejora la modularidad del c贸digo. 4. **Testabilidad:** La divisi贸n de la l贸gica en servicios facilita la prueba unitaria. Puedes escribir pruebas unitarias para cada servicio de forma independiente, lo que ayuda a garantizar que cada componente de la aplicaci贸n funcione correctamente. Un ejemplo pr谩ctico ser铆a un servicio de gesti贸n de usuarios. Este servicio podr铆a contener m茅todos para crear usuarios, autenticar usuarios, recuperar informaci贸n de usuario, etc. Luego, estos m茅todos pueden ser utilizados por los controladores de la API para realizar operaciones relacionadas con usuarios. En resumen, en el contexto de una API ASP.NET Core, un servicio es un componente que encapsula la l贸gica de negocio, promoviendo la reutilizaci贸n de c贸digo, la inyecci贸n de dependencias y la testabilidad.
Buenas, Tengo este error al intentar crear el save, 驴alguien tiene idea a que se debe?![](https://static.platzi.com/media/user_upload/err-b507470b-571c-4ba2-b1d3-6de61baa1cd9.jpg) ![]()

Vengo de algun futuro, para quien empiece a ver arquitectura limpia, esto es base para entender cuando se hablan de repositorio e interfaces , ademas esto esta en el mismo curso de miguel de programacion deobjetos, sobre las clases abstractas ,
saludos

Aporte de Tareas

![](

![](

![](

Si alguien quiere que le aparezca estas ayudas, solo instalece IntelliCode en su VS Code.
.
.

Aqui mi aporte de la clase TareaService.cs ```c# using API.Models; namespace API.Services; public class TareaService : ITareaService { TareasContext context; public TareaService(TareasContext dbcontext) { context = dbcontext; } public IEnumerable<Tarea> Get() { return context.Tareas; } public async Task Save(Tarea Tarea) { context.Add(Tarea); await context.SaveChangesAsync(); } public async Task Update(Guid id, Tarea Tarea) { var TareaActual = context.Tareas.Find(id); if (TareaActual != null) { TareaActual.Titulo = Tarea.Titulo; TareaActual.Descripcion = Tarea.Descripcion; await context.SaveChangesAsync(); } } public async Task Delete(Guid id) { var TareaActual = context.Tareas.Find(id); if (TareaActual != null) { context.Remove(TareaActual); await context.SaveChangesAsync(); } } } public interface ITareaService { public IEnumerable<Tarea> Get(); Task Save(Tarea Tarea); Task Update(Guid id, Tarea Tarea); Task Delete(Guid id); } ```using API.Models; namespace API.Services; public class TareaService : ITareaService{聽 聽 TareasContext context; 聽 聽 public TareaService(TareasContext dbcontext)聽 聽 {聽 聽 聽 聽 context = dbcontext; 聽 聽 } 聽 聽 public IEnumerable\<Tarea> Get()聽 聽 {聽 聽 聽 聽 return context.Tareas;聽 聽 } 聽 聽 public async Task Save(Tarea Tarea)聽 聽 {聽 聽 聽 聽 context.Add(Tarea);聽 聽 聽 聽await context.SaveChangesAsync();聽 聽 } 聽 聽 public async Task Update(Guid id, Tarea Tarea)聽 聽 {聽 聽 聽 聽 var TareaActual = context.Tareas.Find(id); 聽 聽 聽 聽 if (TareaActual != null)聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 TareaActual.Titulo = Tarea.Titulo;聽 聽 聽 聽 聽 聽 TareaActual.Descripcion = Tarea.Descripcion;聽 聽 聽 聽 聽 聽await context.SaveChangesAsync();聽 聽 聽 聽 }聽 聽 } 聽 聽 public async Task Delete(Guid id)聽 聽 {聽 聽 聽 聽 var TareaActual = context.Tareas.Find(id); 聽 聽 聽 聽 if (TareaActual != null)聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 context.Remove(TareaActual); 聽 聽 聽 聽 聽 聽 await context.SaveChangesAsync();聽 聽 聽 聽 }聽 聽 }} public interface ITareaService {聽 聽public IEnumerable\<Tarea> Get();聽 聽Task Save(Tarea Tarea);聽 聽Task Update(Guid id, Tarea Tarea);聽 聽Task Delete(Guid id); 聽 聽}
```js Tareas: using Microsoft.EntityFrameworkCore; using Microsoft.Identity.Client; using webapi; using webapi.Models; namespace webapi.Services { public class TareasService : ITareasService { TareasContext context; public TareasService(TareasContext dbcontext) { context = dbcontext; } public IEnumerable<Tarea> Get() { return context.Tareas; } public async Task Save(Tarea tarea) { context.Add(tarea); await context.SaveChangesAsync(); } public async Task Update(Guid id, Tarea tarea) { var tareaActual = context.Tareas.Find(id); if(tareaActual != null) { tareaActual.Titulo = tarea.Titulo; tareaActual.Descripcion = tarea.Descripcion; tareaActual.PrioridadTarea = tarea.PrioridadTarea; tareaActual.FechaCreacion = tarea.FechaCreacion; } context.Add(tarea); await context.SaveChangesAsync(); } public async Task Delete(Guid id, Tarea tarea) { var tareaActual = context.Tareas.Find(id); if(tareaActual != null) { context.Remove(tareaActual); await context.SaveChangesAsync(); } } } public interface ITareasService { IEnumerable<Tarea> Get(); Task Save(Tarea tarea); Task Update(Guid id, Tarea tarea); Task Delete(Guid id, Tarea tarea); } } ```using Microsoft.EntityFrameworkCore;using Microsoft.Identity.Client;using webapi;using webapi.Models; namespace webapi.Services{聽 聽 public class TareasService : ITareasService聽 聽 {聽 聽 聽 聽 TareasContext context;聽 聽 聽 聽 public TareasService(TareasContext dbcontext)聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 context = dbcontext;聽 聽 聽 聽 }聽 聽 聽 聽 public IEnumerable\<Tarea> Get()聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 return context.Tareas;聽 聽 聽 聽 }聽 聽 聽 聽 public async Task Save(Tarea tarea)聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 context.Add(tarea);聽 聽 聽 聽 聽 聽 await context.SaveChangesAsync();聽 聽 聽 聽 }聽 聽 聽 聽 public async Task Update(Guid id, Tarea tarea)聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 var tareaActual = context.Tareas.Find(id); 聽 聽 聽 聽 聽 聽 if(tareaActual != null)聽 聽 聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 聽 聽 tareaActual.Titulo = tarea.Titulo;聽 聽 聽 聽 聽 聽 聽 聽 tareaActual.Descripcion = tarea.Descripcion;聽 聽 聽 聽 聽 聽 聽 聽 tareaActual.PrioridadTarea = tarea.PrioridadTarea;聽 聽 聽 聽 聽 聽 聽 聽 tareaActual.FechaCreacion = tarea.FechaCreacion;聽 聽 聽 聽 聽 聽 }聽 聽 聽 聽 聽 聽 context.Add(tarea);聽 聽 聽 聽 聽 聽 await context.SaveChangesAsync();聽 聽 聽 聽 }聽 聽 聽 聽 public async Task Delete(Guid id, Tarea tarea)聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 var tareaActual = context.Tareas.Find(id); 聽 聽 聽 聽 聽 聽 if(tareaActual != null)聽 聽 聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 聽 聽 context.Remove(tareaActual);聽 聽 聽 聽 聽 聽 聽 聽 await context.SaveChangesAsync();聽 聽 聽 聽 聽 聽 }聽 聽 聽 聽 }聽 聽 }聽 聽 public interface ITareasService聽 聽 {聽 聽 聽 聽 IEnumerable\<Tarea> Get(); 聽 聽 聽 聽 聽 聽 聽 Task Save(Tarea tarea);聽 聽 聽 聽 Task Update(Guid id, Tarea tarea);聽 聽 聽 聽 Task Delete(Guid id, Tarea tarea); 聽聽 聽 }}
Hola Compa帽eros/as! Les comparto c贸mo realic茅 el reto de esta clase: ```js public class TareasService:ITareasService { TareasContext context; public TareasService(TareasContext dbcontext) { context = dbcontext; } public IEnumerable<Tarea> Get() { return context.Tareas; } public async Task Save(Tarea tarea) { context.Add(tarea); await context.SaveChangesAsync(); } public async Task Update(Guid id, Tarea tarea) { var tareaActual = context.Tareas.Find(id); if(tareaActual != null) { tareaActual.Titulo = tarea.Titulo; tareaActual.Descripcion = tarea.Descripcion; tareaActual.PrioridadTarea = tarea.PrioridadTarea; tareaActual.FechaCreacion = tarea.FechaCreacion; tareaActual.Resumen = tarea.Resumen; tareaActual.CategoriaId = tarea.CategoriaId; await context.SaveChangesAsync(); } } public async Task Delete(Guid id) { var tareaActual = context.Tareas.Find(id); if(tareaActual != null) { context.Remove(tareaActual); await context.SaveChangesAsync(); } } } public interface ITareasService { IEnumerable<Tarea> Get(); Task Save(Tarea tarea); Task Update(Guid id, Tarea tarea); Task Delete(Guid id); } ```
Los que tengan problemas con los m茅todos save. update y delete, cambien el m茅todo as铆ncrono de SaveChangeAsync() por un m茅todo s铆ncrono context.SaveChange(); eso solucion贸 todos mis problemas.
buaaaa me rindo!, no se porque despu茅s de la ejecuci贸n el update solo me funciona una o dos veces, luego deja de funcionar y tengo que reiniciar la ejecuci贸n para que vuelva a funcionar... me quedo loco

Reto con TareasService:

using webapi.Models;
namespace webapi.Services;

public class TareasService : ITareasService
{
  TareasContext context;

  public TareasService(TareasContext dbContext)
  {
    context = dbContext;
  }

  public IEnumerable<Tarea> Get()
  {
    return context.Tareas;
  }

  public async Task Save(Tarea tarea)
  {
    context.Tareas.Add(tarea);
    await context.SaveChangesAsync();
  }

  public async Task Update(Guid id, Tarea tarea)
  {
    var tareaActual = context.Tareas.Find(id);
    if (tareaActual != null)
    {
      tareaActual.Titulo = tarea.Titulo;
      tareaActual.Descripcion = tarea.Descripcion;
      tareaActual.PrioridadTarea = tarea.PrioridadTarea;
      tareaActual.FechaCreacion = tarea.FechaCreacion;
      tareaActual.Categoria = tarea.Categoria;

      await context.SaveChangesAsync();
    }
  }

  public async Task Delete(Guid id)
  {
    var tareaActual = context.Tareas.Find(id);
    if (tareaActual != null)
    {
      context.Tareas.Remove(tareaActual);
      await context.SaveChangesAsync();
    }
  }
}

public interface ITareasService
{
  IEnumerable<Tarea> Get();
}

   public async Task Save(Tarea tarea)
    {
        context.Add(tarea);
        await context.SaveChangesAsync();
    }

    public async Task Update(Guid id, Tarea tarea)
    {
        var tareaActual = context.Tareas.Find(id);
        
        if(tareaActual != null)
        {
            tareaActual.CategoriaId = tarea.CategoriaId;
            tareaActual.Titulo = tarea.Titulo;
            tareaActual.Descripcion = tarea.Descripcion;
            tareaActual.PrioridadTarea = tarea.PrioridadTarea;
            tareaActual.FechaCreacion = tarea.FechaCreacion;
            tareaActual.Categoria = tarea.Categoria;
            tareaActual.Resumen = tarea.Resumen;

            await context.SaveChangesAsync();

        }
    }
     public async Task Delete(Guid id)
    {
        var tareaActual = context.Tareas.Find(id);
        
        if(tareaActual != null)
        {
            context.Remove(tareaActual);
            await context.SaveChangesAsync();

        }
    }
}

public interface ITareasService
{
    IEnumerable<Tarea> Get();
    Task Save(Tarea tarea);

    Task Update(Guid id, Tarea tarea);
    Task Delete(Guid id);

TareaServices

using WebAPICurso.Models;

namespace WebAPICurso.Services;

public class TareaServices : ITareaServices
{
    TareasContext _context;

    public TareaServices(TareasContext context)
    {
        _context = context;
    }

    public IEnumerable<Tarea> Get()
    {
        return _context.Tareas;
    }

    public async Task Save(Tarea tarea)
    {
        await _context.Tareas.AddAsync(tarea);
        _context.SaveChanges();
    }

    public async Task Update(Guid id, Tarea tarea)
    {
        var tareaActual = _context.Tareas.Find(id);

        if(tareaActual != null)
        {
            tareaActual.Titulo = tarea.Titulo;
            tareaActual.Descripcion = tarea.Descripcion;
            tareaActual.Usuario = tarea.Usuario;

            await _context.SaveChangesAsync();
        }
    }

    public async Task Delete(Guid id)
    {
        var tareaActual = _context.Tareas.Find(id);

        if(tareaActual != null)
        {
            _context.Tareas.Remove(tareaActual);

            await _context.SaveChangesAsync();
        }
    }

}

public interface ITareaServices
{
    IEnumerable<Tarea> Get();

    Task Save(Tarea tarea);

    Task Update(Guid id, Tarea tarea);

    Task Delete(Guid id);
}
//Aqui pienso que es otra forma de buscar la categoria
 var categoriaActual= context.Categorias.FirstOrDefault(p=>p.CategoriaId==id);