Created
October 2, 2020 15:30
-
-
Save carneirocorp/c77a0686e7a4cac1ece4a23650d113c0 to your computer and use it in GitHub Desktop.
Controller
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Threading.Tasks; | |
using Microsoft.AspNetCore.Http; | |
using Microsoft.AspNetCore.Mvc; | |
using Microsoft.Extensions.Caching.Memory; | |
using Oba.Services.API.Config; | |
using Oba.Services.API.Data; | |
using Oba.Services.API.Models; | |
using Oba.Services.API.Providers.Cielo.Models; | |
using Oba.Services.API.Providers.Cielo.Services; | |
using Oba.Services.API.Providers.Consinco.Service; | |
using Oba.Services.API.Providers.Google; | |
using Oba.Services.API.Providers.Oba.Models; | |
using Oba.Services.API.Providers.Oba.Services; | |
using Org.BouncyCastle.Ocsp; | |
namespace Oba.Services.API.Controllers | |
{ | |
[Route("api/[controller]")] | |
[ApiController] | |
public class ObaController : ApiController | |
{ | |
private readonly ObaProductService _productService; | |
private readonly ObaEmailService _emailService; | |
private readonly CieloService _cieloService; | |
private readonly CieloConfiguration _cieloConfiguration; | |
private readonly IMemoryCache _cache; | |
public ObaController([FromServices] ObaConfiguration configuration, [FromServices] EmailConfiguration email, IMemoryCache cache, [FromServices] CieloConfiguration cieloConfiguration) | |
{ | |
_productService = new ObaProductService(configuration); | |
_emailService = new ObaEmailService(configuration, email); | |
_cieloService = new CieloService(cieloConfiguration); | |
_cieloConfiguration = cieloConfiguration; | |
_cache = cache; | |
} | |
[HttpGet("getSaleByIdAndState")] | |
public ActionResult GetOnSale([FromQuery] int id, [FromQuery] string state) | |
{ | |
var data = _productService.OnSale(new Providers.Oba.Models.OnSaleRequest | |
{ | |
CompanyId = id, | |
State = state | |
}); | |
Envelope.Data = data; | |
return Ok(Envelope); | |
} | |
[HttpGet("buyAgain")] | |
public ActionResult BuyAgain([FromQuery] string nroEmpresa, [FromQuery] string uf, [FromQuery] string cpfCnpj) | |
{ | |
var key = $"{CacheKeys.Stores}_{nroEmpresa}_{uf}_{cpfCnpj}"; | |
if (!_cache.TryGetValue(key, out List<ProductResponse> response)) | |
{ | |
response = _productService.BuyAgain(new BuyAgainRequest | |
{ | |
CompanyId = int.Parse(nroEmpresa), | |
Document = cpfCnpj, | |
State = uf | |
}); | |
_cache.Set(key, response, BaseService.GetExpirationOption()); | |
} | |
Envelope.Data = response; | |
return Ok(Envelope); | |
} | |
[HttpGet("getSimilars")] | |
public ActionResult GetSimilars([FromQuery] string sku, [FromQuery] int id, [FromQuery] string state) | |
{ | |
var data = _productService.Similars(new Providers.Oba.Models.SimilarProductRequest | |
{ | |
CompanyId = id, | |
State = state, | |
Sku = sku | |
}); | |
Envelope.Data = data; | |
return Ok(Envelope); | |
} | |
[HttpPost("sendEmail")] | |
public ActionResult SendEmail([FromBody] SendEmailModel model) | |
{ | |
try | |
{ | |
_emailService.SendEmail(model.Subject, model.Message); | |
Envelope.Message = "E-mail enviado com sucesso"; | |
return Ok(Envelope); | |
} | |
catch(Exception e) | |
{ | |
Envelope.Message = $"Erro ao enviar e-mail [{e.Message}]"; | |
return StatusCode(500, Envelope); | |
} | |
} | |
[HttpGet("whitelist")] | |
public async Task<ActionResult> GetWhitelist(string userC5ID) | |
{ | |
try | |
{ | |
var response = await FirebaseService.GetInstance().GetWhitelists(); | |
if (string.IsNullOrEmpty(userC5ID)) | |
{ | |
Envelope.Data = response; | |
} | |
else | |
{ | |
Envelope.Data = response.Where(w => w.UserC5ID == userC5ID).ToList(); | |
} | |
return Ok(Envelope); | |
} | |
catch (Exception e) | |
{ | |
Envelope.Message = $"erro na integração cielo [{e.Message}]"; | |
Envelope.Data = e; | |
return StatusCode(500, Envelope); | |
} | |
} | |
[HttpPost("partial-payment")] | |
public ActionResult PartialPayment([FromBody] PartialPaymentModel request) | |
{ | |
try | |
{ | |
var model = new PartialAuthorize | |
{ | |
PaymentId = request.PaymentId, | |
Amount = request.Amount * 100 | |
}; | |
var transaction = _cieloService.PartialCapture(model); | |
Envelope.Data = transaction; | |
return Ok(Envelope); | |
} | |
catch (CieloException ex) | |
{ | |
Envelope.Message = $"erro na integração cielo [{ex.Message}]"; | |
Envelope.Data = ex.Errors; | |
return StatusCode(500, Envelope); | |
} | |
catch (Exception ex) | |
{ | |
Envelope.Message = $"erro na integração cielo [{ex.Message}]"; | |
return StatusCode(500, Envelope); | |
} | |
} | |
[HttpPost("payment")] | |
public ActionResult PostPayment([FromBody] PaymentModel request) | |
{ | |
try | |
{ | |
if (!string.IsNullOrEmpty(request.CreditCard.CardToken)) | |
{ | |
var model = new Authorize | |
{ | |
MerchantOrderId = request.OrderNumber, | |
Customer = request.Customer.ToType<Customer>(), | |
Payment = new Payment | |
{ | |
Amount = request.Amount * 100, | |
Capture = request.Capture, | |
CreditCard = new CreditCard | |
{ | |
CardToken = request.CreditCard.CardToken, | |
SecurityCode = request.CreditCard.CVV | |
} | |
} | |
}; | |
var transaction = _cieloService.Capture(model); | |
Envelope.Data = transaction; | |
} | |
else | |
{ | |
var model = new Authorize | |
{ | |
MerchantOrderId = request.OrderNumber, | |
Customer = request.Customer.ToType<Customer>(), | |
Payment = new Payment | |
{ | |
Amount = request.Amount * 100, | |
Capture = request.Capture, | |
CreditCard = new CreditCard | |
{ | |
CardNumber = request.CreditCard.CreditCardNumber, | |
Holder = request.CreditCard.HolderName, | |
ExpirationDate = $"{request.CreditCard.ExpirationMonth}/{request.CreditCard.ExpirationYear}", | |
SecurityCode = request.CreditCard.CVV, | |
Brand = request.CreditCard.Brand | |
} | |
} | |
}; | |
var transaction = _cieloService.Capture(model); | |
Envelope.Data = transaction; | |
} | |
return Ok(Envelope); | |
} | |
catch (CieloException ex) | |
{ | |
Envelope.Message = $"erro na integração cielo [{ex.Message}]"; | |
Envelope.Data = ex.Errors; | |
return StatusCode(500, Envelope); | |
} | |
catch (Exception e) | |
{ | |
Envelope.Message = $"erro na integração cielo [{e.Message}]"; | |
return StatusCode(500, Envelope); | |
} | |
} | |
[HttpDelete("payment")] | |
public ActionResult DeletePayment(string paymentId) | |
{ | |
try | |
{ | |
var transaction = _cieloService.CancelByPayment(paymentId); | |
Envelope.Data = transaction; | |
return Ok(Envelope); | |
} | |
catch (CieloException ex) | |
{ | |
Envelope.Message = $"erro na integração cielo [{ex.Message}]"; | |
Envelope.Data = ex.Errors; | |
return StatusCode(500, Envelope); | |
} | |
catch (Exception e) | |
{ | |
Envelope.Message = $"erro na integração cielo [{e.Message}]"; | |
return StatusCode(500, Envelope); | |
} | |
} | |
[HttpGet("payment/cardbin")] | |
public ActionResult GetCardBin(string cardNumber) | |
{ | |
try | |
{ | |
if (cardNumber == null || cardNumber.Length != 6) | |
{ | |
Envelope.Message = "Dese ser informado os primeiros 6 dígitos"; | |
return StatusCode(404, Envelope); | |
} | |
var bin = _cieloService.GetCardBin(cardNumber); | |
Envelope.Data = bin; | |
Envelope.Message = "Sucesso"; | |
return Ok(Envelope); | |
} | |
catch (CieloException ex) | |
{ | |
Envelope.Message = $"erro na integração cielo [{ex.Message}]"; | |
Envelope.Data = ex.Errors; | |
return StatusCode(500, Envelope); | |
} | |
catch (Exception e) | |
{ | |
Envelope.Message = $"erro na integração cielo [{e.Message}]"; | |
return StatusCode(500, Envelope); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment