optimized and add diagnostic feature
This commit is contained in:
@ -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)
|
||||
|
Reference in New Issue
Block a user