From 0f7ee0fd67c6938164fe9fdaa6cb40cf9e0bee8e Mon Sep 17 00:00:00 2001 From: luxick Date: Thu, 5 Mar 2020 18:32:17 +0100 Subject: [PATCH] Implement DrinksService.cs --- EstusShots.Server/Services/DrinksService.cs | 60 ++++++++++++++++++--- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/EstusShots.Server/Services/DrinksService.cs b/EstusShots.Server/Services/DrinksService.cs index f9f3ab3..48f6c58 100644 --- a/EstusShots.Server/Services/DrinksService.cs +++ b/EstusShots.Server/Services/DrinksService.cs @@ -1,25 +1,73 @@ +using System.Collections.Generic; using System.Threading.Tasks; +using AutoMapper; +using EstusShots.Server.Models; using EstusShots.Shared.Interfaces; using EstusShots.Shared.Models; using EstusShots.Shared.Models.Parameters; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Dto = EstusShots.Shared.Dto; namespace EstusShots.Server.Services { public class DrinksService : IDrinksController { - public Task> GetDrinks(GetDrinksParameter parameter) + private readonly ILogger _logger; + private readonly IMapper _mapper; + private readonly EstusShotsContext _context; + + public DrinksService(ILogger logger, IMapper mapper, EstusShotsContext context) { - throw new System.NotImplementedException(); + _logger = logger; + _mapper = mapper; + _context = context; } - public Task> GetDrinkDetails(GetDrinkDetailsParameter parameter) + public async Task> GetDrinks(GetDrinksParameter parameter) { - throw new System.NotImplementedException(); + var drinks = await _context.Drinks.ToListAsync(); + var dtos = _mapper.Map>(drinks); + return new ApiResponse(new GetDrinksResponse(dtos)); } - public Task> SaveDrink(SaveDrinkParameter parameter) + public async Task> GetDrinkDetails(GetDrinkDetailsParameter parameter) { - throw new System.NotImplementedException(); + var drink = await _context.Drinks.FindAsync(parameter.DrinkId); + if (drink == null) + { + _logger.LogWarning($"Drink with ID '{parameter.DrinkId}' was not found in database"); + return new ApiResponse(new OperationResult(false, "Object not found")); + } + + var dto = _mapper.Map(drink); + return new ApiResponse(new GetDrinkDetailsResponse(dto)); + } + + public async Task> SaveDrink(SaveDrinkParameter parameter) + { + if (parameter.Drink.DrinkId.IsEmpty()) + { + var drink = _mapper.Map(parameter.Drink); + _context.Drinks.Add(drink); + var count = await _context.SaveChangesAsync(); + _logger.LogInformation($"Created drink '{drink.DrinkId}' ({count} rows updated)"); + return new ApiResponse(new SaveDrinkResponse(drink.DrinkId)); + } + else + { + var drink = await _context.Drinks.FindAsync(parameter.Drink.DrinkId); + if (drink == null) + { + _logger.LogError($"Cannot update drink '{parameter.Drink.DrinkId}'. Not in database."); + return new ApiResponse(new OperationResult(false, "Object not found")); + } + _context.Drinks.Update(drink); + _mapper.Map(parameter.Drink, drink); + var count = await _context.SaveChangesAsync(); + _logger.LogInformation($"Updated drink '{drink.DrinkId}' ({count} rows updated)"); + return new ApiResponse(new SaveDrinkResponse(drink.DrinkId)); + } } } } \ No newline at end of file