Files
uWine/uWine.Core.Infrastructure/Repository/MariaDbVineyardRepository.cs
T
2025-07-10 21:52:06 +02:00

97 lines
4.0 KiB
C#

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;
using uWine.Core.Infrastructure.Helpers;
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.Coordinates.Latitude);
command.Parameters.AddWithValue("@longitude", vineyard.Coordinates.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 void InsertArea(Dictionary<int,Coordinates> coordinates, int vineyardId)
{
var polygon = CoordinatesHelper.ToWktPolygon(coordinates);
using (var connection = Connection())
{
connection.Open();
var command = new MySqlCommand("UPDATE t_vineyard SET area = ST_GeomFromText(@polygon, 4326) where id = @id", connection);
command.Parameters.AddWithValue("@id", vineyardId);
command.Parameters.AddWithValue("@polygon", polygon);
command.ExecuteNonQuery();
}
}
public List<Vineyard> GetOwnerVineyards(int ownerId)
{
var vineyards = new List<Vineyard>();
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())
{
vineyards.Add(Vineyard.FromRecord(reader));
}
}
}
return vineyards;
}
}
}