RestySqlite/DatabaseRepository.cs

121 lines
3.7 KiB
C#

using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
namespace RestySqlite
{
public class DatabaseRepository
{
private DatabaseWrapper _db;
public DatabaseRepository(DatabaseWrapper db)
{
_db = db;
}
public async Task<Dictionary<string, List<string>>?> ListTables()
{
return await Task.Run(() => {
try
{
return _db.MapColumns();
}
catch (Exception e)
{
Console.WriteLine(e);
return null;
}
});
}
public async Task<Dictionary<string, List<string>>?> ListColumns(string table)
{
return await Task.Run(() => {
try
{
var scheme = _db.MapColumns();
var filtered = from tbl in scheme.Keys where tbl == table select scheme[tbl];
Dictionary<string, List<string>> result = new();
foreach (var column in filtered.Single())
{
result.Add(column, _db.MapColumn(column, table));
}
return result;
}
catch (Exception e)
{
Console.WriteLine(e);
return null;
}
});
}
public async Task<List<string>?> ListColumnValues(string table, string column)
{
return await Task.Run(() => {
var values = _db.MapColumn(column, table);
return values;
});
}
public async Task<Dictionary<string, string>?> FetchValue(string table, int id)
{
return await Task.Run(() => {
try
{
var reader = _db.GetReader($"SELECT * FROM {table} WHERE id = {id}");
/* var sqlCommand = "SELECT * FROM $table WHERE id = $id";
var reader = _db.GetReader(sqlCommand,
new Parameter("$table", table),
new Parameter("$id", id)
); */
Dictionary<string, string> result = new();
using (reader)
{
while (reader.Read())
{
foreach (var column in _db.MapColumns()[table])
{
if (!result.ContainsKey(column))
{
result.Add(column, reader[column].ToString());
continue;
}
result[column] = reader[column].ToString();
}
}
}
return result;
}
catch (Exception e)
{
Console.WriteLine(e);
return null;
}
});
}
public async Task<string> ProcessCommand(string sqlCommand)
{
return await Task.Run(() => {
try
{
_db.ExecuteCommand(sqlCommand);
return "succses";
}
catch (Exception e)
{
return e.Message;
}
});
}
}
}