Implement generic repo pattern and unitofwork
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
using GerbilManagerWebAPI.Models;
|
||||
using GerbilManagerWebAPI.Repositories;
|
||||
using GerbilManagerWebAPI.DAL;
|
||||
using GerbilManagerWebAPI.Dtos;
|
||||
|
||||
using GerbilManagerWebAPI.Converter;
|
||||
@@ -13,20 +13,18 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[Route("breeders")]
|
||||
public class BreederController : ControllerBase
|
||||
{
|
||||
private readonly IGerbilRepository gerbilrepository;
|
||||
private readonly IBreederRepository repository;
|
||||
private readonly ILitterRepository litterRepository;
|
||||
private readonly UnitOfWork unitOfWork;
|
||||
|
||||
public BreederController(IBreederRepository repo)
|
||||
public BreederController(UnitOfWork unitOfWork)
|
||||
{
|
||||
this.repository = repo;
|
||||
this.unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
//GET /gerbils
|
||||
[HttpGet]
|
||||
public IEnumerable<BreederDto> GetBreeders()
|
||||
{
|
||||
var items = repository.GetBreeders().Select( breeder => breeder.AsDto());
|
||||
var items = unitOfWork.BreederRepository.Get().Select( breeder => breeder.AsDto());
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -34,7 +32,7 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[HttpGet("{id}")]
|
||||
public ActionResult<BreederDto> GetBreeder(Guid id)
|
||||
{
|
||||
var item = repository.GetBreeder(id).AsDto();
|
||||
var item = unitOfWork.BreederRepository.GetByID(id).AsDto();
|
||||
|
||||
if(item is null)
|
||||
{
|
||||
@@ -51,7 +49,7 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
Name = dto.Name,
|
||||
};
|
||||
|
||||
this.repository.CreateBreeder(breeder);
|
||||
this.unitOfWork.BreederRepository.Insert(breeder);
|
||||
|
||||
return CreatedAtAction(nameof(GetBreeder), new { id = breeder.Id}, breeder.AsDto());
|
||||
}
|
||||
@@ -59,7 +57,7 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[HttpPut("{id}")]
|
||||
public ActionResult UpdateBreeder(Guid id, UpdateBreederDto breederDto)
|
||||
{
|
||||
var existingItem = repository.GetBreeder(id);
|
||||
var existingItem = unitOfWork.BreederRepository.GetByID(id);
|
||||
if(existingItem is null)
|
||||
{
|
||||
return NotFound();
|
||||
@@ -69,21 +67,21 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
Name = breederDto.Name
|
||||
};
|
||||
|
||||
repository.UpdateBreeder(updatedBreeder);
|
||||
unitOfWork.BreederRepository.Update(updatedBreeder);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpDelete("{id}")]
|
||||
public ActionResult DeleteBreeder(Guid id)
|
||||
{
|
||||
var existingLitter = repository.GetBreeder(id);
|
||||
var existingLitter = unitOfWork.BreederRepository.GetByID(id);
|
||||
|
||||
if(existingLitter is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
repository.DeleteBreeder(existingLitter);
|
||||
unitOfWork.BreederRepository.Delete(existingLitter);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using GerbilManagerWebAPI.Models;
|
||||
using GerbilManagerWebAPI.Repositories;
|
||||
using GerbilManagerWebAPI.DAL;
|
||||
using GerbilManagerWebAPI.Dtos;
|
||||
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
@@ -11,20 +11,23 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[Route("gerbils")]
|
||||
public class GerbilsController : ControllerBase
|
||||
{
|
||||
private readonly IGerbilRepository repository;
|
||||
private readonly IBreederRepository breederRepository;
|
||||
private readonly ILitterRepository litterRepository;
|
||||
private readonly UnitOfWork unitOfWork;
|
||||
|
||||
public GerbilsController(IGerbilRepository repo)
|
||||
public GerbilsController(UnitOfWork unitOfWork)
|
||||
{
|
||||
this.repository = repo;
|
||||
this.unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
//GET /gerbils
|
||||
[HttpGet]
|
||||
public IEnumerable<GerbilDto> GetGerbils()
|
||||
public IEnumerable<GerbilDto> GetGerbils([FromQuery]string? name)
|
||||
{
|
||||
var items = repository.GetGerbils().Select( gerbil => gerbil.AsDto());
|
||||
if(name != null)
|
||||
{
|
||||
return unitOfWork.GerbilRepository.Get(filter: x => x.Name == name).Select( gerbil => gerbil.AsDto());
|
||||
}
|
||||
|
||||
var items = unitOfWork.GerbilRepository.Get().Select( gerbil => gerbil.AsDto());
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -32,7 +35,7 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[HttpGet("{id}")]
|
||||
public ActionResult<GerbilDto> GetGerbil(Guid id)
|
||||
{
|
||||
var item = repository.GetGerbil(id).AsDto();
|
||||
var item = unitOfWork.GerbilRepository.GetByID(id).AsDto();
|
||||
|
||||
if(item is null)
|
||||
{
|
||||
@@ -52,15 +55,15 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
|
||||
if(dto.Litter != Guid.Empty)
|
||||
{
|
||||
gerbil.Litter = litterRepository.GetLitter(dto.Litter);
|
||||
gerbil.Litter = unitOfWork.LitterRepository.GetByID(dto.Litter);
|
||||
}
|
||||
|
||||
if(dto.Breeder != Guid.Empty)
|
||||
{
|
||||
gerbil.Breeder = breederRepository.GetBreeder(dto.Breeder);
|
||||
gerbil.Breeder = unitOfWork.BreederRepository.GetByID(dto.Breeder);
|
||||
}
|
||||
|
||||
this.repository.CreateGerbil(gerbil);
|
||||
this.unitOfWork.GerbilRepository.Insert(gerbil);
|
||||
|
||||
return CreatedAtAction(nameof(GetGerbil), new { id = gerbil.Id}, gerbil.AsDto());
|
||||
}
|
||||
@@ -68,34 +71,34 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[HttpPut("{id}")]
|
||||
public ActionResult UpdateGerbil(Guid id, UpdateGerbilDto gerbilDto)
|
||||
{
|
||||
var existingItem = repository.GetGerbil(id);
|
||||
var existingItem = unitOfWork.GerbilRepository.GetByID(id);
|
||||
if(existingItem is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
Gerbil updatedGerbil = existingItem with{
|
||||
Breeder = breederRepository.GetBreeder(gerbilDto.Breeder.Id),
|
||||
Litter = litterRepository.GetLitter(gerbilDto.Litter.Id),
|
||||
Breeder = unitOfWork.BreederRepository.GetByID(gerbilDto.Breeder.Id),
|
||||
Litter = unitOfWork.LitterRepository.GetByID(gerbilDto.Litter.Id),
|
||||
Gender = (Gender) (int) gerbilDto.Gender,
|
||||
Name = gerbilDto.Name
|
||||
};
|
||||
|
||||
repository.UpdateGerbil(updatedGerbil);
|
||||
unitOfWork.GerbilRepository.Update(updatedGerbil);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpDelete("{id}")]
|
||||
public ActionResult DeleteGerbil(Guid id)
|
||||
{
|
||||
var existingGerbil = repository.GetGerbil(id);
|
||||
var existingGerbil = unitOfWork.GerbilRepository.GetByID(id);
|
||||
|
||||
if(existingGerbil is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
repository.DeleteGerbil(existingGerbil);
|
||||
unitOfWork.GerbilRepository.Delete(existingGerbil);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using GerbilManagerWebAPI.Models;
|
||||
using GerbilManagerWebAPI.Repositories;
|
||||
using GerbilManagerWebAPI.DAL;
|
||||
using GerbilManagerWebAPI.Dtos;
|
||||
|
||||
using GerbilManagerWebAPI.Converter;
|
||||
@@ -13,20 +13,18 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[Route("litters")]
|
||||
public class LittersController : ControllerBase
|
||||
{
|
||||
private readonly IGerbilRepository gerbilrepository;
|
||||
private readonly IBreederRepository breederRepository;
|
||||
private readonly ILitterRepository repository;
|
||||
private readonly UnitOfWork unitOfWork;
|
||||
|
||||
public LittersController(ILitterRepository repo)
|
||||
public LittersController(UnitOfWork unitOfWork)
|
||||
{
|
||||
this.repository = repo;
|
||||
this.unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
//GET /gerbils
|
||||
[HttpGet]
|
||||
public IEnumerable<LitterDto> GetLitters()
|
||||
{
|
||||
var items = repository.GetLitters().Select( litter => litter.AsDto());
|
||||
var items = unitOfWork.LitterRepository.Get().Select( litter => litter.AsDto());
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -34,7 +32,7 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[HttpGet("{id}")]
|
||||
public ActionResult<LitterDto> GetLitter(Guid id)
|
||||
{
|
||||
var item = repository.GetLitter(id).AsDto();
|
||||
var item = unitOfWork.LitterRepository.GetByID(id).AsDto();
|
||||
|
||||
if(item is null)
|
||||
{
|
||||
@@ -49,13 +47,13 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
Litter litter = new Litter{
|
||||
Id = Guid.NewGuid(),
|
||||
Date = dto.Date,
|
||||
Father = gerbilrepository.GetGerbil(dto.Father ?? Guid.Empty),
|
||||
Mother = gerbilrepository.GetGerbil(dto.Mother ?? Guid.Empty),
|
||||
Father = this.unitOfWork.GerbilRepository.GetByID(dto.Father ?? Guid.Empty),
|
||||
Mother = this.unitOfWork.GerbilRepository.GetByID(dto.Mother ?? Guid.Empty),
|
||||
Name = dto.Name,
|
||||
Strength = dto.Strength
|
||||
};
|
||||
|
||||
this.repository.CreateLitter(litter);
|
||||
this.unitOfWork.LitterRepository.Insert(litter);
|
||||
|
||||
return CreatedAtAction(nameof(GetLitter), new { id = litter.Id}, litter.AsDto());
|
||||
}
|
||||
@@ -63,7 +61,7 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
[HttpPut("{id}")]
|
||||
public ActionResult UpdateLitter(Guid id, UpdateLitterDto litterDto)
|
||||
{
|
||||
var existingItem = repository.GetLitter(id);
|
||||
var existingItem = unitOfWork.LitterRepository.GetByID(id);
|
||||
if(existingItem is null)
|
||||
{
|
||||
return NotFound();
|
||||
@@ -72,26 +70,26 @@ namespace GerbilManagerWebAPI.Controllers
|
||||
Litter updatedLitter = existingItem with{
|
||||
Date = litterDto.Date ?? DateTime.Now,
|
||||
Strength = litterDto.Strength,
|
||||
Father = gerbilrepository.GetGerbil(litterDto.Father ?? Guid.Empty),
|
||||
Mother = gerbilrepository.GetGerbil(litterDto.Mother ?? Guid.Empty),
|
||||
Father = this.unitOfWork.GerbilRepository.GetByID(litterDto.Father ?? Guid.Empty),
|
||||
Mother = this.unitOfWork.GerbilRepository.GetByID(litterDto.Mother ?? Guid.Empty),
|
||||
Name = litterDto.Name
|
||||
};
|
||||
|
||||
repository.UpdateLitter(updatedLitter);
|
||||
unitOfWork.LitterRepository.Update(updatedLitter);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpDelete("{id}")]
|
||||
public ActionResult DeleteLitter(Guid id)
|
||||
{
|
||||
var existingLitter = repository.GetLitter(id);
|
||||
var existingLitter = unitOfWork.LitterRepository.GetByID(id);
|
||||
|
||||
if(existingLitter is null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
repository.DeleteLitter(existingLitter);
|
||||
unitOfWork.LitterRepository.Delete(existingLitter);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user