using SewerStammGen.Shared.Contracts; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Npgsql; using SewerStammGen.Shared.Domain; using SewerStammGen.Shared.Enum; namespace SewerStammGen.DAL.Services { public class ProjektDataService : IProjektDataService { string connString = "Host = localhost; Database = SewerGen; Username = SewerGen; Password = SewerGen"; NpgsqlDataSource dataSource; NpgsqlConnection? conn = null; public ProjektDataService() { var dataSourceBuilder = new NpgsqlDataSourceBuilder(connString); dataSource = dataSourceBuilder.Build(); //OpenConnection(); conn = dataSource.OpenConnection(); } private async void OpenConnection() { conn = await dataSource.OpenConnectionAsync(); } public async Task Create(Projekt entity) { string command = "INSERT INTO public.\"Projekte\" (\"Projektname\", \"Erstelldatum\", \"Strasse\", \"Ort\", \"ExportType\", \"Kodierungssystem\",\"AuftraggeberId\") " + "VALUES(@1,@2,@3,@4,@5,@6,@7) RETURNING \"Id\""; await using(var cmd = new NpgsqlCommand(command, conn)) { cmd.Parameters.AddWithValue("1", entity.Projektname); cmd.Parameters.AddWithValue("2", entity.Erstelldatum); cmd.Parameters.AddWithValue("3", entity.Strasse); cmd.Parameters.AddWithValue("4", entity.Ort); cmd.Parameters.AddWithValue("5", (int)entity.ExportType); cmd.Parameters.AddWithValue("6", (int)entity.Kodierungssystem); cmd.Parameters.AddWithValue("7", entity.Auftraggeber.Id); using var reader = await cmd.ExecuteReaderAsync(); reader.Read(); entity.Id = reader.GetInt32(0); } return entity; } public Projekt CreateNonAsync(Projekt entity) { throw new NotImplementedException(); } public Task Delete(int id) { throw new NotImplementedException(); } public async Task Get(int id) { Projekt result = new Projekt(); IAuftraggeberDataService auftraggeberDataService = new AuftraggeberDataService(); using (var cmd = new NpgsqlCommand($"SELECT * FROM public.\"Projekte\" WHERE \"Id\" = @1", conn)) { cmd.Parameters.AddWithValue("1", id); using var reader = await cmd.ExecuteReaderAsync(); reader.Read(); result = parseProjekt(reader); result.Auftraggeber = await auftraggeberDataService.Get(reader.GetInt32(7)); } return result; } private Projekt? parseProjekt(NpgsqlDataReader reader) { return new Projekt() { Id = reader.GetInt32(0), Projektname = reader.GetString(1), Erstelldatum = reader.GetString(2), Strasse = reader.GetString(3), Ort = reader.GetString(4), ExportType = (EExportType)reader.GetInt32(5), Kodierungssystem = (EKodierungssystem)reader.GetInt32(6) }; } public async Task> GetAll() { IAuftraggeberDataService auftraggeberDataService = new AuftraggeberDataService(); IEnumerable auftraggebers = await auftraggeberDataService.GetAll(); List result = new List(); using (var cmd = new NpgsqlCommand($"SELECT * FROM public.\"Projekte\"", conn)) using (var reader = await cmd.ExecuteReaderAsync()) { while (reader.Read()) { Projekt projekt = parseProjekt(reader); projekt.Auftraggeber = auftraggebers.Where(x => x.Id == reader.GetInt32(7)).ToList().Last(); result.Add(projekt); } } return result; } public Task Update(int id, Projekt entity) { throw new NotImplementedException(); } } }