/
Airat
/
ASP.NET
Обзор
Документация
Войти
/
Airat
/
ASP.NET
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
NoSQL/src/Pcf.GivingToCustomer/Pcf.GivingToCustomer.WebHost/Controllers/PromocodesController.cs
82 строки
3 KB
Алексей Ягур
Added NoSql homework
20 июл 2024, 00:10
20 июл 2024, 00:10
e21820e
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Pcf.GivingToCustomer.Core.Abstractions.Repositories; using Pcf.GivingToCustomer.Core.Domain; using Pcf.GivingToCustomer.WebHost.Mappers; using Pcf.GivingToCustomer.WebHost.Models; namespace Pcf.GivingToCustomer.WebHost.Controllers { /// <summary> /// Промокоды /// </summary> [ApiController] [Route("api/v1/[controller]")] public class PromocodesController : ControllerBase { private readonly IRepository<PromoCode> _promoCodesRepository; private readonly IRepository<Preference> _preferencesRepository; private readonly IRepository<Customer> _customersRepository; public PromocodesController(IRepository<PromoCode> promoCodesRepository, IRepository<Preference> preferencesRepository, IRepository<Customer> customersRepository) { _promoCodesRepository = promoCodesRepository; _preferencesRepository = preferencesRepository; _customersRepository = customersRepository; } /// <summary> /// Получить все промокоды /// </summary> /// <returns></returns> [HttpGet] public async Task<ActionResult<List<PromoCodeShortResponse>>> GetPromocodesAsync() { var promocodes = await _promoCodesRepository.GetAllAsync(); var response = promocodes.Select(x => new PromoCodeShortResponse() { Id = x.Id, Code = x.Code, BeginDate = x.BeginDate.ToString("yyyy-MM-dd"), EndDate = x.EndDate.ToString("yyyy-MM-dd"), PartnerId = x.PartnerId, ServiceInfo = x.ServiceInfo }).ToList(); return Ok(response); } /// <summary> /// Создать промокод и выдать его клиентам с указанным предпочтением /// </summary> /// <returns></returns> [HttpPost] public async Task<IActionResult> GivePromoCodesToCustomersWithPreferenceAsync(GivePromoCodeRequest request) { //Получаем предпочтение по имени var preference = await _preferencesRepository.GetByIdAsync(request.PreferenceId); if (preference == null) { return BadRequest(); } // Получаем клиентов с этим предпочтением: var customers = await _customersRepository .GetWhere(d => d.Preferences.Any(x => x.Preference.Id == preference.Id)); PromoCode promoCode = PromoCodeMapper.MapFromModel(request, preference, customers); await _promoCodesRepository.AddAsync(promoCode); return CreatedAtAction(nameof(GetPromocodesAsync), new { }, null); } } }