using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using UnivateProperties_API.Containers.Property; using UnivateProperties_API.Containers.Timeshare; using UnivateProperties_API.Context; using UnivateProperties_API.Model.Logging; namespace UnivateProperties_API.Repository.Logging { public class SearchLogRepository : ISearchLogRepository { private readonly DataContext _dbContext; public SearchLogRepository(DataContext dbContext) { _dbContext = dbContext; } public List Get(Func where) { return _dbContext.SearchLogs.Where(where).ToList(); } public List GetAll() { return _dbContext.SearchLogs.ToList(); } public SearchLog GetDetailed(Func first) { var item = _dbContext.SearchLogs.FirstOrDefault(first); return item; } public List GetDetailedAll() { return _dbContext.SearchLogs.ToList(); } public List GetPropertySearches() { var list = new List(); var logs = Get(x => x.Type == "Property"); foreach (SearchLog log in logs) { var propSearch = JsonConvert.DeserializeObject(log.Search); list.Add(new PropertySearchDispaly() { Date = log.Created, UserName = propSearch.UserName, Keyword = propSearch.Keyword, SalesType = propSearch.SalesType, PropertyUsageType = propSearch.PropertyUsageType, PropertyType = propSearch.PropertyType, Province = propSearch.Province, City = propSearch.City, Suburb = propSearch.Suburb }); Debug.WriteLine(propSearch); } return list; } public List GetTimeshareSearches() { var list = new List(); var logs = Get(x => x.Type == "Timeshare"); foreach (SearchLog log in logs) { var timeshareSearch = JsonConvert.DeserializeObject(log.Search); list.Add(new TimeshareSearchDisplay() { Date = log.Created, UserName = timeshareSearch.UserName, Property = timeshareSearch.Property, Value = timeshareSearch.Value }); } return list; } public void Insert(SearchLog item) { _dbContext.SearchLogs.Add(item); Save(); } public void Insert(IEnumerable items) { foreach (var item in items) { _dbContext.SearchLogs.Add(item); Save(); } } public void Remove(SearchLog item) { _dbContext.SearchLogs.Remove(item); Save(); } public void Remove(IEnumerable items) { foreach (var item in items) { _dbContext.SearchLogs.Remove(item); Save(); } } public void RemoveAtId(int item) { var searchLog = Get(x => x.Id == item).FirstOrDefault(); if (searchLog != null) { _dbContext.SearchLogs.Remove(searchLog); Save(); } } public void Save() { _dbContext.SaveChanges(); } public void SaveTimeshareSearch(TimeshareSearch item) { var searchLog = new SearchLog { Type = "Timeshare", Search = JsonConvert.SerializeObject(item) }; _dbContext.SearchLogs.Remove(searchLog); Save(); } public void Update(SearchLog item) { _dbContext.Entry(item).State = EntityState.Modified; Save(); } } }