SHA256
feat StayExport - Added delete for StayExports.
This commit is contained in:
@@ -154,24 +154,23 @@
|
|||||||
|
|
||||||
private async Task BtnDeleteItem(StayExportFileDTO item)
|
private async Task BtnDeleteItem(StayExportFileDTO item)
|
||||||
{
|
{
|
||||||
userMessage.ShowMessage("Not Implemented!", MessageKind.Normal);
|
bool? confirmDelete = await _confirmDeleteMsgBox.MsgBox.ShowAsync();
|
||||||
@* bool? confirmDelete = await _confirmDeleteMsgBox.MsgBox.ShowAsync();
|
|
||||||
|
|
||||||
if (confirmDelete is null || confirmDelete.Value == false)
|
if (confirmDelete is null || confirmDelete.Value == false)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result deleteResult = await stayExportEntityService.Delete(item);
|
Result deleteResult = await ExportService.DeleteExportedFileAsync(item);
|
||||||
if (!deleteResult.IsSuccess)
|
if (!deleteResult.IsSuccess)
|
||||||
{
|
{
|
||||||
string errorMsg = $"Error deleting Stay {item.Id}";
|
string errorMsg = $"Error deleting Export file {item.Id}";
|
||||||
userMessage.ShowResultWithMessage(deleteResult, errorMsg);
|
userMessage.ShowResultWithMessage(deleteResult, errorMsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
userMessage.ShowMessage($"Stay {item.Id} deleted!", MessageKind.Success);
|
userMessage.ShowMessage($"Export file {item.Id} deleted!", MessageKind.Success);
|
||||||
await LoadDataAsync(); *@
|
await LoadDataAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ public enum ResultCode
|
|||||||
UnknownError,
|
UnknownError,
|
||||||
FailedValidation,
|
FailedValidation,
|
||||||
NotFound,
|
NotFound,
|
||||||
|
FileStorageError,
|
||||||
|
|
||||||
//Specific Codes
|
//Specific Codes
|
||||||
GuestInStay,
|
GuestInStay,
|
||||||
|
|||||||
@@ -195,6 +195,7 @@
|
|||||||
<data name="enum.ResultCode.UnknownError" xml:space="preserve"><value>Unknown Error</value></data>
|
<data name="enum.ResultCode.UnknownError" xml:space="preserve"><value>Unknown Error</value></data>
|
||||||
<data name="enum.ResultCode.FailedValidation" xml:space="preserve"><value>Failed entity validation</value></data>
|
<data name="enum.ResultCode.FailedValidation" xml:space="preserve"><value>Failed entity validation</value></data>
|
||||||
<data name="enum.ResultCode.NotFound" xml:space="preserve"><value>Not found</value></data>
|
<data name="enum.ResultCode.NotFound" xml:space="preserve"><value>Not found</value></data>
|
||||||
|
<data name="enum.ResultCode.FileStorageError" xml:space="preserve"><value>File Storage Error</value></data>
|
||||||
<!-- Specific codes -->
|
<!-- Specific codes -->
|
||||||
<data name="enum.ResultCode.GuestInStay" xml:space="preserve"><value>Guest (ID: '{0}') is in a stay.</value></data>
|
<data name="enum.ResultCode.GuestInStay" xml:space="preserve"><value>Guest (ID: '{0}') is in a stay.</value></data>
|
||||||
<data name="enum.ResultCode.GuestCurrentlyInStay" xml:space="preserve"><value>Guest (ID: '{0}') is already in one stay during the period: {1}</value></data>
|
<data name="enum.ResultCode.GuestCurrentlyInStay" xml:space="preserve"><value>Guest (ID: '{0}') is already in one stay during the period: {1}</value></data>
|
||||||
|
|||||||
@@ -7,6 +7,12 @@ public interface IStayExportFileEntityService
|
|||||||
public Task<Result> CreateStayExportAsync(StayExportFileDTO dto);
|
public Task<Result> CreateStayExportAsync(StayExportFileDTO dto);
|
||||||
public Task<Result> UpdateStayExportAsync(StayExportFileDTO dto);
|
public Task<Result> UpdateStayExportAsync(StayExportFileDTO dto);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delete StayExport entry from DB.
|
||||||
|
/// Exported File won't be deleted from Storage.
|
||||||
|
/// </summary>
|
||||||
|
public Task<Result> DeleteStayExportAsync(StayExportFileDTO dto);
|
||||||
|
|
||||||
public Task<StayExportFileDTO?> GetDtoByIdAsync(long id);
|
public Task<StayExportFileDTO?> GetDtoByIdAsync(long id);
|
||||||
//public Task<IEnumerable<StayExportFileDTO>> GetDtoListByFilterAsync(StayExportFileFilterDTO filter, int limit = 0);
|
//public Task<IEnumerable<StayExportFileDTO>> GetDtoListByFilterAsync(StayExportFileFilterDTO filter, int limit = 0);
|
||||||
public Task<IEnumerable<StayExportFileDTO>> GetDtoListAsync(int limit = 0);
|
public Task<IEnumerable<StayExportFileDTO>> GetDtoListAsync(int limit = 0);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Somnia.GuestLog.Enums.Services;
|
||||||
using Somnia.GuestLog.Infrastructure;
|
using Somnia.GuestLog.Infrastructure;
|
||||||
using Somnia.GuestLog.Models;
|
using Somnia.GuestLog.Models;
|
||||||
using Somnia.GuestLog.Models.DTOs;
|
using Somnia.GuestLog.Models.DTOs;
|
||||||
@@ -59,6 +60,33 @@ public class StayExportFileEntityService(
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<Result> DeleteStayExportAsync(StayExportFileDTO dto)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var dbContext = contextFactory.CreateDbContext();
|
||||||
|
|
||||||
|
int deletedCount = await dbContext.StayExportFiles
|
||||||
|
.Where(e => e.Id == dto.Id)
|
||||||
|
.ExecuteDeleteAsync();
|
||||||
|
|
||||||
|
if (deletedCount == 0)
|
||||||
|
{
|
||||||
|
logger.LogWarning("StayExportFileService - DeleteStayExportAsync: Error deleting StayExport. Entity not found with ID: '{ID}'", dto.Id);
|
||||||
|
return Result.Fail(ResultCode.NotFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.LogInformation(
|
||||||
|
"StayExportFileService - DeleteStayExportAsync: StayExport deleted with Id: '{id}'.", dto.Id);
|
||||||
|
return Result.Ok();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.LogError(ex, "StayExportFileService - DeleteStayExportAsync: Error creating GuestDocument");
|
||||||
|
return Result.FailUnknownError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<StayExportFileDTO?> GetDtoByIdAsync(long id)
|
public async Task<StayExportFileDTO?> GetDtoByIdAsync(long id)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -160,13 +160,26 @@ public class StayExportService(
|
|||||||
return Result.Ok();
|
return Result.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<Result> DeleteExportedFileAsync(StayExportFileDTO item)
|
public async Task<Result> DeleteExportedFileAsync(StayExportFileDTO item)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
//Try to delete existing file.
|
||||||
|
if (!string.IsNullOrEmpty(item.ExportedPath))
|
||||||
|
{
|
||||||
|
bool fileDeletedFromStore = await DeleteExportFileFromStoreAsync(item);
|
||||||
|
if (!fileDeletedFromStore)
|
||||||
|
{
|
||||||
|
return Result.Fail(ResultCode.FileStorageError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//TODO:
|
//Delete entry from DB.
|
||||||
// - Delete file from "Store" if exists.
|
Result deleteResult = await stayExportEntityService.DeleteStayExportAsync(item);
|
||||||
// - Delete entry from DB.
|
if (!deleteResult.IsSuccess)
|
||||||
|
{
|
||||||
|
return Result.Fail(deleteResult.ResultCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -194,6 +207,31 @@ public class StayExportService(
|
|||||||
throw new InvalidOperationException($"StayExportFile - Error getting stays using params: export type invalid: {exportParams.ExportType}");
|
throw new InvalidOperationException($"StayExportFile - Error getting stays using params: export type invalid: {exportParams.ExportType}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<bool> DeleteExportFileFromStoreAsync(StayExportFileDTO item)
|
||||||
|
{
|
||||||
|
Debug.Assert(!string.IsNullOrEmpty(item.ExportedPath));
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
IStore store = GetExportStore();
|
||||||
|
bool objectExist = await store.ObjectExists(item.ExportedPath);
|
||||||
|
if (!objectExist)
|
||||||
|
{
|
||||||
|
logger.LogWarning("StayExportService - File for item {id} not found in store! Skip delete!", item.Id);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
await store.DeleteObject(item.ExportedPath);
|
||||||
|
logger.LogInformation("StayExportService - File for item {id} deleted from path {path}", item.Id, item.ExportedPath);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.LogError(ex, "StayExportService - Error deleting export file of item {id}", item.Id);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private IStore GetExportStore()
|
private IStore GetExportStore()
|
||||||
{
|
{
|
||||||
string? storageConnString = config.ExportStorageConnectionString;
|
string? storageConnString = config.ExportStorageConnectionString;
|
||||||
|
|||||||
Reference in New Issue
Block a user