using System.Collections.Generic; using System.Linq; using WebApplication.Modules; using WebApplication.Repositorys.Interfaces; namespace WebApplication.Logic { public interface ICustomerLogic { ILogicResult AddCustomer(CustomerEditor editor); ILogicResult RemoveCustomer(string id, string session); ILogicResult EditCustomer(string id, CustomerEditor editor, string session); ILogicResult GetCustomer(string id, string session); ILogicResult> GetCustomers(); ILogicResult CreateCustomerSession(string customer); ILogicResult DeleteCustomerSession(string customer, string session); ILogicResult Login(CustomerLogin login); } public class CustomerLogic : ICustomerLogic { private readonly ICustomerRepository _customers; private readonly ISessionRepository _sessions; public CustomerLogic(ICustomerRepository customers, ISessionRepository sessions) { _customers = customers; _sessions = sessions; } public ILogicResult AddCustomer(CustomerEditor editor) { return LogicResult.Ok(_customers.AddCustomer(editor)); } public ILogicResult RemoveCustomer(string id, string session) { if (!ValidateSession(session, id)) return LogicResult.Forbidden(); _customers.RemoveCustomer(id); return LogicResult.Ok(); } public ILogicResult EditCustomer(string id, CustomerEditor editor, string session) { if (!ValidateSession(session, id)) return LogicResult.Forbidden(); _customers.EditCustomer(id, editor); return LogicResult.Ok(); } public ILogicResult GetCustomer(string id, string session) { if (!ValidateSession(session, id)) return LogicResult.Forbidden(); return LogicResult.Ok(_customers.GetCustomer(id)); } public ILogicResult> GetCustomers() { return LogicResult>.Ok(_customers.GetCustomers()); } public ILogicResult CreateCustomerSession(string customer) { return LogicResult.Ok(_sessions.CreateSession(customer)); } public ILogicResult DeleteCustomerSession(string customer, string session) { if (!ValidateSession(session, customer)) return LogicResult.Forbidden(); _sessions.RemoveSession(_sessions.GetSession(session)); return LogicResult.Ok(); } public ILogicResult Login(CustomerLogin login) { var customer = _customers.GetCustomers().FirstOrDefault(c => c.Email == login.Email); if (customer is null) return LogicResult.NotFound(); return !customer.Password.Equals(login.Password) ? LogicResult.Forbidden() : CreateCustomerSession(customer.Guid); } private bool ValidateSession(string session, string customerToAccess) { return _sessions.ValidateSession(_sessions.GetSession(session), customerToAccess); } } }