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; using System.Diagnostics; namespace SewerStammGen.DAL.Services.PostgresqlData { public class ProjektDataService : PostgresqlDataService, IProjektDataService { public ProjektDataService(string connectionstring) : base(connectionstring,"projekt") { } public async Task Create(Projekt entity) { string command = "INSERT INTO "+tableName+" (projektname, erstelldatum, strasse, ort, exporttype, kodierungssystem,ref_auftraggeber_id) " + "VALUES(@1,@2,@3,@4,@5,@6,@7) RETURNING projekt_id"; if (entity.Auftraggeber.Id == 0) { IAuftraggeberDataService auftraggeberDataService = new AuftraggeberDataService(connString); var s = await auftraggeberDataService.GetAll(); // TODO : Auftraggeber verwaltung if (s.Count() < 1) { entity.Auftraggeber = await auftraggeberDataService.Create(new Auftraggeber() { Name = "Anonym" }); } else { entity.Auftraggeber = s.ToList().Last(); } } 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); } entity.AuftraggeberTemporar = true; return entity; } public async Task Get(int id) { Projekt result = new Projekt(); IAuftraggeberDataService auftraggeberDataService = new AuftraggeberDataService(connString); using (var cmd = new NpgsqlCommand($"SELECT * FROM "+tableName+" WHERE projekt_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.IsDBNull(1) ? "" : reader.GetString(1), Erstelldatum = reader.IsDBNull(2) ? "" : reader.GetString(2), Strasse = reader.IsDBNull(3) ? "" : reader.GetString(3), Ort = reader.IsDBNull(4) ? "" : reader.GetString(4), ExportType = reader.IsDBNull(5) ? EExportType.XML2013 : (EExportType)reader.GetInt32(5), Kodierungssystem = reader.IsDBNull(6) ? EKodierungssystem.EN13508_2_2011_DWA_M_192_2 : (EKodierungssystem)reader.GetInt32(6) }; } public async Task> GetAll() { IAuftraggeberDataService auftraggeberDataService = new AuftraggeberDataService(connString); IEnumerable auftraggebers = await auftraggeberDataService.GetAll(); List result = new List(); using (var cmd = new NpgsqlCommand($"SELECT * FROM " + tableName, 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 async Task Update(Projekt entity) { string command = "UPDATE "+tableName+ " SET projektname=@1, erstelldatum=@2, strasse=@3, ort=@4, exporttype=@5, kodierungssystem=@6,ref_auftraggeber_id=@7 WHERE projekt_id = @8"; 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); cmd.Parameters.AddWithValue("8", entity.Id); int res = await cmd.ExecuteNonQueryAsync(); Trace.WriteLine(res); } return entity; } } }