using Microsoft.Extensions.Configuration; using MySqlConnector; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using uWine.Core.Domain.Entities; using uWine.Core.Domain.Repositories; namespace uWine.Core.Infrastructure.Repository { public class MariaDbVineyardRepository : MariaDbServerRepository, IVineyardRepository { public MariaDbVineyardRepository(IConfiguration configuration) : base(configuration) { } public void Insert(Vineyard vineyard, int ownerId) { using (var connection = Connection()) { connection.Open(); var command = new MySqlCommand(@$"INSERT INTO t_vineyard ( name, location, hectares, latitude, longitude ) VALUES ( @name, @location, @hectares, @latitude, @longitude ); LAST_INSERT_ID();", connection); command.Parameters.AddWithValue("@name", vineyard.Name); command.Parameters.AddWithValue("@location", vineyard.Location); command.Parameters.AddWithValue("@hectares", vineyard.Hectares); command.Parameters.AddWithValue("@latitude", vineyard.Latitude); command.Parameters.AddWithValue("@longitude", vineyard.Longitude); using (var reader = command.ExecuteReader()) { if (reader.Read()) { vineyard.Id = reader.GetInt32(0); } } var command2 = new MySqlCommand("INSERT INTO t_owners_vineyards (owner_id, vineyard_id) VALUES (@ownerId, @vineyardId)", connection); command2.Parameters.AddWithValue("@ownerId", ownerId); command2.Parameters.AddWithValue("@vineyardId", vineyard.Id); command2.ExecuteNonQuery(); } } public List GetOwnerVineyards(int ownerId) { var vineyards = new List(); using (var connection = Connection()) { connection.Open(); var command = new MySqlCommand("SELECT v.id, v.name, v.location, v.hectares, v.latitude, v.longitude " + "FROM t_vineyard v " + "JOIN t_owners_vineyards ov ON v.id = ov.vineyard_id " + "WHERE ov.owner_id = @ownerId", connection); command.Parameters.AddWithValue("@ownerId", ownerId); using (var reader = command.ExecuteReader()) { while (reader.Read()) { var vineyard = new Vineyard { Id = reader.GetInt32(0), Name = reader.GetString(1), Location = reader.GetString(2), Hectares = reader.GetDouble(3), Latitude = reader.GetDouble(4), Longitude = reader.GetDouble(5) }; vineyards.Add(vineyard); } } } return vineyards; } } }