/* * This file is part of FirmTracker - Server. * * FirmTracker - Server is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FirmTracker - Server is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FirmTracker - Server. If not, see . */ using FirmTracker_Server.nHibernate; using FirmTracker_Server.nHibernate.Products; using NHibernate; using System.Collections.Generic; using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Http.HttpResults; using System.Security.Cryptography.X509Certificates; using FirmTracker_Server.nHibernate.Reports; using NHibernate.Criterion; using FirmTracker_Server.nHibernate.Transactions; namespace FirmTracker_Server.nHibernate.Products { public class ProductCRUD { public void AddProduct(Product product) { using (var session = SessionFactory.OpenSession()) using (var transaction = session.BeginTransaction()) { try { session.Save(product); transaction.Commit(); } catch { transaction.Rollback(); throw; } } } public decimal GetProductPrice(int productId) { using (var session = SessionFactory.OpenSession()) { var product = session.Query() .Where(p => p.Id == productId) .Select(p => p.Price) .FirstOrDefault(); return product; } } public int GetProductType(int productId) { using (var session = SessionFactory.OpenSession()) { var product = session.Query() .Where(p => p.Id == productId) .Select(p => p.Type) .FirstOrDefault(); return product; } } public int GetProductAvailability(int productId) { using(var session = SessionFactory.OpenSession()) { var product = session.Query() .Where(p => p.Id == productId) .Select(p => p.Availability) .FirstOrDefault(); return product; } } public Product GetProduct(int productId) { using (var session = SessionFactory.OpenSession()) { return session.Get(productId); } } public Product GetProductByName(string productName) { using (var session = SessionFactory.OpenSession()) { var query = session.CreateQuery("from Product where Name = :name"); query.SetParameter("name", productName); return query.UniqueResult(); } } public void UpdateProduct(Product product) { using (var session = SessionFactory.OpenSession()) using (var transaction = session.BeginTransaction()) { try { session.Update(product); transaction.Commit(); } catch { transaction.Rollback(); throw; } } } public void DeleteProduct(int productId) { using (var session = SessionFactory.OpenSession()) using (var transaction = session.BeginTransaction()) { try { var product = session.Get(productId); if (product != null) { var criteria = session.CreateCriteria(); criteria.Add(Restrictions.Eq("ProductID", productId)); var transactionProducts = criteria.List(); if (transactionProducts.Any()) { throw new InvalidOperationException("Nie można usunąć produktu. Produkt jest ujęty w co najmniej jednej transakcji."); } session.Delete(product); transaction.Commit(); } } catch { transaction.Rollback(); throw; } } } public IList GetAllProducts() { using (var session = SessionFactory.OpenSession()) { return session.Query().ToList(); } } } }