From 5e1346731561fd0612cf76ec7fe4e34cf32ebb00 Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Fri, 13 Oct 2017 17:55:54 +0100 Subject: [PATCH] no more dynamics as a return types from controllers --- .../Application/Queries/IOrderQueries.cs | 6 +-- .../Application/Queries/OrderQueries.cs | 52 +++++++++---------- .../Application/Queries/OrderViewModel.cs | 41 +++++++++++++++ .../Controllers/OrdersController.cs | 4 +- 4 files changed, 73 insertions(+), 30 deletions(-) create mode 100644 src/Services/Ordering/Ordering.API/Application/Queries/OrderViewModel.cs diff --git a/src/Services/Ordering/Ordering.API/Application/Queries/IOrderQueries.cs b/src/Services/Ordering/Ordering.API/Application/Queries/IOrderQueries.cs index 253b01e9c..10aaf3415 100644 --- a/src/Services/Ordering/Ordering.API/Application/Queries/IOrderQueries.cs +++ b/src/Services/Ordering/Ordering.API/Application/Queries/IOrderQueries.cs @@ -5,10 +5,10 @@ public interface IOrderQueries { - Task GetOrderAsync(int id); + Task GetOrderAsync(int id); - Task> GetOrdersAsync(); + Task> GetOrdersAsync(); - Task> GetCardTypesAsync(); + Task> GetCardTypesAsync(); } } diff --git a/src/Services/Ordering/Ordering.API/Application/Queries/OrderQueries.cs b/src/Services/Ordering/Ordering.API/Application/Queries/OrderQueries.cs index a57c61334..59cc8a823 100644 --- a/src/Services/Ordering/Ordering.API/Application/Queries/OrderQueries.cs +++ b/src/Services/Ordering/Ordering.API/Application/Queries/OrderQueries.cs @@ -1,11 +1,9 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Queries { using Dapper; - using Microsoft.Extensions.Configuration; using System.Data.SqlClient; using System.Threading.Tasks; using System; - using System.Dynamic; using System.Collections.Generic; public class OrderQueries @@ -19,7 +17,7 @@ } - public async Task GetOrderAsync(int id) + public async Task GetOrderAsync(int id) { using (var connection = new SqlConnection(_connectionString)) { @@ -44,13 +42,13 @@ } } - public async Task> GetOrdersAsync() + public async Task> GetOrdersAsync() { using (var connection = new SqlConnection(_connectionString)) { connection.Open(); - return await connection.QueryAsync(@"SELECT o.[Id] as ordernumber,o.[OrderDate] as [date],os.[Name] as [status],SUM(oi.units*oi.unitprice) as total + return await connection.QueryAsync(@"SELECT o.[Id] as ordernumber,o.[OrderDate] as [date],os.[Name] as [status],SUM(oi.units*oi.unitprice) as total FROM [ordering].[Orders] o LEFT JOIN[ordering].[orderitems] oi ON o.Id = oi.orderid LEFT JOIN[ordering].[orderstatus] os on o.OrderStatusId = os.Id @@ -59,39 +57,41 @@ } } - public async Task> GetCardTypesAsync() + public async Task> GetCardTypesAsync() { using (var connection = new SqlConnection(_connectionString)) { connection.Open(); - return await connection.QueryAsync("SELECT * FROM ordering.cardtypes"); + return await connection.QueryAsync("SELECT * FROM ordering.cardtypes"); } } - private dynamic MapOrderItems(dynamic result) + private Order MapOrderItems(dynamic result) { - dynamic order = new ExpandoObject(); - - order.ordernumber = result[0].ordernumber; - order.date = result[0].date; - order.status = result[0].status; - order.description = result[0].description; - order.street = result[0].street; - order.city = result[0].city; - order.zipcode = result[0].zipcode; - order.country = result[0].country; - - order.orderitems = new List(); - order.total = 0; + var order = new Order + { + ordernumber = result[0].ordernumber, + date = result[0].date, + status = result[0].status, + description = result[0].description, + street = result[0].street, + city = result[0].city, + zipcode = result[0].zipcode, + country = result[0].country, + orderitems = new List(), + total = 0 + }; foreach (dynamic item in result) { - dynamic orderitem = new ExpandoObject(); - orderitem.productname = item.productname; - orderitem.units = item.units; - orderitem.unitprice = item.unitprice; - orderitem.pictureurl = item.pictureurl; + var orderitem = new Orderitem + { + productname = item.productname, + units = item.units, + unitprice = (double)item.unitprice, + pictureurl = item.pictureurl + }; order.total += item.units * item.unitprice; order.orderitems.Add(orderitem); diff --git a/src/Services/Ordering/Ordering.API/Application/Queries/OrderViewModel.cs b/src/Services/Ordering/Ordering.API/Application/Queries/OrderViewModel.cs new file mode 100644 index 000000000..a4f5eb0a9 --- /dev/null +++ b/src/Services/Ordering/Ordering.API/Application/Queries/OrderViewModel.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; + +namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Queries +{ + public class Orderitem + { + public string productname { get; set; } + public int units { get; set; } + public double unitprice { get; set; } + public string pictureurl { get; set; } + } + + public class Order + { + public int ordernumber { get; set; } + public DateTime date { get; set; } + public string status { get; set; } + public string description { get; set; } + public string street { get; set; } + public string city { get; set; } + public string zipcode { get; set; } + public string country { get; set; } + public List orderitems { get; set; } + public decimal total { get; set; } + } + + public class OrderSummary + { + public int ordernumber { get; set; } + public DateTime date { get; set; } + public string status { get; set; } + public double total { get; set; } + } + + public class CardType + { + public int Id { get; set; } + public string Name { get; set; } + } +} diff --git a/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs b/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs index c43e65d63..bc1fef585 100644 --- a/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs +++ b/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs @@ -64,7 +64,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Controllers [Route("{orderId:int}")] [HttpGet] - [ProducesResponseType((int)HttpStatusCode.OK)] + [ProducesResponseType(typeof(Order),(int)HttpStatusCode.OK)] [ProducesResponseType((int)HttpStatusCode.NotFound)] public async Task GetOrder(int orderId) { @@ -83,6 +83,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Controllers [Route("")] [HttpGet] + [ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)] public async Task GetOrders() { var orderTask = _orderQueries.GetOrdersAsync(); @@ -94,6 +95,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Controllers [Route("cardtypes")] [HttpGet] + [ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)] public async Task GetCardTypes() { var cardTypes = await _orderQueries