added two more end-point for Add Item and SubItem
This commit is contained in:
parent
5988a98016
commit
ee4e3f713e
@ -37,6 +37,58 @@ namespace Marco.Pms.CacheHelper
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<MenuSection?> UpdateMenuSectionAsync(Guid sectionId, MenuSection updatedSection)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var filter = Builders<MenuSection>.Filter.Eq(s => s.Id, sectionId);
|
||||||
|
|
||||||
|
var update = Builders<MenuSection>.Update
|
||||||
|
.Set(s => s.Header, updatedSection.Header)
|
||||||
|
.Set(s => s.Title, updatedSection.Title);
|
||||||
|
|
||||||
|
var result = await _collection.UpdateOneAsync(filter, update);
|
||||||
|
|
||||||
|
if (result.ModifiedCount > 0)
|
||||||
|
{
|
||||||
|
return await _collection.Find(s => s.Id == sectionId).FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Error updating MenuSection.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<MenuSection?> AddMenuItemAsync(Guid sectionId, MenuItem newItem)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
newItem.Id = Guid.NewGuid();
|
||||||
|
|
||||||
|
var filter = Builders<MenuSection>.Filter.Eq(s => s.Id, sectionId);
|
||||||
|
|
||||||
|
var update = Builders<MenuSection>.Update.Push(s => s.Items, newItem);
|
||||||
|
|
||||||
|
var result = await _collection.UpdateOneAsync(filter, update);
|
||||||
|
|
||||||
|
if (result.ModifiedCount > 0)
|
||||||
|
{
|
||||||
|
return await _collection.Find(s => s.Id == sectionId).FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Error adding menu item.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<MenuItem?> UpdateMenuItemAsync(Guid sectionId, Guid itemId, MenuItem updatedItem)
|
public async Task<MenuItem?> UpdateMenuItemAsync(Guid sectionId, Guid itemId, MenuItem updatedItem)
|
||||||
{
|
{
|
||||||
@ -70,6 +122,36 @@ namespace Marco.Pms.CacheHelper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<MenuSection?> AddSubMenuItemAsync(Guid sectionId, Guid itemId, SubMenuItem newSubItem)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
newSubItem.Id = Guid.NewGuid();
|
||||||
|
|
||||||
|
// Match the MenuSection and the specific MenuItem inside it
|
||||||
|
var filter = Builders<MenuSection>.Filter.And(
|
||||||
|
Builders<MenuSection>.Filter.Eq(s => s.Id, sectionId),
|
||||||
|
Builders<MenuSection>.Filter.ElemMatch(s => s.Items, i => i.Id == itemId)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Use positional operator `$` to target matched MenuItem and push into its Submenu
|
||||||
|
var update = Builders<MenuSection>.Update.Push("Items.$.Submenu", newSubItem);
|
||||||
|
|
||||||
|
var result = await _collection.UpdateOneAsync(filter, update);
|
||||||
|
|
||||||
|
if (result.ModifiedCount > 0)
|
||||||
|
{
|
||||||
|
return await _collection.Find(s => s.Id == sectionId).FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Error adding submenu item.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<SubMenuItem?> UpdateSubmenuItemAsync(Guid sectionId, Guid itemId, Guid subItemId, SubMenuItem updatedSub)
|
public async Task<SubMenuItem?> UpdateSubmenuItemAsync(Guid sectionId, Guid itemId, Guid subItemId, SubMenuItem updatedSub)
|
||||||
{
|
{
|
||||||
|
@ -52,7 +52,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
[HttpPost("sidebar/menusection")]
|
[HttpPost("sidebar/menu-section")]
|
||||||
public async Task<IActionResult> CreateAppSideBarMenu([FromBody] MenuSectionDto MenuSecetion)
|
public async Task<IActionResult> CreateAppSideBarMenu([FromBody] MenuSectionDto MenuSecetion)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -86,13 +86,66 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPut("sidebar/menu-section/{sectionId}")]
|
||||||
|
public async Task<IActionResult> UpdateMenuSection(Guid sectionId,[FromBody] MenuSection updatedSection)
|
||||||
|
{
|
||||||
|
if (sectionId == Guid.Empty || updatedSection == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Error Occurred while Updating Menu Item");
|
||||||
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid section ID, item ID, or menu item payload.", 400));
|
||||||
|
}
|
||||||
|
var UpdatedMenuSection = _mapper.Map<MenuSection>(updatedSection);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
UpdatedMenuSection = await _sideBarMenuHelper.UpdateMenuSectionAsync(sectionId, UpdatedMenuSection);
|
||||||
|
|
||||||
|
if (UpdatedMenuSection == null)
|
||||||
|
return NotFound(ApiResponse<object>.ErrorResponse("Menu section not found", 404));
|
||||||
|
|
||||||
|
return Ok(ApiResponse<object>.SuccessResponse(UpdatedMenuSection, "Menu section updated successfully"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Failed to update menu section");
|
||||||
|
return StatusCode(500, ApiResponse<object>.ErrorResponse("Server error", ex, 500));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost("sidebar/menus/{sectionId}/items")]
|
||||||
|
public async Task<IActionResult> AddMenuItem(Guid sectionId, [FromBody] MenuItemDto newItemDto)
|
||||||
|
{
|
||||||
|
if (sectionId == Guid.Empty || newItemDto == null)
|
||||||
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid input", 400));
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var menuItem = _mapper.Map<MenuItem>(newItemDto);
|
||||||
|
|
||||||
|
var result = await _sideBarMenuHelper.AddMenuItemAsync(sectionId, menuItem);
|
||||||
|
|
||||||
|
if (result == null)
|
||||||
|
return NotFound(ApiResponse<object>.ErrorResponse("Menu section not found", 404));
|
||||||
|
|
||||||
|
_logger.LogInfo("Added MenuItem in Section: {SectionId}");
|
||||||
|
|
||||||
|
return Ok(ApiResponse<object>.SuccessResponse(result, "Menu item added successfully"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Error occurred while adding MenuItem inside MenuSection: {SectionId}", sectionId);
|
||||||
|
return StatusCode(500, ApiResponse<object>.ErrorResponse("Server error", ex, 500));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[HttpPut("sidebar/{sectionId}/items/{itemId}")]
|
[HttpPut("sidebar/{sectionId}/items/{itemId}")]
|
||||||
public async Task<IActionResult> UpdateMenuItem(Guid sectionId, Guid itemId, [FromBody] MenuItemDto updatedMenuItem)
|
public async Task<IActionResult> UpdateMenuItem(Guid sectionId, Guid itemId, [FromBody] MenuItemDto updatedMenuItem)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (sectionId == Guid.Empty || itemId == Guid.Empty || updatedMenuItem == null)
|
if (sectionId == Guid.Empty || itemId == Guid.Empty || updatedMenuItem == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Error Occurred while creating Menu");
|
_logger.LogWarning("Error Occurred while Updating Menu Item");
|
||||||
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid section ID, item ID, or menu item payload.", 400));
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid section ID, item ID, or menu item payload.", 400));
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -122,6 +175,35 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost("sidebar/menus/{sectionId}/items/{itemId}/subitems")]
|
||||||
|
public async Task<IActionResult> AddSubMenuItem(Guid sectionId, Guid itemId, [FromBody] SubMenuItemDto newSubItem)
|
||||||
|
{
|
||||||
|
if (sectionId == Guid.Empty || itemId == Guid.Empty || newSubItem == null)
|
||||||
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid input", 400));
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var subMenuItem = _mapper.Map<SubMenuItem>(newSubItem);
|
||||||
|
|
||||||
|
var result = await _sideBarMenuHelper.AddSubMenuItemAsync(sectionId, itemId, subMenuItem);
|
||||||
|
|
||||||
|
if (result == null)
|
||||||
|
{
|
||||||
|
return NotFound(ApiResponse<object>.ErrorResponse("Menu item not found", 404));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInfo("Added SubMenuItem in Section: {SectionId}, MenuItem: {ItemId}");
|
||||||
|
return Ok(ApiResponse<object>.SuccessResponse(result, "Submenu item added successfully"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Failed to add submenu item");
|
||||||
|
return StatusCode(500, ApiResponse<object>.ErrorResponse("Server error", ex, 500));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[HttpPut("sidebar/{sectionId}/items/{itemId}/subitems/{subItemId}")]
|
[HttpPut("sidebar/{sectionId}/items/{itemId}/subitems/{subItemId}")]
|
||||||
public async Task<IActionResult> UpdateSubmenuItem(Guid sectionId,Guid itemId,Guid subItemId,[FromBody] SubMenuItemDto updatedSubMenuItem)
|
public async Task<IActionResult> UpdateSubmenuItem(Guid sectionId,Guid itemId,Guid subItemId,[FromBody] SubMenuItemDto updatedSubMenuItem)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user