mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-19 06:54:19 +01:00
Greenfield: Add update store API (#1495)
* Greenfield: Add update store API * update update store model * change greenfield controller name to stop conflict
This commit is contained in:
@@ -37,5 +37,15 @@ namespace BTCPayServer.Client
|
|||||||
return await HandleResponse<StoreData>(response);
|
return await HandleResponse<StoreData>(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual async Task<StoreData> UpdateStore(string storeId, UpdateStoreRequest request, CancellationToken token = default)
|
||||||
|
{
|
||||||
|
if (request == null)
|
||||||
|
throw new ArgumentNullException(nameof(request));
|
||||||
|
if (storeId == null)
|
||||||
|
throw new ArgumentNullException(nameof(storeId));
|
||||||
|
var response = await _httpClient.SendAsync(CreateHttpRequest($"api/v1/stores/{storeId}", bodyPayload: request, method: HttpMethod.Put), token);
|
||||||
|
return await HandleResponse<StoreData>(response);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
BTCPayServer.Client/Models/StoreBaseData.cs
Normal file
10
BTCPayServer.Client/Models/StoreBaseData.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace BTCPayServer.Client.Models
|
||||||
|
{
|
||||||
|
public abstract class StoreBaseData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// the name of the store
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,14 +1,11 @@
|
|||||||
namespace BTCPayServer.Client.Models
|
namespace BTCPayServer.Client.Models
|
||||||
{
|
{
|
||||||
public class StoreData
|
public class StoreData: StoreBaseData
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// the id of the store
|
/// the id of the store
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
/// <summary>
|
|
||||||
/// the name of the store
|
|
||||||
/// </summary>
|
|
||||||
public string Name { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
6
BTCPayServer.Client/Models/UpdateStoreRequest.cs
Normal file
6
BTCPayServer.Client/Models/UpdateStoreRequest.cs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
namespace BTCPayServer.Client.Models
|
||||||
|
{
|
||||||
|
public class UpdateStoreRequest: StoreBaseData
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -172,6 +172,11 @@ namespace BTCPayServer.Tests
|
|||||||
//create store
|
//create store
|
||||||
var newStore = await client.CreateStore(new CreateStoreRequest() {Name = "A"});
|
var newStore = await client.CreateStore(new CreateStoreRequest() {Name = "A"});
|
||||||
|
|
||||||
|
//update store
|
||||||
|
var updatedStore = await client.UpdateStore(newStore.Id, new UpdateStoreRequest() {Name = "B"});
|
||||||
|
Assert.Equal("B", updatedStore.Name);
|
||||||
|
Assert.Equal("B", (await client.GetStore(newStore.Id)).Name);
|
||||||
|
|
||||||
//list stores
|
//list stores
|
||||||
var stores = await client.GetStores();
|
var stores = await client.GetStores();
|
||||||
var storeIds = stores.Select(data => data.Id);
|
var storeIds = stores.Select(data => data.Id);
|
||||||
@@ -194,7 +199,6 @@ namespace BTCPayServer.Tests
|
|||||||
});
|
});
|
||||||
Assert.Single(await client.GetStores());
|
Assert.Single(await client.GetStores());
|
||||||
|
|
||||||
|
|
||||||
newStore = await client.CreateStore(new CreateStoreRequest() {Name = "A"});
|
newStore = await client.CreateStore(new CreateStoreRequest() {Name = "A"});
|
||||||
var scopedClient = await user.CreateClient(Permission.Create(Policies.CanViewStoreSettings, user.StoreId).ToString());
|
var scopedClient = await user.CreateClient(Permission.Create(Policies.CanViewStoreSettings, user.StoreId).ToString());
|
||||||
Assert.Single(await scopedClient.GetStores());
|
Assert.Single(await scopedClient.GetStores());
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ namespace BTCPayServer.Controllers.GreenField
|
|||||||
{
|
{
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
[Authorize(AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||||
public class StoresController : ControllerBase
|
public class GreenFieldController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly StoreRepository _storeRepository;
|
private readonly StoreRepository _storeRepository;
|
||||||
private readonly UserManager<ApplicationUser> _userManager;
|
private readonly UserManager<ApplicationUser> _userManager;
|
||||||
|
|
||||||
public StoresController(StoreRepository storeRepository, UserManager<ApplicationUser> userManager)
|
public GreenFieldController(StoreRepository storeRepository, UserManager<ApplicationUser> userManager)
|
||||||
{
|
{
|
||||||
_storeRepository = storeRepository;
|
_storeRepository = storeRepository;
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
@@ -74,6 +74,23 @@ namespace BTCPayServer.Controllers.GreenField
|
|||||||
return Ok(FromModel(store));
|
return Ok(FromModel(store));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
|
||||||
|
[HttpPut("~/api/v1/stores/{storeId}")]
|
||||||
|
public async Task<ActionResult> UpdateStore(string storeId, UpdateStoreRequest request)
|
||||||
|
{
|
||||||
|
var store = HttpContext.GetStoreData();
|
||||||
|
if (store == null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request?.Name is null)
|
||||||
|
return BadRequest(CreateValidationProblem(nameof(request.Name), "Name is missing"));
|
||||||
|
store.StoreName = request.Name;
|
||||||
|
await _storeRepository.UpdateStore(store);
|
||||||
|
return Ok(FromModel(store));
|
||||||
|
}
|
||||||
|
|
||||||
private static Client.Models.StoreData FromModel(Data.StoreData data)
|
private static Client.Models.StoreData FromModel(Data.StoreData data)
|
||||||
{
|
{
|
||||||
return new Client.Models.StoreData()
|
return new Client.Models.StoreData()
|
||||||
|
|||||||
@@ -136,6 +136,81 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"put": {
|
||||||
|
"tags": [
|
||||||
|
"Stores"
|
||||||
|
],
|
||||||
|
"summary": "Update store",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "storeId",
|
||||||
|
"in": "path",
|
||||||
|
"required": true,
|
||||||
|
"description": "The store to update",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Update the specified store",
|
||||||
|
"requestBody": {
|
||||||
|
"x-name": "request",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The name of the store",
|
||||||
|
"nullable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": true,
|
||||||
|
"x-position": 1
|
||||||
|
},
|
||||||
|
"operationId": "Stores_UpdateStore",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "updated specified store",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/StoreData"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "A list of errors that occurred when updating the store",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/ValidationProblemDetails"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"403": {
|
||||||
|
"description": "If you are authenticated but forbidden to update the specified store"
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "The key is not found for this store"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"API Key": [
|
||||||
|
"btcpay.store.canmodifystoresettings"
|
||||||
|
],
|
||||||
|
"Basic": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"delete": {
|
"delete": {
|
||||||
"tags": [
|
"tags": [
|
||||||
"Stores"
|
"Stores"
|
||||||
|
|||||||
Reference in New Issue
Block a user