Skip to content

Instantly share code, notes, and snippets.

@carneirocorp
Created October 2, 2020 15:30
Show Gist options
  • Save carneirocorp/c77a0686e7a4cac1ece4a23650d113c0 to your computer and use it in GitHub Desktop.
Save carneirocorp/c77a0686e7a4cac1ece4a23650d113c0 to your computer and use it in GitHub Desktop.
Controller
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