Skip to content

zsdsa #13

New issue

Have a question about this project? Sign up for a free account to open an issue and contact its maintainers and the community.

By clicking “Sign up for ”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on ? Sign in to your account

Closed
wants to merge 18 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions src/Basket/Basket.API/Controllers/BasketController.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,27 +61,27 @@ public async Task<ActionResult> Checkout([FromBody] BasketCheckout basketCheckou
// remove the basket
// send checkout event to rabbitMq

var basket = await _repository.GetBasket(basketCheckout.UserName);
if (basket == null)
{
_logger.LogError("Basket not exist with this user : {EventId}", basketCheckout.UserName);
return BadRequest();
}
//var basket = await _repository.GetBasket(basketCheckout.UserName);
//if (basket == null)
//{
// _logger.LogError("Basket not exist with this user : {EventId}", basketCheckout.UserName);
// return BadRequest();
//}

var basketRemoved = await _repository.DeleteBasket(basketCheckout.UserName);
if (!basketRemoved)
{
_logger.LogError("Basket can not deleted");
return BadRequest();
}
//var basketRemoved = await _repository.DeleteBasket(basketCheckout.UserName);
//if (!basketRemoved)
//{
// _logger.LogError("Basket can not deleted");
// return BadRequest();
//}

// Once basket is checkout, sends an integration event to
// ordering.api to convert basket to order and proceeds with
// order creation process

var eventMessage = _mapper.Map<BasketCheckoutEvent>(basketCheckout);
eventMessage.RequestId = Guid.NewGuid();
eventMessage.TotalPrice = basket.TotalPrice;
eventMessage.TotalPrice = basketCheckout.TotalPrice;

try
{
Expand Down
26 changes: 19 additions & 7 deletions src/Catalog/Catalog.API/Data/CatalogContextSeed.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,9 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
ImageFile = "product-1.png",
Price = 950.00M,
Category = "Smart Phone"
Category = "Smart Phone",
InStock=false,
UrlVideo = "https://www.youtube.com/embed/UqyD2PgOw9Q"
},
new Product()
{
Expand All@@ -35,16 +37,20 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
ImageFile = "product-2.png",
Price = 840.00M,
Category = "Smart Phone"
Category = "Smart Phone",
InStock=true,
UrlVideo = "https://www.youtube.com/embed/UqyD2PgOw9Q"
},
new Product()
{
Name = "Huawei Plus",
Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.",
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
ImageFile = "product-3.png",
Price = 650.00M,
Category = "White Appliances"
Price = 470.00M,
Category = "White Appliances",
InStock=true,
UrlVideo = "https://www.youtube.com/embed/UqyD2PgOw9Q"
},
new Product()
{
Expand All@@ -53,7 +59,9 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
ImageFile = "product-4.png",
Price = 470.00M,
Category = "White Appliances"
Category = "White Appliances",
InStock=false,
UrlVideo = "https://www.youtube.com/embed/UqyD2PgOw9Q"
},
new Product()
{
Expand All@@ -62,7 +70,9 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
ImageFile = "product-5.png",
Price = 380.00M,
Category = "Smart Phone"
Category = "Smart Phone",
InStock=true,
UrlVideo = "https://www.youtube.com/embed/UqyD2PgOw9Q"
},
new Product()
{
Expand All@@ -71,7 +81,9 @@ private static IEnumerable<Product> GetPreconfiguredProducts()
Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.",
ImageFile = "product-6.png",
Price = 240.00M,
Category = "Home Kitchen"
Category = "Home Kitchen",
InStock=true,
UrlVideo = "https://www.youtube.com/embed/UqyD2PgOw9Q"
}
};
}
Expand Down
2 changes: 2 additions & 0 deletions src/Catalog/Catalog.API/Entities/Product.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,5 +16,7 @@ public class Product
public string Description { get; set; }
public string ImageFile { get; set; }
public decimal Price { get; set; }
public bool InStock { get; set; }
public string UrlVideo { get; set; }
}
}
41 changes: 41 additions & 0 deletions src/WebApp/AspnetRunBasics/ApiCollection/BasketRepository.cs
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
using AspnetRunBasics.ApiCollection.Interfaces;
using AspnetRunBasics.CustomExtensions;
using AspnetRunBasics.Models;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace AspnetRunBasics.ApiCollection
{
public class BasketRepository : IBasketRepository
{
private readonly IHttpContextAccessor _httpContextAccessor;
public BasketRepository(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void Update(BasketRepositoryModel basketRepositoryModel)
{
_httpContextAccessor.HttpContext.Session.SetObject("basket", basketRepositoryModel);
}


public BasketRepositoryModel GetAllBasket()
{
var result = _httpContextAccessor.HttpContext.Session.GetObject<BasketRepositoryModel>("basket");
if (result == null)
{
return new BasketRepositoryModel();
}
return result;
}

public void RemoveAllBasket()
{
_httpContextAccessor.HttpContext.Session.Remove("basket");
}

}
}
39 changes: 38 additions & 1 deletion src/WebApp/AspnetRunBasics/ApiCollection/CatalogApi.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@
using AspnetRunBasics.ApiCollection.Interfaces;
using AspnetRunBasics.Models;
using AspnetRunBasics.Settings;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Net.Http;
Expand DownExpand Up@@ -51,12 +52,23 @@ public async Task<IEnumerable<CatalogModel>> GetCatalogByCategory(string categor
.GetHttpMessage();

return await SendRequest<IEnumerable<CatalogModel>>(message);
}

public async Task<CatalogModel> GetProduct(string id)
{
var message = new HttpRequestBuilder(_settings.BaseAddress)
.SetPath(_settings.CatalogPath)
.AddToPath(id)
.HttpMethod(HttpMethod.Get)
.GetHttpMessage();

return await SendRequest<CatalogModel>(message);
}

public async Task<CatalogModel> CreateCatalog(CatalogModel catalogModel)
{
var message = new HttpRequestBuilder(_settings.BaseAddress)
.SetPath(_settings.CatalogPath)
.SetPath(_settings.CatalogPath)
.HttpMethod(HttpMethod.Post)
.GetHttpMessage();

Expand All@@ -65,5 +77,30 @@ public async Task<CatalogModel> CreateCatalog(CatalogModel catalogModel)

return await SendRequest<CatalogModel>(message);
}

public async Task<IActionResult> UpdateCatalog(CatalogModel catalogModel)
{
var message = new HttpRequestBuilder(_settings.BaseAddress)
.SetPath(_settings.CatalogPath)
.HttpMethod(HttpMethod.Put)
.GetHttpMessage();

var json = JsonConvert.SerializeObject(catalogModel);
message.Content = new StringContent(json, Encoding.UTF8, "application/json");

return await SendRequest<IActionResult>(message);
}

public async Task<IActionResult> DeleteCatalog(string id)
{
var message = new HttpRequestBuilder(_settings.BaseAddress)
.SetPath(_settings.CatalogPath)
.HttpMethod(HttpMethod.Delete)
.AddToPath(id)
.GetHttpMessage();

return await SendRequest<IActionResult>(message);
}

}
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
using AspnetRunBasics.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace AspnetRunBasics.ApiCollection.Interfaces
{
public interface IBasketRepository
{
void Update(BasketRepositoryModel basketRepositoryModel);
BasketRepositoryModel GetAllBasket();
void RemoveAllBasket();

}
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
using AspnetRunBasics.Models;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;

Expand All@@ -10,5 +11,9 @@ public interface ICatalogApi
Task<IEnumerable<CatalogModel>> GetCatalogByCategory(string category);
Task<CatalogModel> GetCatalog(string id);
Task<CatalogModel> CreateCatalog(CatalogModel model);
Task<CatalogModel> GetProduct(string id);
Task<IActionResult> UpdateCatalog(CatalogModel catalogModel);
Task<IActionResult> DeleteCatalog(string id);

}
}
123 changes: 123 additions & 0 deletions src/WebApp/AspnetRunBasics/Areas/Admin/Controllers/HomeController.cs
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
using AspnetRunBasics.ApiCollection.Interfaces;
using AspnetRunBasics.Models;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace AspnetRunBasics.Areas.Admin.Controllers
{
public class HomeController : Controller
{
private readonly ICatalogApi _catalogApi;

public HomeController(ICatalogApi catalogApi, IBasketApi basketApi)
{
_catalogApi = catalogApi ?? throw new ArgumentNullException(nameof(catalogApi));
}

public async Task<IActionResult> IndexAsync()
{
var result = await _catalogApi.GetCatalog();

return View(result);
}
public IActionResult Add()
{
return View(new AddCatalogModel());
}

[HttpPost]
public IActionResult Add(AddCatalogModel catalog)
{
if (ModelState.IsValid)
{
CatalogModel catalogModel = new CatalogModel();

if (catalog.ImageURL != null)
{
var type = Path.GetExtension(catalog.ImageURL.FileName);
var newImageName = Guid.NewGuid() + type;

var NewImagePath = Path.Combine(Directory.GetCurrentDirectory(),
"wwwroot/images/product/" + newImageName);
var stream = new FileStream(NewImagePath, FileMode.Create);

//resmi NewImagePath adresine kopyaladık
catalog.ImageURL.CopyTo(stream);
catalogModel.ImageFile = newImageName;
}

catalogModel.Name = catalog.Name;
catalogModel.Description = catalog.Description;
catalogModel.Price = catalog.Price;
catalogModel.Category = catalog.Category;
catalogModel.Summary = catalog.Summary;

_catalogApi.CreateCatalog(catalogModel);
return RedirectToAction("Index", "Home", new { area = "Admin" });
}
return View(catalog);
}


public async Task<IActionResult> UpdateAsync(string id)
{
var catalogModel = await _catalogApi.GetProduct(id);


AddCatalogModel addCatalogModel = new AddCatalogModel
{
Id = catalogModel.Id,
Name = catalogModel.Name,
Description = catalogModel.Description,
Price = catalogModel.Price,
Category = catalogModel.Category,
Summary = catalogModel.Summary
};
return View(addCatalogModel);
}

[HttpPost]
public async Task<IActionResult> UpdateAsync(AddCatalogModel addCatalogModel)
{
if (ModelState.IsValid)
{
var catalogModel = await _catalogApi.GetProduct(addCatalogModel.Id);
if (addCatalogModel.ImageURL != null)
{
var type = Path.GetExtension(addCatalogModel.ImageURL.FileName);
var newImageName = Guid.NewGuid() + type;

var NewImagePath = Path.Combine(Directory.GetCurrentDirectory(),
"wwwroot/images/product/" + newImageName);
var stream = new FileStream(NewImagePath, FileMode.Create);

addCatalogModel.ImageURL.CopyTo(stream);
catalogModel.ImageFile = newImageName;

}
catalogModel.Id = addCatalogModel.Id;
catalogModel.Name = addCatalogModel.Name;
catalogModel.Description = addCatalogModel.Description;
catalogModel.Price = addCatalogModel.Price;
catalogModel.Category = addCatalogModel.Category;
catalogModel.Summary = addCatalogModel.Summary;

_catalogApi.UpdateCatalog(catalogModel);
return RedirectToAction("Index", "Home", new { area = "Admin" });
}
return View(addCatalogModel);
}

public IActionResult Delete(string id)
{
_catalogApi.DeleteCatalog(id);

return RedirectToAction("Index", "Home", new { area = "Admin" });
}

}
}
Loading