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);
}
}
}