mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-20 02:28:31 +01:00
39b5462809
* Remove only dependency on Dbriize (TextSearch in new invoice column) * Switch to table for invoice text search * Adding missing using after rebase * Removing database migration in preparation for refresh * Database Migration: Adding InvoiceSearchData * Refactoring InvoicesRepository to make AddToTextSearch static and non-async Operation as async is too expensive for simple filtering and AddRange * Renaming InvoiceQuery property to Take More inline with what property does by convention, Take is used in conjuction with Skip * Refactoring SettingsRepository so update of settings can happen in another context * Adding DbMigrationsHostedService that performs long running data migrations * Commenting special placing of MigrationStartupTask * Simplifying code and leaving comment on expected flow * Resolving problems after merge * Database Migration: Refreshing database migration, ensuring no unintended changes on ModelSnapshot Co-authored-by: rockstardev <rockstardev@users.noreply.github.com> Co-authored-by: Nicolas Dorier <nicolas.dorier@gmail.com>
89 lines
3.4 KiB
C#
89 lines
3.4 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using BTCPayServer.Abstractions.Constants;
|
|
using BTCPayServer.Client;
|
|
using BTCPayServer.Filters;
|
|
using BTCPayServer.Models;
|
|
using BTCPayServer.Security;
|
|
using BTCPayServer.Services.Invoices;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace BTCPayServer.Controllers
|
|
{
|
|
[BitpayAPIConstraint]
|
|
[Authorize(Policies.CanCreateInvoice, AuthenticationSchemes = AuthenticationSchemes.Bitpay)]
|
|
public class InvoiceControllerAPI : Controller
|
|
{
|
|
private readonly InvoiceController _InvoiceController;
|
|
private readonly InvoiceRepository _InvoiceRepository;
|
|
|
|
public InvoiceControllerAPI(InvoiceController invoiceController,
|
|
InvoiceRepository invoiceRepository)
|
|
{
|
|
_InvoiceController = invoiceController;
|
|
_InvoiceRepository = invoiceRepository;
|
|
}
|
|
|
|
[HttpPost]
|
|
[Route("invoices")]
|
|
[MediaTypeConstraint("application/json")]
|
|
public async Task<DataWrapper<InvoiceResponse>> CreateInvoice([FromBody] BitpayCreateInvoiceRequest invoice, CancellationToken cancellationToken)
|
|
{
|
|
if (invoice == null)
|
|
throw new BitpayHttpException(400, "Invalid invoice");
|
|
return await _InvoiceController.CreateInvoiceCore(invoice, HttpContext.GetStoreData(), HttpContext.Request.GetAbsoluteRoot(), cancellationToken: cancellationToken);
|
|
}
|
|
|
|
[HttpGet]
|
|
[Route("invoices/{id}")]
|
|
public async Task<DataWrapper<InvoiceResponse>> GetInvoice(string id)
|
|
{
|
|
var invoice = (await _InvoiceRepository.GetInvoices(new InvoiceQuery()
|
|
{
|
|
InvoiceId = new[] { id },
|
|
StoreId = new[] { HttpContext.GetStoreData().Id }
|
|
})).FirstOrDefault();
|
|
if (invoice == null)
|
|
throw new BitpayHttpException(404, "Object not found");
|
|
return new DataWrapper<InvoiceResponse>(invoice.EntityToDTO());
|
|
}
|
|
[HttpGet]
|
|
[Route("invoices")]
|
|
public async Task<IActionResult> GetInvoices(
|
|
string token,
|
|
DateTimeOffset? dateStart = null,
|
|
DateTimeOffset? dateEnd = null,
|
|
string orderId = null,
|
|
string itemCode = null,
|
|
string status = null,
|
|
int? limit = null,
|
|
int? offset = null)
|
|
{
|
|
if (User.Identity.AuthenticationType == Security.Bitpay.BitpayAuthenticationTypes.Anonymous)
|
|
return Forbid(Security.Bitpay.BitpayAuthenticationTypes.Anonymous);
|
|
if (dateEnd != null)
|
|
dateEnd = dateEnd.Value + TimeSpan.FromDays(1); //Should include the end day
|
|
|
|
var query = new InvoiceQuery()
|
|
{
|
|
Take = limit,
|
|
Skip = offset,
|
|
EndDate = dateEnd,
|
|
StartDate = dateStart,
|
|
OrderId = orderId == null ? null : new[] { orderId },
|
|
ItemCode = itemCode == null ? null : new[] { itemCode },
|
|
Status = status == null ? null : new[] { status },
|
|
StoreId = new[] { this.HttpContext.GetStoreData().Id }
|
|
};
|
|
|
|
var entities = (await _InvoiceRepository.GetInvoices(query))
|
|
.Select((o) => o.EntityToDTO()).ToArray();
|
|
|
|
return Json(DataWrapper.Create(entities));
|
|
}
|
|
}
|
|
}
|