133 lines
5.5 KiB
C#
133 lines
5.5 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 string Area(int vineyardId)
|
|
{
|
|
using (var connection = Connection())
|
|
{
|
|
connection.Open();
|
|
var command = new MySqlCommand("SELECT ST_AsText(area) FROM t_vineyard WHERE id = @id", connection);
|
|
command.Parameters.AddWithValue("@id", vineyardId);
|
|
var result = command.ExecuteScalar();
|
|
return result?.ToString() ?? string.Empty;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
public List<Vineyard> GetUserVineyards(int userId)
|
|
{
|
|
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 " +
|
|
"JOUN t_user_owner uo on uo.owner_id = ov.owner_id" +
|
|
"WHERE uo.user_id = @userId", connection);
|
|
command.Parameters.AddWithValue("@userId", userId);
|
|
|
|
using (var reader = command.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
vineyards.Add(Vineyard.FromRecord(reader));
|
|
}
|
|
}
|
|
}
|
|
return vineyards;
|
|
}
|
|
}
|
|
}
|