Skip to content

Commit 066c0b3

Browse files
author
laxmikant
committed
added solution
1 parent 31774f6 commit 066c0b3

File tree

99 files changed

+4713
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+4713
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using AutoMapper;
2+
using GeekStore.API.Core.Data.Models;
3+
using GeekStore.API.Core.DTOs.Product;
4+
5+
namespace GeekStore.API.Core.Configurations
6+
{
7+
public class GetProductDiscount : IValueResolver<Product, ProductDto, decimal>
8+
{
9+
public decimal Resolve(Product source, ProductDto destination, decimal destMember, ResolutionContext context)
10+
{
11+
return source.Price - source.Category.CategoryDiscount;
12+
}
13+
}
14+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using AutoMapper;
2+
using GeekStore.API.Core.Data.Models;
3+
using GeekStore.API.Core.DTOs.Category;
4+
using GeekStore.API.Core.DTOs.Product;
5+
using Microsoft.EntityFrameworkCore.Query;
6+
7+
namespace GeekStore.API.Core.Configurations
8+
{
9+
public class MapperConfig : Profile
10+
{
11+
public MapperConfig()
12+
{
13+
CreateMap<Category, CreateCategoryDto>().ReverseMap();
14+
CreateMap<Category, GetCategoryDetailsDto>().ReverseMap();
15+
CreateMap<Category, DeleteCategoryDto>().ReverseMap();
16+
CreateMap<Category, UpdateCategoryDiscountDto>().ReverseMap();
17+
CreateMap<Category, UpdateCategoryDto>().ReverseMap();
18+
CreateMap<Category, GetCategoryProductsDto>();
19+
20+
21+
//CreateMap<Category, GetCategoryProductsDto>()
22+
// .AfterMap((src, dest) =>
23+
// {
24+
// dest.Products.ForEach(x => x.Price -= src.CategoryDiscount);
25+
// });
26+
27+
//CreateMap<Product, ProductDto>()
28+
// .ForMember(
29+
// dest => dest.Price,
30+
// opt => opt.MapFrom((src, dest, member, context) => src.Price - src.Category.CategoryDiscount));
31+
32+
33+
//CreateMap<Category, GetCategoryProductsDto>()
34+
// .ConvertUsing<CategoryProductsMapper>();
35+
//CreateMap<Category, List<ProductDto>>().ReverseMap();
36+
37+
CreateMap<Product, ProductDto>().ReverseMap();
38+
39+
//CreateMap<Product, ProductDto>()
40+
// .ForMember(dest => dest.Price, source => source.MapFrom<GetProductDiscount>())
41+
// .ForMember(dest => dest.CategoryName, source => source.MapFrom(s => s.Category.CategoryName));
42+
43+
44+
}
45+
}
46+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using GeekStore.API.Core.Data.Models;
2+
3+
4+
namespace GeekStore.API.Core.Contracts
5+
{
6+
public interface ICategoryRepository
7+
{
8+
Task<Category?> GetAsync(int? categoryId);
9+
10+
Task<List<Category>> GetAllAsync();
11+
12+
Task<Category> CreateAsync(Category category);
13+
14+
Task DeleteAsync(int categoryId);
15+
16+
Task UpdateAsync(Category category);
17+
}
18+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
using AutoMapper;
2+
using GeekStore.API.Core.Contracts;
3+
using GeekStore.API.Core.Data.Models;
4+
using GeekStore.API.Core.DTOs.Category;
5+
using Microsoft.AspNetCore.Mvc;
6+
7+
8+
namespace GeekStore.API.Core.Controllers
9+
{
10+
[Route("api/[controller]")]
11+
[ApiController]
12+
public class CategoryController : ControllerBase
13+
{
14+
private readonly IMapper _mapper;
15+
private readonly ICategoryRepository _categoryRepository;
16+
17+
public CategoryController(IMapper mapper,
18+
ICategoryRepository categoryRepository)
19+
{
20+
this._mapper = mapper;
21+
this._categoryRepository = categoryRepository;
22+
}
23+
24+
[HttpPost]
25+
public async Task<ActionResult<Category>> CreateCategory(CreateCategoryDto createCategoryDto)
26+
{
27+
var category = _mapper.Map<Category>(createCategoryDto);
28+
29+
await this._categoryRepository.CreateAsync(category);
30+
31+
return CreatedAtAction("GetCategory", new { id = category.Id }, category);
32+
}
33+
34+
35+
// GET: api/GetCategory/1
36+
[HttpGet("GetCategory")]
37+
public async Task<ActionResult<GetCategoryDetailsDto>> GetCategory(int categoryId)
38+
{
39+
var category = await this._categoryRepository.GetAsync(categoryId);
40+
41+
if (category == null)
42+
{
43+
throw new Exception($"CategoryID {categoryId} is not found.");
44+
}
45+
46+
var categoryDetailsDto = _mapper.Map<GetCategoryDetailsDto>(category);
47+
48+
return Ok(categoryDetailsDto);
49+
}
50+
51+
52+
[HttpGet("GetAllCategories")]
53+
54+
public async Task<ActionResult<List<GetCategoryDetailsDto>>> GetAllCategories()
55+
{
56+
var categories = await this._categoryRepository.GetAllAsync();
57+
var records = _mapper.Map<List<GetCategoryDetailsDto>>(categories);
58+
return Ok(records);
59+
}
60+
61+
[HttpPut("UpdateCategory")]
62+
public async Task<IActionResult> UpdateCategory(int categoryId, UpdateCategoryDto updateCategoryDto)
63+
{
64+
if (categoryId != updateCategoryDto.Id)
65+
{
66+
return BadRequest("Invalid Category Id");
67+
}
68+
69+
var category = await _categoryRepository.GetAsync(categoryId);
70+
71+
if (category == null)
72+
{
73+
throw new Exception($"CategoryID {categoryId} is not found.");
74+
}
75+
76+
_mapper.Map(updateCategoryDto, category);
77+
78+
try
79+
{
80+
await _categoryRepository.UpdateAsync(category);
81+
}
82+
catch (Exception)
83+
{
84+
throw new Exception($"Error occured while updating CategoryID {categoryId}.");
85+
}
86+
87+
return NoContent();
88+
}
89+
90+
[HttpDelete("DeleteCategory")]
91+
public async Task<IActionResult> DeleteCategory(int categoryId)
92+
{
93+
await _categoryRepository.DeleteAsync(categoryId);
94+
return NoContent();
95+
}
96+
}
97+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace GeekStore.API.Core.DTOs.Category
2+
{
3+
public class CreateCategoryDto
4+
{
5+
public string CategoryName { get; set; } = string.Empty;
6+
7+
public string Description { get; set; } = string.Empty;
8+
9+
public int CategoryDiscount { get; set; }
10+
}
11+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace GeekStore.API.Core.DTOs.Category
2+
{
3+
public class DeleteCategoryDto
4+
{
5+
public int Id { get; set; }
6+
}
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace GeekStore.API.Core.DTOs.Category
2+
{
3+
public class GetCategoryDetailsDto
4+
{
5+
public int Id { get; set; }
6+
7+
public string CategoryName { get; set; } = string.Empty;
8+
}
9+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using GeekStore.API.Core.DTOs.Product;
2+
using Microsoft.EntityFrameworkCore.Query;
3+
using GeekStore.API.Core.Data.Models;
4+
5+
namespace GeekStore.API.Core.DTOs.Category
6+
{
7+
public class GetCategoryProductsDto
8+
{
9+
public int Id { get; set; }
10+
11+
public string CategoryName { get; set; } = string.Empty;
12+
13+
public int CategoryDiscount { get; set; }
14+
15+
public List<ProductDto> Products { get; set; }
16+
17+
}
18+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace GeekStore.API.Core.DTOs.Category
2+
{
3+
public class UpdateCategoryDiscountDto
4+
{
5+
public int Id { get; set; }
6+
7+
public float CategoryDiscount { get; set; }
8+
}
9+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace GeekStore.API.Core.DTOs.Category
2+
{
3+
public class UpdateCategoryDto
4+
{
5+
public int Id { get; set; }
6+
public string CategoryName { get; set; } = string.Empty;
7+
8+
public string Description { get; set; } = string.Empty;
9+
10+
public int CategoryDiscount { get; set; }
11+
}
12+
}

0 commit comments

Comments
 (0)