Skip to content
Open

dev #32

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Constants/Permissions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public static class Personal
// Antd Dashboard permissions
public static class Antd
{
public const string Tasks = "Permissions.Antd.Tasks";
public const string Projects = "Permissions.Antd.Projects";
public const string Clients = "Permissions.Antd.Clients";
public const string Products = "Permissions.Antd.Products";
Expand All @@ -60,6 +61,10 @@ public static class Antd
public const string DeliveryAnalytics = "Permissions.Antd.DeliveryAnalytics";
public const string Trucks = "Permissions.Antd.Trucks";
public const string TruckDeliveryRequests = "Permissions.Antd.TruckDeliveryRequests";
public const string Employees = "Permissions.Antd.Employees";
public const string Faqs = "Permissions.Antd.Faqs";
public const string Pricings = "Permissions.Antd.Pricings";
public const string Licenses = "Permissions.Antd.Licenses";
}


Expand Down
1 change: 1 addition & 0 deletions Controllers/Antd/AntdAuctionCreatorsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
namespace AdminHubApi.Controllers.Antd
{
[Route("api/v1/antd/auction-creators")]
[Tags("Antd - Auction Creators")]
[ApiController]
[PermissionAuthorize(Permissions.Antd.AuctionCreators)]
public class AntdAuctionCreatorsController : ControllerBase
Expand Down
1 change: 1 addition & 0 deletions Controllers/Antd/AntdBiddingTopSellersController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
namespace AdminHubApi.Controllers.Antd
{
[Route("api/v1/antd/bidding-top-sellers")]
[Tags("Antd - Bidding Top Sellers")]
[ApiController]
[PermissionAuthorize(Permissions.Antd.BiddingTopSellers)]
public class AntdBiddingTopSellersController : ControllerBase
Expand Down
1 change: 1 addition & 0 deletions Controllers/Antd/AntdBiddingTransactionsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
namespace AdminHubApi.Controllers.Antd
{
[Route("api/v1/antd/bidding-transactions")]
[Tags("Antd - Bidding Transactions")]
[ApiController]
[PermissionAuthorize(Permissions.Antd.BiddingTransactions)]
public class AntdBiddingTransactionsController : ControllerBase
Expand Down
1 change: 1 addition & 0 deletions Controllers/Antd/AntdCommunityGroupsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
namespace AdminHubApi.Controllers.Antd
{
[Route("api/v1/antd/community-groups")]
[Tags("Antd - Community Groups")]
[Authorize]
public class AntdCommunityGroupsController : AntdBaseController
{
Expand Down
1 change: 1 addition & 0 deletions Controllers/Antd/AntdCoursesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
namespace AdminHubApi.Controllers.Antd
{
[Route("api/v1/antd/courses")]
[Tags("Antd - Courses")]
[ApiController]
[PermissionAuthorize(Permissions.Antd.Courses)]
public class AntdCoursesController : ControllerBase
Expand Down
1 change: 1 addition & 0 deletions Controllers/Antd/AntdDeliveryAnalyticsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
namespace AdminHubApi.Controllers.Antd
{
[Route("api/v1/antd/delivery-analytics")]
[Tags("Antd - Delivery Analytics")]
[ApiController]
[PermissionAuthorize(Permissions.Antd.DeliveryAnalytics)]
public class AntdDeliveryAnalyticsController : ControllerBase
Expand Down
123 changes: 123 additions & 0 deletions Controllers/Antd/AntdEmployeesController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
using AdminHubApi.Constants;
using AdminHubApi.Dtos.Antd;
using AdminHubApi.Interfaces.Antd;
using AdminHubApi.Security;
using Microsoft.AspNetCore.Mvc;

namespace AdminHubApi.Controllers.Antd
{
[Route("/api/v1/antd/employees")]
[Tags("Antd - Employees")]
[PermissionAuthorize(Permissions.Antd.Employees)]
public class AntdEmployeesController : AntdBaseController
{
private readonly IAntdEmployeeService _employeeService;

public AntdEmployeesController(IAntdEmployeeService employeeService, ILogger<AntdEmployeesController> logger)
: base(logger)
{
_employeeService = employeeService;
}

[HttpGet]
[ProducesResponseType(typeof(AntdEmployeeListResponse), 200)]
public async Task<IActionResult> GetAllEmployees([FromQuery] AntdEmployeeQueryParams queryParams)
{
try
{
var response = await _employeeService.GetAllAsync(queryParams);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error retrieving Antd employees");
return ErrorResponse("Failed to retrieve employees", 500);
}
}

[HttpGet("statistics")]
[ProducesResponseType(typeof(AntdEmployeeStatisticsResponse), 200)]
public async Task<IActionResult> GetStatistics()
{
try
{
var response = await _employeeService.GetStatisticsAsync();
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error retrieving Antd employee statistics");
return ErrorResponse("Failed to retrieve statistics", 500);
}
}

[HttpGet("{id}")]
[ProducesResponseType(typeof(AntdEmployeeResponse), 200)]
public async Task<IActionResult> GetEmployeeById(string id)
{
try
{
var response = await _employeeService.GetByIdAsync(id);
if (!response.Succeeded) return NotFound(response);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error retrieving Antd employee {EmployeeId}", id);
return ErrorResponse("Failed to retrieve employee", 500);
}
}

[HttpPost]
[ProducesResponseType(typeof(AntdEmployeeCreateResponse), 201)]
public async Task<IActionResult> CreateEmployee([FromBody] AntdEmployeeDto employeeDto)
{
try
{
if (!ModelState.IsValid) return BadRequest(ModelState);
var response = await _employeeService.CreateAsync(employeeDto);
return StatusCode(201, response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error creating Antd employee");
return ErrorResponse("Failed to create employee", 500);
}
}

[HttpPut("{id}")]
[ProducesResponseType(typeof(AntdEmployeeUpdateResponse), 200)]
public async Task<IActionResult> UpdateEmployee(string id, [FromBody] AntdEmployeeDto employeeDto)
{
try
{
if (!ModelState.IsValid) return BadRequest(ModelState);
var response = await _employeeService.UpdateAsync(id, employeeDto);
if (!response.Succeeded) return NotFound(response);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error updating Antd employee {EmployeeId}", id);
return ErrorResponse("Failed to update employee", 500);
}
}

[HttpDelete("{id}")]
[ProducesResponseType(typeof(AntdEmployeeDeleteResponse), 200)]
public async Task<IActionResult> DeleteEmployee(string id)
{
try
{
var response = await _employeeService.DeleteAsync(id);
if (!response.Succeeded) return NotFound(response);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error deleting Antd employee {EmployeeId}", id);
return ErrorResponse("Failed to delete employee", 500);
}
}
}
}
1 change: 1 addition & 0 deletions Controllers/Antd/AntdExamsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
namespace AdminHubApi.Controllers.Antd
{
[Route("api/v1/antd/exams")]
[Tags("Antd - Exams")]
[Authorize]
public class AntdExamsController : AntdBaseController
{
Expand Down
139 changes: 139 additions & 0 deletions Controllers/Antd/AntdFaqsController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
using AdminHubApi.Constants;
using AdminHubApi.Dtos.Antd;
using AdminHubApi.Interfaces.Antd;
using AdminHubApi.Security;
using Microsoft.AspNetCore.Mvc;

namespace AdminHubApi.Controllers.Antd
{
[Route("/api/v1/antd/faqs")]
[Tags("Antd - FAQs")]
[PermissionAuthorize(Permissions.Antd.Faqs)]
public class AntdFaqsController : AntdBaseController
{
private readonly IAntdFaqService _faqService;

public AntdFaqsController(IAntdFaqService faqService, ILogger<AntdFaqsController> logger)
: base(logger)
{
_faqService = faqService;
}

[HttpGet]
[ProducesResponseType(typeof(AntdFaqListResponse), 200)]
public async Task<IActionResult> GetAllFaqs([FromQuery] AntdFaqQueryParams queryParams)
{
try
{
var response = await _faqService.GetAllAsync(queryParams);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error retrieving Antd FAQs");
return ErrorResponse("Failed to retrieve FAQs", 500);
}
}

[HttpGet("featured")]
[ProducesResponseType(typeof(AntdFaqListResponse), 200)]
public async Task<IActionResult> GetFeaturedFaqs([FromQuery] int limit = 10)
{
try
{
var response = await _faqService.GetFeaturedAsync(limit);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error retrieving featured Antd FAQs");
return ErrorResponse("Failed to retrieve featured FAQs", 500);
}
}

[HttpGet("statistics")]
[ProducesResponseType(typeof(AntdFaqStatisticsResponse), 200)]
public async Task<IActionResult> GetStatistics()
{
try
{
var response = await _faqService.GetStatisticsAsync();
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error retrieving Antd FAQ statistics");
return ErrorResponse("Failed to retrieve statistics", 500);
}
}

[HttpGet("{id}")]
[ProducesResponseType(typeof(AntdFaqResponse), 200)]
public async Task<IActionResult> GetFaqById(string id)
{
try
{
var response = await _faqService.GetByIdAsync(id);
if (!response.Succeeded) return NotFound(response);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error retrieving Antd FAQ {FaqId}", id);
return ErrorResponse("Failed to retrieve FAQ", 500);
}
}

[HttpPost]
[ProducesResponseType(typeof(AntdFaqCreateResponse), 201)]
public async Task<IActionResult> CreateFaq([FromBody] AntdFaqDto faqDto)
{
try
{
if (!ModelState.IsValid) return BadRequest(ModelState);
var response = await _faqService.CreateAsync(faqDto);
return StatusCode(201, response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error creating Antd FAQ");
return ErrorResponse("Failed to create FAQ", 500);
}
}

[HttpPut("{id}")]
[ProducesResponseType(typeof(AntdFaqUpdateResponse), 200)]
public async Task<IActionResult> UpdateFaq(string id, [FromBody] AntdFaqDto faqDto)
{
try
{
if (!ModelState.IsValid) return BadRequest(ModelState);
var response = await _faqService.UpdateAsync(id, faqDto);
if (!response.Succeeded) return NotFound(response);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error updating Antd FAQ {FaqId}", id);
return ErrorResponse("Failed to update FAQ", 500);
}
}

[HttpDelete("{id}")]
[ProducesResponseType(typeof(AntdFaqDeleteResponse), 200)]
public async Task<IActionResult> DeleteFaq(string id)
{
try
{
var response = await _faqService.DeleteAsync(id);
if (!response.Succeeded) return NotFound(response);
return Ok(response);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error deleting Antd FAQ {FaqId}", id);
return ErrorResponse("Failed to delete FAQ", 500);
}
}
}
}
Loading