using Npgsql; using SewerStammGen.Shared.Contracts; using SewerStammGen.Shared.Domain; using SewerStammGen.Shared.Enum; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SewerStammGen.DAL.Services.PostgresqlData { public class HaltungDataService : PostgresqlDataService, IHaltungDataService { public HaltungDataService(string connectionstring) : base(connectionstring, "haltung") { } public async Task Create(Kanal entity) { string command = "INSERT INTO " + tableName + " (" + "objektbezeichnung,ref_startschacht_id,ref_endschacht_id," + "dn,material,haltungslaenge, entwaesserung,ref_projekt_id) VALUES " + "(@1,@2,@3,@4,@5,@6,@7,@8) RETURNING haltung_id"; using (var cmd = new NpgsqlCommand(command, conn)) { cmd.Parameters.AddWithValue("1", entity.Objektbezeichnung); cmd.Parameters.AddWithValue("2", entity.StartSchacht.Id); cmd.Parameters.AddWithValue("3", entity.EndSchacht.Id); cmd.Parameters.AddWithValue("4", entity.DN); cmd.Parameters.AddWithValue("5", entity.Material); cmd.Parameters.AddWithValue("6", entity.Haltungslaenge); cmd.Parameters.AddWithValue("7", (int)entity.Entwaesserung); cmd.Parameters.AddWithValue("8", entity.Projekt.Id); using var reader = await cmd.ExecuteReaderAsync(); reader.Read(); entity.Id = reader.GetInt32(0); } return entity; } public Task Get(int id) { throw new NotImplementedException(); } public Task> GetAll() { throw new NotImplementedException(); } public async Task> GetAllByProjekt(int projektID) { List result = new List(); ISchachtDataService schachtDataService = new SchachtDataService(connString); IEnumerable schaechte = await schachtDataService.GetAllByProjekt(projektID); string command = "SELECT * FROM " + tableName + " WHERE ref_projekt_id = @1"; using (var cmd = new NpgsqlCommand(command, conn)) { cmd.Parameters.AddWithValue("1", projektID); using (var reader = await cmd.ExecuteReaderAsync()) { while(reader.Read()) { Kanal adding = parseHaltung(reader); int startSchachtID = reader.GetInt32(2); int endSchachtID = reader.GetInt32(3); adding.StartSchacht = schaechte.Where(x => x.Id == startSchachtID).Last(); adding.EndSchacht = schaechte.Where(x => x.Id == endSchachtID).Last(); result.Add(adding); } } } return result; } private Kanal parseHaltung(NpgsqlDataReader reader) { return new Kanal() { Id = reader.GetInt32(0), Objektbezeichnung = reader.GetString(1), //StartSchacht = reader.GetInt32(2), //EndSchacht = reader.GetInt32(3), DN = reader.GetInt32(4), Material = reader.GetString(5), Haltungslaenge = reader.GetDecimal(6), Entwaesserung = (EEntwaeserung)reader.GetInt32(7), Projekt = new Projekt() { Id = reader.GetInt32(8) } }; } public async Task> GetAllByProjekt(Projekt projekt) { return await GetAllByProjekt(projekt.Id); } public async Task Update(Kanal entity) { string command = "UPDATE " + tableName + " SET " + " objektbezeichnung=@1, " + " ref_startschacht_id=@2, " + " ref_endschacht_id=@3, " + " dn=@4, " + " material=@5, " + " haltungslaenge=@6, " + " entwaesserung=@7 " + " WHERE haltung_id = @8"; using(var cmd = new NpgsqlCommand(command,conn)) { cmd.Parameters.AddWithValue("1", entity.Objektbezeichnung); cmd.Parameters.AddWithValue("2", entity.StartSchacht.Id); cmd.Parameters.AddWithValue("3", entity.EndSchacht.Id); cmd.Parameters.AddWithValue("4", entity.DN); cmd.Parameters.AddWithValue("5", entity.Material); cmd.Parameters.AddWithValue("6", entity.Haltungslaenge); cmd.Parameters.AddWithValue("7", (int)entity.Entwaesserung); cmd.Parameters.AddWithValue("8", entity.Id); await cmd.ExecuteNonQueryAsync(); } return entity; } } }