using ProRestaurant.Classes; using ProRestaurant.Containers; using ProRestaurant.DBContexts; using ProRestaurant.Models.Accounts; using ProRestaurant.Models.Restaurants; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace ProRestaurant.Repository.Accounts { public class RegistrationRepository : IRegistrationRepository { private readonly DBContext dBContext; public RegistrationRepository(DBContext _DB) { dBContext = _DB; } public RestaurantContainer GetRestaurantContainer() { var restaurantContainer = new RestaurantContainer { Name = "", Logo = "", MethodsOfPayment = "", ShopNumber = "", ShoppingCentre = "", GoogleMapUrl = "", StreetNumber = "", StreetName = "", Suburb = "", City = "", Provice = "", Country = "", }; return restaurantContainer; } public UserContainer GetUserContainer() { var userContainer = new UserContainer() { FirstName = "", Surname = "", Cellphone = "", EmailAddress = "", Password = "" }; return userContainer; } //public UserContainer Login(string UserName, string Password) //{ // UserContainer returnObject = new UserContainer(); // User user = dBContext.Users.Where(u => u.EmailAddress == UserName).FirstOrDefault(); // if (user != null) // { // if (user.Password == Password) // { // returnObject.User = user; // returnObject.ResultString = "Access Granted"; // } // else // returnObject.ResultString = "Password incorrect"; // } // else // { // returnObject.ResultString = "User not found"; // } // return returnObject; //} public RestaurantContainer RegisterRestaurant(RestaurantContainer RestaurantContainer) { var restaurantCheck = dBContext.Restaurants.Where(r => r.Name == RestaurantContainer.Name && r.Suburb == RestaurantContainer.Suburb && r.City == RestaurantContainer.City && r.Provice == RestaurantContainer.Provice && r.Country == RestaurantContainer.Country).FirstOrDefault(); if (restaurantCheck != null) { RestaurantContainer.Result = "A Restaurant with the same name has already been registered in this location. "; return RestaurantContainer; } var checkUser = dBContext.Users.Where(u => u.EmailAddress == RestaurantContainer.UserEmailAddress).FirstOrDefault(); if (checkUser != null) { RestaurantContainer.Result = "A User with this email address already exists. Please use an different Email Address if this Email Address was used for an individule user."; return RestaurantContainer; } var user = new User { FirstName = RestaurantContainer.UserFirstName, Surname = RestaurantContainer.UserSurname, EmailAddress = RestaurantContainer.UserEmailAddress, Password = RestaurantContainer.UserPassword, SystemRole = Classes.SystemRole.RestaurantAdmin }; var restaurant = new Restaurant { Name = RestaurantContainer.Name, DeliveryTime = RestaurantContainer.DeliveryTime, DeliveryFee = RestaurantContainer.DeliveryFee, DeliveryRadius = RestaurantContainer.DeliveryRadius, MethodsOfPayment = RestaurantContainer.MethodsOfPayment, ShoppingCentre = RestaurantContainer.ShoppingCentre, ShopNumber = RestaurantContainer.ShopNumber, GoogleMapUrl = RestaurantContainer.GoogleMapUrl, Latitude = RestaurantContainer.Latitude, Longitude = RestaurantContainer.Longitude, StreetNumber = RestaurantContainer.StreetNumber, StreetName = RestaurantContainer.StreetName, Suburb = RestaurantContainer.Suburb, City = RestaurantContainer.City, Provice = RestaurantContainer.Provice, Country = RestaurantContainer.Country, PostalCode = RestaurantContainer.PostalCode, Categories = RestaurantContainer.Categories }; if (!string.IsNullOrEmpty(restaurant.MethodsOfPayment)) { restaurant.MethodsOfPayment = restaurant.MethodsOfPayment.Substring(0, restaurant.MethodsOfPayment.Length - 1); } if (!string.IsNullOrEmpty(restaurant.Categories)) { restaurant.Categories = restaurant.Categories.Substring(0, restaurant.Categories.Length - 1); restaurant.Categories = restaurant.Categories.Replace("|", " - "); } if (!string.IsNullOrEmpty(RestaurantContainer.Logo)) { bool saveFile = false; var loc = dBContext.Locations.FirstOrDefault()?.ImageStore; if (!string.IsNullOrEmpty(loc)) { var folderName = restaurant.Name + string.Format("{0:yyyy_MM_dd_hh_mm_ss}", DateTime.Now); saveFile = true; loc += string.Format("{0}", folderName); if (!Directory.Exists(loc)) { Directory.CreateDirectory(loc); } if (saveFile) { string path = ImageFormatter.Base64ToImage(RestaurantContainer.Logo, loc, restaurant.Name.Trim()); restaurant.Logo = path; } } if (!saveFile) restaurant.Logo = RestaurantContainer.Logo; } var rUser = new RestaurantUser { Restaurant = restaurant, User = user }; restaurant.Users = new List() { rUser }; if (RestaurantContainer.THours != null && RestaurantContainer.THours.Count > 0) { restaurant.TradingHours = new List(); foreach (var t in RestaurantContainer.THours) { restaurant.TradingHours.Add(new TradingHours() { Description = t.Description, OpeningTime = DateTime.Parse(string.Format("{0} {1}", string.Format("{0:yyyy/MM/dd}", DateTime.Now), t.From)), ClosingTime = DateTime.Parse(string.Format("{0} {1}", string.Format("{0:yyyy/MM/dd}", DateTime.Now), t.To)), Closed = t.Closed, Opened24H = t.Open24 }); } } dBContext.Add(restaurant); Save(); return RestaurantContainer; } public UserContainer RegisterUser(UserContainer UserContainer) { var checkUser = dBContext.Users.Where(u => u.EmailAddress == UserContainer.EmailAddress).FirstOrDefault(); if (checkUser != null) { UserContainer.ResultString = "A User with this email address already exists."; UserContainer.Password = ""; return UserContainer; } var user = new User { FirstName = UserContainer.FirstName, Surname = UserContainer.Surname, Cellphone = UserContainer.Cellphone, EmailAddress = UserContainer.EmailAddress, Password = UserContainer.Password, SystemRole = Classes.SystemRole.Customer }; dBContext.Add(user); Save(); UserContainer.Id = user.Id; UserContainer.ResultString = "User Created"; return UserContainer; } public void Save() { dBContext.SaveChanges(); } } }