Skip to content

Commit

Permalink
net 451 support
Browse files Browse the repository at this point in the history
Refactoring
  • Loading branch information
trenoncourt committed Dec 18, 2016
1 parent 13a68a6 commit 2226226
Show file tree
Hide file tree
Showing 11 changed files with 175 additions and 105 deletions.
1 change: 1 addition & 0 deletions build.bat
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ dotnet restore
dotnet build

dotnet pack ".\src\AutoQueryable" -c Release -o ".\bin\NuGetPackages"
dotnet pack ".\src\AutoQueryable.AspNet.Filter" -c Release -o ".\bin\NuGetPackages"

pause
32 changes: 32 additions & 0 deletions src/AutoQueryable.AspNet.Filter/Filters/AutoQueryableFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Web.Http.Filters;
using AutoQueryable.Extensions;
using AutoQueryable.Models;

namespace AutoQueryable.AspNet.Filter.Filters
{
public class AutoQueryableFilter : ActionFilterAttribute
{
public string[] UnselectableProperties { get; set; }


public override void OnActionExecuted(HttpActionExecutedContext context)
{
var content = context.Response.Content as ObjectContent;
if (content != null)
{
IQueryable<object> query = content.Value as IQueryable<object>;
if (query == null) throw new Exception("Unable to retreive value of IQueryable from context result.");
Type entityType = query.GetType().GenericTypeArguments[0];

string queryString = context.Request.RequestUri.Query;
// Work on generic type directly, for dto projection
var result = query.AutoQueryable(queryString, new AutoQueryableProfile {UnselectableProperties = UnselectableProperties});
context.Response.Content = new ObjectContent(result.GetType(), result, new JsonMediaTypeFormatter());
}
}
}
}
8 changes: 7 additions & 1 deletion src/AutoQueryable.AspNet.Filter/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
},

"frameworks": {
"net451": {}
"net451": {
"dependencies": {
"Microsoft.AspNet.WebApi.Core": "5.2.3",
"AutoQueryable": "0.11.0"

}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System;
using AutoQueryable.AspNetCore.Filter.Filters;
using AutoQueryable.Models;
using Microsoft.AspNetCore.Mvc.Filters;

namespace AutoQueryable.AspNetCore.Filter.Attributes
{
[AttributeUsage(AttributeTargets.Method)]
public class AutoQueryableAttribute : Attribute, IFilterFactory, IOrderedFilter
{
public string[] UnselectableProperties { get; set; }

/// <inheritdoc />
public bool IsReusable { get; set; }

/// <inheritdoc />
public int Order { get; set; }

public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
{
throw new ArgumentNullException(nameof(serviceProvider));
}
var profile = new AutoQueryableProfile
{
UnselectableProperties = UnselectableProperties
};

return new AutoQueryableFilter(profile);
}
}
}
32 changes: 32 additions & 0 deletions src/AutoQueryable.AspNetCore.Filter/Filters/AutoQueryableFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System;
using AutoQueryable.Helpers;
using AutoQueryable.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace AutoQueryable.AspNetCore.Filter.Filters
{
public class AutoQueryableFilter : ActionFilterAttribute, IActionFilter
{
private readonly AutoQueryableProfile _autoQueryableProfile;

public AutoQueryableFilter(AutoQueryableProfile autoQueryableProfile)
{
_autoQueryableProfile = autoQueryableProfile;
}
public virtual void OnActionExecuting(ActionExecutingContext context)
{
}

public virtual void OnActionExecuted(ActionExecutedContext context)
{
dynamic query = ((ObjectResult)context.Result).Value;
if (query == null) throw new Exception("Unable to retreive value of IQueryable from context result.");
Type entityType = query.GetType().GenericTypeArguments[0];

string queryString = context.HttpContext.Request.QueryString.HasValue ? context.HttpContext.Request.QueryString.Value : null;
// Work on generic type directly, for dto projection
context.Result = new OkObjectResult(QueryableHelper.GetAutoQuery(queryString, entityType, query, _autoQueryableProfile));
}
}
}
7 changes: 5 additions & 2 deletions src/AutoQueryable.AspNetCore.Filter/project.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
{
"version": "1.0.0-*",
"version": "0.0.1",

"dependencies": {
"NETStandard.Library": "1.6.0"
"NETStandard.Library": "1.6.1",
"Microsoft.AspNetCore.Mvc.Abstractions": "1.1.0",
"Microsoft.AspNetCore.Mvc.Core": "1.1.0",
"AutoQueryable": "*"
},

"frameworks": {
Expand Down
56 changes: 28 additions & 28 deletions src/AutoQueryable/Attributes/AutoQueryableAttribute.cs
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
using System;
using AutoQueryable.Filters;
using AutoQueryable.Models;
using Microsoft.AspNetCore.Mvc.Filters;
//using System;
//using AutoQueryable.Filters;
//using AutoQueryable.Models;
//using Microsoft.AspNetCore.Mvc.Filters;

namespace AutoQueryable.Attributes
{
[AttributeUsage(AttributeTargets.Method)]
public class AutoQueryableAttribute : Attribute, IFilterFactory, IOrderedFilter
{
public string[] UnselectableProperties { get; set; }
//namespace AutoQueryable.Attributes
//{
// [AttributeUsage(AttributeTargets.Method)]
// public class AutoQueryableAttribute : Attribute, IFilterFactory, IOrderedFilter
// {
// public string[] UnselectableProperties { get; set; }

/// <inheritdoc />
public bool IsReusable { get; set; }
// /// <inheritdoc />
// public bool IsReusable { get; set; }

/// <inheritdoc />
public int Order { get; set; }
// /// <inheritdoc />
// public int Order { get; set; }

public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
{
throw new ArgumentNullException(nameof(serviceProvider));
}
var profile = new AutoQueryableProfile
{
UnselectableProperties = UnselectableProperties
};
// public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
// {
// if (serviceProvider == null)
// {
// throw new ArgumentNullException(nameof(serviceProvider));
// }
// var profile = new AutoQueryableProfile
// {
// UnselectableProperties = UnselectableProperties
// };

return new AutoQueryableFilter(profile);
}
}
}
// return new AutoQueryableFilter(profile);
// }
// }
//}
31 changes: 0 additions & 31 deletions src/AutoQueryable/Extensions/ConditionExtension.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using AutoQueryable.Models;
Expand All @@ -10,34 +7,6 @@ namespace AutoQueryable.Extensions
{
public static class ConditionExtension
{
public static string ToSqlCondition(this ConditionType condition, string key, IEnumerable<DbParameter> parameters)
{
switch (condition)
{
case ConditionType.Equal:
return "(" + string.Join(" OR ", parameters.Select(p => key + " = @" + p.ParameterName)) + ")";
case ConditionType.NotEqual:
return "(" + string.Join(" OR ", parameters.Select(p => key + " <> @" + p.ParameterName)) + ")";
case ConditionType.Less:
return "(" + string.Join(" OR ", parameters.Select(p => key + " < @" + p.ParameterName)) + ")";
case ConditionType.LessEqual:
return "(" + string.Join(" OR ", parameters.Select(p => key + " <= @" + p.ParameterName)) + ")";
case ConditionType.Greater:
return "(" + string.Join(" OR ", parameters.Select(p => key + " > @" + p.ParameterName)) + ")";
case ConditionType.GreaterEqual:
return "(" + string.Join(" OR ", parameters.Select(p => key + " >= @" + p.ParameterName)) + ")";
case ConditionType.Contains:
case ConditionType.StartsWith:
case ConditionType.EndsWith:
return "(" + string.Join(" OR ", parameters.Select(p => key + " LIKE @" + p.ParameterName)) + ")";
case ConditionType.Between:
return key + " IN (" + string.Join(", ", parameters.Select(p => "@" + p.ParameterName)) + ")";
default:
// TODO log
return "";
}
}

public static Expression ToBinaryExpression(this ConditionType condition, Expression left, Expression right)
{
switch (condition)
Expand Down
56 changes: 28 additions & 28 deletions src/AutoQueryable/Filters/AutoQueryableFilter.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
using System;
using AutoQueryable.Helpers;
using AutoQueryable.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
//using System;
//using AutoQueryable.Helpers;
//using AutoQueryable.Models;
//using Microsoft.AspNetCore.Mvc;
//using Microsoft.AspNetCore.Mvc.Filters;

namespace AutoQueryable.Filters
{
public class AutoQueryableFilter : IActionFilter
{
private readonly AutoQueryableProfile _autoQueryableProfile;
//namespace AutoQueryable.Filters
//{
// public class AutoQueryableFilter : IActionFilter
// {
// private readonly AutoQueryableProfile _autoQueryableProfile;

public AutoQueryableFilter(AutoQueryableProfile autoQueryableProfile)
{
_autoQueryableProfile = autoQueryableProfile;
}
public virtual void OnActionExecuting(ActionExecutingContext context)
{
}
// public AutoQueryableFilter(AutoQueryableProfile autoQueryableProfile)
// {
// _autoQueryableProfile = autoQueryableProfile;
// }
// public virtual void OnActionExecuting(ActionExecutingContext context)
// {
// }

public virtual void OnActionExecuted(ActionExecutedContext context)
{
dynamic query = ((ObjectResult)context.Result).Value;
if (query == null) throw new Exception("Unable to retreive value of IQueryable from context result.");
Type entityType = query.GetType().GenericTypeArguments[0];
// public virtual void OnActionExecuted(ActionExecutedContext context)
// {
// dynamic query = ((ObjectResult)context.Result).Value;
// if (query == null) throw new Exception("Unable to retreive value of IQueryable from context result.");
// Type entityType = query.GetType().GenericTypeArguments[0];

string queryString = context.HttpContext.Request.QueryString.HasValue ? context.HttpContext.Request.QueryString.Value : null;
// Work on generic type directly, for dto projection
context.Result = new OkObjectResult(QueryableHelper.GetAutoQuery(queryString, entityType, query, _autoQueryableProfile));
}
}
}
// string queryString = context.HttpContext.Request.QueryString.HasValue ? context.HttpContext.Request.QueryString.Value : null;
// // Work on generic type directly, for dto projection
// context.Result = new OkObjectResult(QueryableHelper.GetAutoQuery(queryString, entityType, query, _autoQueryableProfile));
// }
// }
//}
3 changes: 0 additions & 3 deletions src/AutoQueryable/Models/Criteria.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
using System.Collections.Generic;
using System.Data.Common;

namespace AutoQueryable.Models
{
public class Criteria
Expand Down
21 changes: 9 additions & 12 deletions src/AutoQueryable/project.json
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
{
"version": "0.10.0",
"version": "0.11.0",

"dependencies": {
"Microsoft.AspNetCore.Mvc.Abstractions": "1.1.0",
"Microsoft.AspNetCore.Mvc.Core": "1.1.0",
"NETStandard.Library": "1.6.1",
"System.Data.SqlClient": "4.3.0"
},

"frameworks": {
"netstandard1.6": {
"dependencies": {
"System.Reflection.Emit": "4.3.0",
"System.Linq.Queryable": "4.3.0"
"System.Linq.Queryable": "4.3.0",
"Microsoft.CSharp": "4.3.0",
"System.Reflection.TypeExtensions": "4.3.0",
"NETStandard.Library": "1.6.1"
}
},
"net451": {
"dependencies": {
"frameworkAssemblies": {
"System.Reflection.Emit": "4.0.0.0",
"System.Linq.Queryable": "4.0.0.0"
"System.Linq.Queryable": "4.0.0.0",
"Microsoft.CSharp": "4.0.0.0"
}
}
},
Expand All @@ -32,8 +32,5 @@

"title": "AutoQueryable add auto querying functionality like OData with best url practices to Asp.Net Core.",
"description": "AutoQueryable add auto querying functionality like OData with best url practices to Asp.Net Core.",
"authors": [ "Thibaut Renoncourt" ],
"buildOptions": {
"define": [ "NET46" ]
}
"authors": [ "Thibaut Renoncourt" ]
}

0 comments on commit 2226226

Please sign in to comment.