152 lines
6.1 KiB
C#

using BeautySalonDBModels.Models;
using Npgsql;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BeautySalonDBModels.Implements
{
public class ServiceDatabase : AbstractWorkWithStorage<Service>
{
public override void Add(Service service)
{
using var conn = GetConnection();
conn.Open();
using var cmd = new NpgsqlCommand("INSERT INTO services (service_id, service_name, price, specialisation_id) " +
"VALUES ((nextval('seq_service')), @ServiceName, @Price, @SpecialisationId)", conn);
cmd.Parameters.AddWithValue("@ServiceName", service.ServiceName);
cmd.Parameters.AddWithValue("@Price", service.Price);
cmd.Parameters.AddWithValue("@SpecialisationId", service.SpecialisationId);
cmd.ExecuteNonQuery();
}
public override Service? GetObject(int id)
{
using var conn = GetConnection();
conn.Open();
using var cmd = new NpgsqlCommand("SELECT * FROM services WHERE service_id = @id", conn);
cmd.Parameters.AddWithValue("@id", id);
using var reader = cmd.ExecuteReader();
if (reader.Read())
{
return new Service
{
ServiceId = reader.GetInt32(0),
ServiceName = reader.GetString(1),
Price = reader.GetDouble(2),
SpecialisationId = reader.GetInt32(3)
};
}
return null;
}
public override List<Service> GetObjects()
{
var services = new List<Service>();
using var conn = GetConnection();
conn.Open();
using var cmd = new NpgsqlCommand("SELECT * FROM services order by service_id", conn);
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
services.Add(new Service
{
ServiceId = reader.GetInt32(0),
ServiceName = reader.GetString(1),
Price = reader.GetDouble(2),
SpecialisationId = reader.GetInt32(3)
});
}
return services;
}
public override Service? Remove(int id)
{
var service = GetObject(id);
using var conn = GetConnection();
conn.Open();
using var cmd = new NpgsqlCommand("delete from services where service_id = @id", conn);
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
return service;
}
public override void Update(Service service)
{
using var conn = GetConnection();
conn.Open();
using var cmd = new NpgsqlCommand("update services set service_name = @name, " +
"price = @price, specialisation_id = @SpecialisationId where service_id = @id", conn);
cmd.Parameters.AddWithValue("@name", service.ServiceName);
cmd.Parameters.AddWithValue("@price", service.Price);
cmd.Parameters.AddWithValue("@SpecialisationId", service.SpecialisationId);
cmd.Parameters.AddWithValue("@id", service.ServiceId);
cmd.ExecuteNonQuery();
}
public string GetNameSpecialisation(Service service)
{
SpecialisationDatabase db = new SpecialisationDatabase();
int specId = service.SpecialisationId;
List<Specialisation> specialisations = db.GetObjects();
foreach (Specialisation specialisation in specialisations)
{
if (specialisation.SpecialisationId == specId) return specialisation.Name.ToString();
}
return string.Empty;
}
public List<Master> GetFilteredListByService(int serviceId)
{
var list = new List<Master>();
var service = GetObject(serviceId);
if(service != null)
{
int specId = service.SpecialisationId;
using var conn = GetConnection();
conn.Open();
using var cmd = new NpgsqlCommand("select * from masters where specialisation_id = @specId", conn);
cmd.Parameters.AddWithValue("@specId", specId);
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new Master
{
MasterId = reader.GetInt32(0),
SpecialisationId = reader.GetInt32(1),
FIO = reader.GetString(2)
});
}
}
return list;
}
public void Clear()
{
using var conn = GetConnection();
conn.Open();
using var cmd = new NpgsqlCommand("drop sequence if exists seq_specialisation; " +
"drop sequence if exists seq_service; " +
"drop sequence if exists seq_master; " +
"drop sequence if exists seq_client; " +
"drop sequence if exists seq_reception; " +
"drop sequence if exists seq_cheque; " +
"create sequence seq_specialisation increment by 1 start with 1 minvalue 1; " +
"create sequence seq_service increment by 1 start with 1 minvalue 1; " +
"create sequence seq_master increment by 1 start with 1 minvalue 1; " +
"create sequence seq_client increment by 1 start with 1 minvalue 1; " +
"create sequence seq_reception increment by 1 start with 1 minvalue 1; " +
"create sequence seq_cheque increment by 1 start with 1 minvalue 1; " +
"delete from specialisations; " +
"delete from services; " +
"delete from masters; " +
"delete from clients; " +
"delete from cheques;", conn);
cmd.ExecuteNonQuery();
}
}
}