RestySqlite/DatabaseRepository.cs

117 lines
4.0 KiB
C#
Raw Normal View History

2025-02-09 16:38:49 +03:00
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
namespace RestySqlite
{
2025-02-09 22:05:23 +03:00
public class DatabaseRepository(DatabaseWrapper db)
2025-02-09 16:38:49 +03:00
{
2025-02-09 22:05:23 +03:00
private readonly DatabaseWrapper _db = db;
2025-02-09 16:38:49 +03:00
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];
2025-02-09 22:05:23 +03:00
var result = new Dictionary<string, List<string>>();
2025-02-09 16:38:49 +03:00
foreach (var column in filtered.Single())
{
2025-02-09 22:05:23 +03:00
result.Add(column, _db.MapColumn(column, table) ?? throw new NullReferenceException("Column value is null!"));
2025-02-09 16:38:49 +03:00
}
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
{
2025-02-09 22:05:23 +03:00
var reader = _db.GetReader($"SELECT * FROM {table} WHERE id = {id}") ?? throw new NullReferenceException("Reader is null!");
2025-02-09 16:38:49 +03:00
/* var sqlCommand = "SELECT * FROM $table WHERE id = $id";
var reader = _db.GetReader(sqlCommand,
new Parameter("$table", table),
new Parameter("$id", id)
); */
2025-02-09 22:05:23 +03:00
var result = new Dictionary<string, string>();
2025-02-09 16:38:49 +03:00
using (reader)
{
while (reader.Read())
{
foreach (var column in _db.MapColumns()[table])
{
2025-02-09 22:05:23 +03:00
if (column == null) throw new NullReferenceException("Column value is null!");
2025-02-09 16:38:49 +03:00
if (!result.ContainsKey(column))
2025-02-09 22:05:23 +03:00
{;
result.Add(column, reader[column].ToString() ?? throw new NullReferenceException("Readed value is null!"));
2025-02-09 16:38:49 +03:00
continue;
}
2025-02-09 22:05:23 +03:00
result[column] = reader[column].ToString() ?? throw new NullReferenceException("Readed value is null!");
2025-02-09 16:38:49 +03:00
}
}
}
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;
}
});
}
}
}