-
Notifications
You must be signed in to change notification settings - Fork 526
Expand file tree
/
Copy pathBrandController.cs
More file actions
130 lines (110 loc) · 4.81 KB
/
BrandController.cs
File metadata and controls
130 lines (110 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using Grand.Module.Api.Commands.Models.Catalog;
using Grand.Module.Api.DTOs.Catalog;
using Grand.Module.Api.Queries.Models.Common;
using Grand.Business.Core.Interfaces.Common.Security;
using Grand.Domain.Permissions;
using Grand.Domain.Catalog;
using MediatR;
using Microsoft.AspNetCore.JsonPatch.SystemTextJson;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Grand.Module.Api.Attributes;
using Microsoft.AspNetCore.Routing;
namespace Grand.Module.Api.Controllers;
public class BrandController : BaseApiController
{
private readonly IMediator _mediator;
private readonly IPermissionService _permissionService;
public BrandController(IMediator mediator, IPermissionService permissionService)
{
_mediator = mediator;
_permissionService = permissionService;
}
[EndpointDescription("Get entities from Brand")]
[EndpointName("GetBrands")]
[HttpGet]
[EnableQuery]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<BrandDto>))]
public async Task<IActionResult> Get()
{
if (!await _permissionService.Authorize(PermissionSystemName.Brands)) return Forbid();
return Ok(await _mediator.Send(new GetGenericQuery<BrandDto, Brand>()));
}
[EndpointDescription("Get entity from Brand by key")]
[EndpointName("GetBrandById")]
[HttpGet("{key}")]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(BrandDto))]
public async Task<IActionResult> GetById([FromRoute] string key)
{
if (!await _permissionService.Authorize(PermissionSystemName.Brands)) return Forbid();
var brand = await _mediator.Send(new GetGenericQuery<BrandDto, Brand>(key));
if (!brand.Any()) return NotFound();
return Ok(brand.FirstOrDefault());
}
[EndpointDescription("Add new entity to Brand")]
[EndpointName("InsertBrand")]
[HttpPost]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(BrandDto))]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> Post([FromBody] BrandDto model)
{
if (!await _permissionService.Authorize(PermissionSystemName.Brands)) return Forbid();
model = await _mediator.Send(new AddBrandCommand { Model = model });
return Ok(model);
}
[EndpointDescription("Update entity in Brand")]
[EndpointName("UpdateBrand")]
[HttpPut]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(BrandDto))]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> Put([FromBody] BrandDto model)
{
if (!await _permissionService.Authorize(PermissionSystemName.Brands)) return Forbid();
model = await _mediator.Send(new UpdateBrandCommand { Model = model });
return Ok(model);
}
[EndpointDescription("Partially update entity in Brand")]
[EndpointName("PartiallyUpdateBrand")]
[HttpPatch("{key}")]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
///sample
///{
/// "op": "replace",
/// "path": "/name",
/// "value": "new name"
///}
public async Task<IActionResult> Patch([FromRoute] string key, [FromBody] JsonPatchDocument<BrandDto> model)
{
if (string.IsNullOrEmpty(key))
return BadRequest("Key is null or empty");
if (!await _permissionService.Authorize(PermissionSystemName.Brands)) return Forbid();
var brand = await _mediator.Send(new GetGenericQuery<BrandDto, Brand>(key));
if (!brand.Any()) return NotFound();
var man = brand.FirstOrDefault();
model.ApplyTo(man);
await _mediator.Send(new UpdateBrandCommand { Model = man });
return Ok();
}
[EndpointDescription("Delete entity in Brand")]
[EndpointName("DeleteBrand")]
[HttpDelete("{key}")]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> Delete([FromRoute] string key)
{
if (!await _permissionService.Authorize(PermissionSystemName.Brands)) return Forbid();
var brand = await _mediator.Send(new GetGenericQuery<BrandDto, Brand>(key));
if (!brand.Any()) return NotFound();
await _mediator.Send(new DeleteBrandCommand { Model = brand.FirstOrDefault() });
return Ok();
}
}