diff --git a/Controllers/ExpenseController.cs b/Controllers/ExpenseController.cs new file mode 100644 index 0000000..3e2e1b0 --- /dev/null +++ b/Controllers/ExpenseController.cs @@ -0,0 +1,44 @@ +using FirmTracker_Server.nHibernate.Expenses; +using Microsoft.AspNetCore.Mvc; +namespace FirmTracker_Server.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class ExpensesController : ControllerBase + { + private readonly ExpenseCRUD _expenseCrud; + + public ExpensesController() + { + _expenseCrud = new ExpenseCRUD(); + } + // POST: api/Expenses + [HttpPost] + [ProducesResponseType(201)] // Created + [ProducesResponseType(400)] // Bad Request + public IActionResult CreateExpense([FromBody] Expense expense) { + try + { + _expenseCrud.AddExpense(expense); + return CreatedAtAction("GetExpense", new { id = expense.Id }, expense); + } + catch (System.Exception ex) { + return BadRequest(ex.Message); + } + } + + // GET: api/Expenses + [HttpGet("{id}")] + [ProducesResponseType(200)] // Created + [ProducesResponseType(400)] // Bad Request + public IActionResult GetExpense(int id) + { + var expense = _expenseCrud.GetExpense(id); + if (expense == null) + { + return NotFound(); + } + return Ok(expense); + } + } +} diff --git a/TestClass.cs b/TestClass.cs index 3a3df8b..7188bf4 100644 --- a/TestClass.cs +++ b/TestClass.cs @@ -2,6 +2,7 @@ using FirmTracker_Server.nHibernate; using FirmTracker_Server.nHibernate.Products; using FirmTracker_Server.nHibernate.Transactions; +using FirmTracker_Server.nHibernate.Expenses; using NHibernate; namespace FirmTracker_Server @@ -37,13 +38,23 @@ namespace FirmTracker_Server PaymentType = "Karta kredytowa", }; + var expense1 = new Expense + { + Date = DateTime.Now, + TotalPrice = 10.5m, + Description = "testowy rozchód" + }; + try { FirmTracker_Server.nHibernate.Products.ProductCRUD crud = new ProductCRUD(); FirmTracker_Server.nHibernate.Transactions.TransactionCRUD transactionCrud = new nHibernate.Transactions.TransactionCRUD(); + ExpenseCRUD expenseCrud = new ExpenseCRUD(); crud.AddProduct(product); crud.AddProduct(product2); transactionCrud.AddTransaction(transaction1); + expenseCrud.AddExpense(expense1); + List testTransactionProducts = new List { new TransactionProduct { ProductID = 1, Quantity = 2 }, diff --git a/nHIbernate/Expenses/Expense.cs b/nHIbernate/Expenses/Expense.cs new file mode 100644 index 0000000..106ae9f --- /dev/null +++ b/nHIbernate/Expenses/Expense.cs @@ -0,0 +1,10 @@ +namespace FirmTracker_Server.nHibernate.Expenses +{ + public class Expense + { + public virtual int Id { get; set; } + public virtual DateTime Date { get; set; } + public virtual decimal TotalPrice { get; set; } + public virtual string Description { get; set; } + } +} diff --git a/nHIbernate/Expenses/ExpenseCRUD.cs b/nHIbernate/Expenses/ExpenseCRUD.cs new file mode 100644 index 0000000..94c3d5c --- /dev/null +++ b/nHIbernate/Expenses/ExpenseCRUD.cs @@ -0,0 +1,38 @@ +using FirmTracker_Server.nHibernate; + +namespace FirmTracker_Server.nHibernate.Expenses +{ + public class ExpenseCRUD + { + public void AddExpense(Expense expense) + { + using (var session = SessionFactory.OpenSession()) + using (var transaction = session.BeginTransaction()) + { + try + { + session.Save(expense); + transaction.Commit(); + } + catch + { + transaction.Rollback(); + throw; + } + } + } + public Expense GetExpense(int expenseId) { + using (var session = SessionFactory.OpenSession()) + { + /*var query = session.CreateQuery(@" + SELECT e + FROM Expense e + WHERE e.Id = expenseId + "); + query.SetParameter("expenseId", expenseId); + var expense = query.UniqueResult();*/ + return session.Get(expenseId); + } + } + } +} diff --git a/nHIbernate/Expenses/ExpenseMapping.cs b/nHIbernate/Expenses/ExpenseMapping.cs new file mode 100644 index 0000000..2eee2c8 --- /dev/null +++ b/nHIbernate/Expenses/ExpenseMapping.cs @@ -0,0 +1,17 @@ +using FluentNHibernate.Mapping; + +namespace FirmTracker_Server.nHibernate.Expenses +{ + public class ExpenseMapping : ClassMap + { + public ExpenseMapping() + { + Table("Expenses"); + Id(x => x.Id).GeneratedBy.Identity(); + Map(x => x.Date); + Map(x => x.TotalPrice); + Map(x => x.Description); + + } + } +} diff --git a/nHIbernate/SessionFactory.cs b/nHIbernate/SessionFactory.cs index 151c710..6562a29 100644 --- a/nHIbernate/SessionFactory.cs +++ b/nHIbernate/SessionFactory.cs @@ -32,7 +32,8 @@ namespace FirmTracker_Server.nHibernate .AddFromAssemblyOf() .AddFromAssemblyOf() .AddFromAssemblyOf() - .AddFromAssemblyOf(); + .AddFromAssemblyOf() + .AddFromAssemblyOf(); }) .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true)) //SchemaUpdate . Execute dla only update .BuildSessionFactory();