using BuddyFinance.Common.Extensions; using BuddyFinance.Integration; using BuddyFinance.Integration.Models; using BuddyFinance.Integration.Models.Administration; using BuddyFinance.WebApi.Filters; using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using WebApi.OutputCache.V2; namespace BuddyFinance.WebApi.Controllers { /// /// Administration /// [RoutePrefix("api/administration")] [Authenticate] public class AdministrationController : BaseController { AdministrationIntegrator integrator; /// /// /// public AdministrationController() { integrator = new AdministrationIntegrator(); } private IEnumerable Filter(IEnumerable results, string searchText) { if (string.IsNullOrWhiteSpace(searchText)) return results; return results.Where(m => m.Type.ContainsIgnoreCase(searchText) || m.Timestamp.ContainsIgnoreCase(searchText) || m.Description.ContainsIgnoreCase(searchText) || m.User.ContainsIgnoreCase(searchText) || m.Address.ContainsIgnoreCase(searchText) || m.Browser.ContainsIgnoreCase(searchText) ); } /// /// Returns activity log /// /// //Cache for 10 minutes on the server, inform the client that response is valid for 10 minutes //[CacheOutput(ClientTimeSpan = 600, ServerTimeSpan = 600)] [HttpPost] [Route("activitlog")] public IHttpActionResult ActivitLog(Models.DataTables.Request request) { var startDate = request?.DateRangeSearch?.StartDate ?? DateTime.Now.AddMinutes(-20); var endDate = request?.DateRangeSearch?.EndDate ?? DateTime.Now; var logResult = integrator.ActivitLog(startDate, endDate); var log = logResult.Result; var filteredLog = Filter(logResult.Result, request?.search?.value).ToList(); var result = new Models.DataTables.ActivityLogResult { data = Models.DataTables.Results.PageResults(filteredLog, request), draw = request.draw, recordsTotal = log.Count, recordsFiltered = filteredLog.Count }; return Json(result, JsonSerializerSettingsHelper.CamelCase); //var data = "{\"data\": ["; //if (logResult.ErrorCode == (int)ResponseCodes.Success) //{ // logResult.Result.ForEach(m => // { // data += $"['{m.Type}','{m.TimeStamp.ToString("yyyy MMM dd - hh:mm tt")}','{m.Description.Substring(0, 60)}','{m.User}','{m.IpAddress}','{m.Browser}'],"; // }); // data = data.Remove(data.Length - 1, 1).Replace("'", "\"") + "]}"; //} //else //{ // data += "]"; //} // return Json(JsonConvert.DeserializeObject(data)); } /// /// Returns Activity log entry details /// /// Log Entry Id /// [HttpGet] [Route("activitlog/{logId}")] //api/admini.../activitylog/124 public BaseResult ActivityLog(int logId) { return integrator.ActivityLog(logId); } } }