mirror of
https://github.com/bitwarden/server.git
synced 2024-11-24 12:35:25 +01:00
refactor
This commit is contained in:
parent
824049ea45
commit
ae82074dcb
@ -1,4 +1,6 @@
|
|||||||
using Bit.Core.Services;
|
using Bit.Api.Billing.Models.Requests;
|
||||||
|
using Bit.Api.Billing.Models.Responses;
|
||||||
|
using Bit.Core.Services;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http.HttpResults;
|
using Microsoft.AspNetCore.Http.HttpResults;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
@ -46,4 +48,42 @@ public class StripeController(
|
|||||||
|
|
||||||
return TypedResults.Ok(setupIntent.ClientSecret);
|
return TypedResults.Ok(setupIntent.ClientSecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[Route("~/tax/calculate")]
|
||||||
|
public async Task<IResult> CalculateAsync([FromBody] CalculateTaxRequestModel requestBody)
|
||||||
|
{
|
||||||
|
var options = new Stripe.Tax.CalculationCreateOptions
|
||||||
|
{
|
||||||
|
Currency = "usd",
|
||||||
|
CustomerDetails = new()
|
||||||
|
{
|
||||||
|
Address = new()
|
||||||
|
{
|
||||||
|
PostalCode = requestBody.PostalCode,
|
||||||
|
Country = requestBody.Country
|
||||||
|
},
|
||||||
|
AddressSource = "billing"
|
||||||
|
},
|
||||||
|
LineItems = new()
|
||||||
|
{
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Amount = Convert.ToInt64(requestBody.Amount * 100),
|
||||||
|
Reference = "Subscription",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var taxCalculation = await stripeAdapter.CalculateTaxAsync(options);
|
||||||
|
var response = new CalculateTaxResponseModel
|
||||||
|
{
|
||||||
|
SalesTaxRate = taxCalculation.TaxBreakdown.Any()
|
||||||
|
? decimal.Parse(taxCalculation.TaxBreakdown.Single().TaxRateDetails.PercentageDecimal) / 100
|
||||||
|
: 0,
|
||||||
|
SalesTaxAmount = Convert.ToDecimal(taxCalculation.TaxAmountExclusive) / 100,
|
||||||
|
TaxableAmount = Convert.ToDecimal(requestBody.Amount),
|
||||||
|
TotalAmount = Convert.ToDecimal(taxCalculation.AmountTotal) / 100,
|
||||||
|
};
|
||||||
|
return TypedResults.Ok(response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
using Bit.Api.Billing.Models.Requests;
|
|
||||||
using Bit.Api.Billing.Models.Responses;
|
|
||||||
using Bit.Core.Services;
|
|
||||||
using Microsoft.AspNetCore.Authorization;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
|
|
||||||
namespace Bit.Api.Billing.Controllers;
|
|
||||||
|
|
||||||
[Route("tax")]
|
|
||||||
[Authorize("Application")]
|
|
||||||
public class TaxController(
|
|
||||||
IStripeAdapter stripeAdapter) : Controller
|
|
||||||
{
|
|
||||||
[HttpPost]
|
|
||||||
[Route("calculate")]
|
|
||||||
public async Task<IResult> CalculateAsync([FromBody] CalculateTaxRequestModel requestBody)
|
|
||||||
{
|
|
||||||
var options = new Stripe.Tax.CalculationCreateOptions
|
|
||||||
{
|
|
||||||
Currency = "usd",
|
|
||||||
CustomerDetails = new()
|
|
||||||
{
|
|
||||||
Address = new()
|
|
||||||
{
|
|
||||||
PostalCode = requestBody.BillingAddressPostalCode,
|
|
||||||
Country = requestBody.BillingAddressCountry
|
|
||||||
},
|
|
||||||
AddressSource = "billing"
|
|
||||||
},
|
|
||||||
LineItems = new()
|
|
||||||
{
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
Amount = Convert.ToInt64(requestBody.Amount * 100),
|
|
||||||
Reference = "Subscription",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var taxCalculation = await stripeAdapter.CalculateTaxAsync(options);
|
|
||||||
var response = new CalculateTaxResponseModel
|
|
||||||
{
|
|
||||||
SalesTaxRate = taxCalculation.TaxBreakdown.Any()
|
|
||||||
? decimal.Parse(taxCalculation.TaxBreakdown.Single().TaxRateDetails.PercentageDecimal) / 100
|
|
||||||
: 0,
|
|
||||||
SalesTaxAmount = Convert.ToDecimal(taxCalculation.TaxAmountExclusive) / 100,
|
|
||||||
TaxableAmount = Convert.ToDecimal(requestBody.Amount),
|
|
||||||
TotalAmount = Convert.ToDecimal(taxCalculation.AmountTotal) / 100,
|
|
||||||
};
|
|
||||||
return TypedResults.Ok(response);
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,7 +4,7 @@ public class CalculateTaxRequestModel
|
|||||||
{
|
{
|
||||||
public decimal Amount { get; set; }
|
public decimal Amount { get; set; }
|
||||||
|
|
||||||
public string BillingAddressPostalCode { get; set; }
|
public string PostalCode { get; set; }
|
||||||
|
|
||||||
public string BillingAddressCountry { get; set; }
|
public string Country { get; set; }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user