optimized and add diagnostic feature

This commit is contained in:
2022-03-15 15:17:02 +08:00
parent 77b4e54734
commit 5b209cc19c
45 changed files with 380 additions and 122 deletions

View File

@ -66,12 +66,24 @@ namespace Billing.Store
var instance = new StoreHelper();
try
{
await database.CreateTablesAsync<Category, Account, Bill>();
await database.CreateTablesAsync<Category, Account, Bill, Logs>();
} catch (Exception ex)
{
Helper.Error("database.init.table", ex);
}
try
{
var count = await database.ExecuteScalarAsync<int>("SELECT COUNT(Id) FROM [Category]");
if (count <= 0)
{
await database.InsertAsync(new Account { Name = Resource.Cash, Icon = "wallet" });
}
}
catch (Exception ex)
{
Helper.Error("database.init.account", ex);
}
try
{
var count = await database.ExecuteScalarAsync<int>("SELECT COUNT(Id) FROM [Category]");
if (count <= 0)
@ -152,6 +164,46 @@ namespace Billing.Store
return await instance.DeleteItemAsync(category);
}
public static async Task<int> GetLogsCount()
{
await Instance;
return await database.ExecuteScalarAsync<int>("SELECT COUNT(Id) FROM [Logs]");
}
public static async Task<int> SaveLogItemAsync(Logs log)
{
var instance = await Instance;
return await instance.SaveItemAsync(log);
}
public static string GetLogFile()
{
return Path.Combine(CacheFolder, "logs.csv");
}
public static async Task<string> ExportLogs()
{
try
{
var instance = await Instance;
var logs = await instance.GetListAsync<Logs>();
var file = GetLogFile();
using var writer = new StreamWriter(File.Open(file, FileMode.Create, FileAccess.Write));
writer.WriteLine("Id,DateTime,Category,Detail");
foreach (var log in logs)
{
var category = log.Category?.Replace("\n", " \\n ");
var detail = log.Detail?.Replace("\n", " \\n ");
writer.WriteLine($"{log.Id},{log.LogTime},{category},{detail}");
}
writer.Flush();
await database.ExecuteAsync("DELETE FROM [Logs]; DELETE FROM [sqlite_sequence] WHERE [name] = 'Logs'");
return file;
}
catch
{
return null;
}
}
private StoreHelper()
{
if (database == null)