Update Invoice File Handling
This commit is contained in:
@@ -8,7 +8,7 @@ namespace Server.Data
|
|||||||
{
|
{
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
private static string DirectoryName => "invoices";
|
private static string DirectoryName => "Invoices";
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -19,11 +19,10 @@ namespace Server.Data
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="invoiceId">The ID of the invoice to be deleted.</param>
|
/// <param name="invoiceId">The ID of the invoice to be deleted.</param>
|
||||||
/// <return>A task representing the asynchronous delete operation.</return>
|
/// <return>A task representing the asynchronous delete operation.</return>
|
||||||
public static Task DeleteAsync(string invoiceId)
|
public static async Task DeleteAsync(string invoiceId)
|
||||||
{
|
{
|
||||||
var fileName = BuildFileName(invoiceId);
|
var fileName = await BuildFileName(invoiceId);
|
||||||
if (File.Exists(fileName)) File.Delete(fileName);
|
if (File.Exists(fileName)) File.Delete(fileName);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -35,7 +34,7 @@ namespace Server.Data
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="invoiceId">The ID of the invoice to check for existence.</param>
|
/// <param name="invoiceId">The ID of the invoice to check for existence.</param>
|
||||||
/// <returns>A task representing the asynchronous check operation, with a boolean result indicating whether the file exists.</returns>
|
/// <returns>A task representing the asynchronous check operation, with a boolean result indicating whether the file exists.</returns>
|
||||||
public static Task<bool> ExistsAsync(string invoiceId) => Task.FromResult(File.Exists(BuildFileName(invoiceId)));
|
public static async Task<bool> ExistsAsync(string invoiceId) => File.Exists(await BuildFileName(invoiceId));
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -49,7 +48,7 @@ namespace Server.Data
|
|||||||
{
|
{
|
||||||
var invoices = new List<InvoiceModel>();
|
var invoices = new List<InvoiceModel>();
|
||||||
|
|
||||||
var invoiceFiles = Directory.GetFiles(DirectoryName, "Invoice_*.json");
|
var invoiceFiles = Directory.GetFiles(await GetDirectoryAsync(), "Invoice_*.json");
|
||||||
foreach (var file in invoiceFiles)
|
foreach (var file in invoiceFiles)
|
||||||
{
|
{
|
||||||
var invoice = await LoadFileAsync(file);
|
var invoice = await LoadFileAsync(file);
|
||||||
@@ -70,7 +69,7 @@ namespace Server.Data
|
|||||||
/// <return>The deserialized <see cref="InvoiceModel" /> instance if the file exists; otherwise, null.</return>
|
/// <return>The deserialized <see cref="InvoiceModel" /> instance if the file exists; otherwise, null.</return>
|
||||||
public static async Task<InvoiceModel?> LoadAsync(string invoiceId)
|
public static async Task<InvoiceModel?> LoadAsync(string invoiceId)
|
||||||
{
|
{
|
||||||
var fileName = BuildFileName(invoiceId);
|
var fileName = await BuildFileName(invoiceId);
|
||||||
return await LoadFileAsync(fileName);
|
return await LoadFileAsync(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,18 +88,19 @@ namespace Server.Data
|
|||||||
if (string.IsNullOrWhiteSpace(invoice.InvoiceId))
|
if (string.IsNullOrWhiteSpace(invoice.InvoiceId))
|
||||||
invoice.InvoiceId = Guid.NewGuid().ToString();
|
invoice.InvoiceId = Guid.NewGuid().ToString();
|
||||||
|
|
||||||
// Ensure directory exists
|
|
||||||
if (!Directory.Exists(DirectoryName)) Directory.CreateDirectory(DirectoryName);
|
|
||||||
|
|
||||||
var jsonString = JsonSerializer.Serialize(invoice, new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull });
|
var jsonString = JsonSerializer.Serialize(invoice, new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull });
|
||||||
await File.WriteAllTextAsync(BuildFileName(invoice.InvoiceId), jsonString);
|
await File.WriteAllTextAsync(await BuildFileName(invoice.InvoiceId), jsonString);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Private Method BuildFileName
|
#region Private Method BuildFileName
|
||||||
|
|
||||||
private static string BuildFileName(string invoiceId) => $"{DirectoryName}/Invoice_{invoiceId}.json";
|
private static async Task<string> BuildFileName(string invoiceId)
|
||||||
|
{
|
||||||
|
var targetDirectory = await GetDirectoryAsync();
|
||||||
|
return Path.Combine(targetDirectory, $"Invoice_{invoiceId}.json");
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -114,5 +114,19 @@ namespace Server.Data
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ensures that the directory for storing invoices exists asynchronously.
|
||||||
|
/// </summary>
|
||||||
|
/// <return>A task representing the asynchronous operation to ensure the directory exists.</return>
|
||||||
|
private static Task<string> GetDirectoryAsync()
|
||||||
|
{
|
||||||
|
var parentDirectory = Directory.GetParent(Directory.GetCurrentDirectory());
|
||||||
|
if (parentDirectory == null) return Task.FromResult(string.Empty);
|
||||||
|
var targetDirectory = Path.Combine(parentDirectory.FullName, DirectoryName);
|
||||||
|
|
||||||
|
if(!Directory.Exists(targetDirectory)) Directory.CreateDirectory(targetDirectory);
|
||||||
|
return Task.FromResult(targetDirectory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<PublishSingleFile>true</PublishSingleFile>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
Reference in New Issue
Block a user