Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implemented Filter Methods, Mapper and Tests.Finished SOLID Task #13

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spg.AloMalo.Application.Services.PhotoUseCases.Query
{
public class EntityPropertyFilterMapper<TEntity, TProperty>
{
public string _propertyName;
public Func<TProperty, TEntity> _filter;

public EntityPropertyFilterMapper(string propertyName, Func<TProperty, TEntity> filter)
{
_propertyName = propertyName;
_filter = filter;
}
public void ExecuteDeligate(TProperty property, string propertyName)
{
if (_propertyName == propertyName)
{
_filter.Invoke(property);
}
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,12 @@ public Task<List<PhotoDto>> Handle(GetPhotosQueryModel request, CancellationToke
_photoRepository
.FilterBuilder;

builder = new LastNameContainsParameter(builder)
.Compile(request.Query.Filter);
builder = new LastNameBeginsWithParameter(builder)
.Compile(request.Query.Filter);
builder = new LastNameEndsWithParameter(builder)
.Compile(request.Query.Filter);
// builder = new ...

builder = new PhotoBeginsWithHandler(builder).WithQuery(request.Query.Filter);
builder = new PhotoContainsHandler(builder).WithQuery(request.Query.Filter);
builder = new PhotoEndsWithHandler(builder).WithQuery(request.Query.Filter);
builder = new PhotoGreaterThanFilterHandler(builder).WithQuery(request.Query.Filter);
builder = new PhotoLowerThanHandler(builder).WithQuery(request.Query.Filter);
builder = new PhotoPlusMinus100Handler(builder).WithQuery(request.Query.Filter);
return Task.FromResult(
builder
.Build()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using Spg.AloMalo.DomainModel.Interfaces.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spg.AloMalo.Application.Services.PhotoUseCases.Query
{
public class PhotoBeginsWithHandler
{
private IPhotoFilterBuilder _builder;

public PhotoBeginsWithHandler(IPhotoFilterBuilder builder)
{
_builder = builder;
}

public IPhotoFilterBuilder WithQuery(string query)
{
string[] queryParts = query.Split(' ');

if (queryParts[1] != "bw")
{
return _builder;
}

new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Name", _builder.ApplyNameBeginsWithFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);
new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Description", _builder.ApplyDescriptionBeginsWithFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);

return _builder;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using Spg.AloMalo.DomainModel.Interfaces.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spg.AloMalo.Application.Services.PhotoUseCases.Query
{
public class PhotoContainsHandler
{
private IPhotoFilterBuilder _builder;

public PhotoContainsHandler(IPhotoFilterBuilder builder)
{
_builder = builder;
}

public IPhotoFilterBuilder WithQuery(string query)
{
string[] queryParts = query.Split(' ');
if (queryParts.Length > 3) {
throw new Exception("Query has to many Parameters!");
}
if (queryParts[1] != "ct")
{
return _builder;
}

new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Name", _builder.ApplyNameContainsFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);
new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Description", _builder.ApplyDescriptionContainsFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);

return _builder;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Spg.AloMalo.DomainModel.Interfaces.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spg.AloMalo.Application.Services.PhotoUseCases.Query
{
public class PhotoEndsWithHandler
{
private IPhotoFilterBuilder _builder;

public PhotoEndsWithHandler(IPhotoFilterBuilder builder)
{
_builder = builder;
}

public IPhotoFilterBuilder WithQuery(string query)
{
string[] queryParts = query.Split(' ');
if (queryParts.Length > 3)
{
throw new Exception("Query has to many Parameters!");
}
if (queryParts[1] != "ew")
{
return _builder;
}

new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Name", _builder.ApplyNameEndsWithFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);
new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Description", _builder.ApplyDescriptionEndsWithFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);

return _builder;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using Spg.AloMalo.DomainModel.Interfaces.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spg.AloMalo.Application.Services.PhotoUseCases.Query
{
public class PhotoEqualsHandler
{
private IPhotoFilterBuilder _builder;

public PhotoEqualsHandler(IPhotoFilterBuilder builder)
{
_builder = builder;
}

public IPhotoFilterBuilder WithQuery(string query)
{
string[] queryParts = query.Split(' ');
if (queryParts.Length > 3)
{
throw new Exception("Query has to many Parameters!");
}
if (queryParts[1] != "eq")
{
return _builder;
}

new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Name", _builder.ApplyNameEqualsFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);
new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Description", _builder.ApplyDescriptionEqualsFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);
new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Height", _builder.ApplyHeightEqualsFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);

return _builder;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using Spg.AloMalo.DomainModel.Interfaces.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spg.AloMalo.Application.Services.PhotoUseCases.Query
{
public class PhotoGreaterThanFilterHandler
{
private IPhotoFilterBuilder _builder;

public PhotoGreaterThanFilterHandler(IPhotoFilterBuilder builder)
{
_builder = builder;
}

public IPhotoFilterBuilder WithQuery(string query)
{
string[] queryParts = query.Split(' ');
if (queryParts.Length < 3) {
throw new Exception("Query has too many Parameters!");
}
if (queryParts[1] != "gt")
{
return _builder;
}

new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Name", _builder.ApplyHeightGreaterThanFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);

return _builder;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Spg.AloMalo.DomainModel.Interfaces.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spg.AloMalo.Application.Services.PhotoUseCases.Query
{
public class PhotoLowerThanHandler
{
private IPhotoFilterBuilder _builder;

public PhotoLowerThanHandler(IPhotoFilterBuilder builder)
{
_builder = builder;
}

public IPhotoFilterBuilder WithQuery(string query)
{
string[] queryParts = query.Split(' ');
if (queryParts.Length < 3)
{
throw new Exception("Query has too many Parameters!");
}
if (queryParts[1] != "lt")
{
return _builder;
}

new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Name", _builder.ApplyHeightLowerThanFilter)
.ExecuteDeligate(queryParts[0], queryParts[2]);

return _builder;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Spg.AloMalo.DomainModel.Interfaces.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spg.AloMalo.Application.Services.PhotoUseCases.Query
{
public class PhotoPlusMinus100Handler
{
private IPhotoFilterBuilder _builder;

public PhotoPlusMinus100Handler(IPhotoFilterBuilder builder)
{
_builder = builder;
}

public IPhotoFilterBuilder WithQuery(string query)
{
string[] queryParts = query.Split(' ');
if (queryParts.Length < 3)
{
throw new Exception("Query has too many Parameters!");
}
if (queryParts[1] != "pm100")
{
return _builder;
}

new EntityPropertyFilterMapper<IPhotoFilterBuilder, string>("Height", _builder.ApplyHeightPlusMinus100Filter)
.ExecuteDeligate(queryParts[0], queryParts[2]);

return _builder;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,14 @@ public interface IPhotoFilterBuilder : IEntityFilterBuilder<Photo>
IPhotoFilterBuilder ApplyOrientationFilter(Orientations orientation);
IPhotoFilterBuilder ApplyAiFilter(bool @is);
//IPhotoFilterBuilder ApplyPaging(int page, int size);
IPhotoFilterBuilder ApplyDescriptionBeginsWithFilter(string description);
IPhotoFilterBuilder ApplyDescriptionContainsFilter(string description);
IPhotoFilterBuilder ApplyDescriptionEndsWithFilter(string description);
IPhotoFilterBuilder ApplyDescriptionEqualsFilter(string description);
IPhotoFilterBuilder ApplyNameEqualsFilter(string name);
IPhotoFilterBuilder ApplyHeightGreaterThanFilter(string filter);
IPhotoFilterBuilder ApplyHeightLowerThanFilter(string filter);
IPhotoFilterBuilder ApplyHeightEqualsFilter(string filter);
IPhotoFilterBuilder ApplyHeightPlusMinus100Filter(string filter);
}
}
48 changes: 48 additions & 0 deletions src/Spg.AloMalo.Repository/Builder/PhotoFilterBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,53 @@ public IPhotoFilterBuilder ApplyAiFilter(bool @is)
EntityList = EntityList.Where(x => x.AiGenerated == @is);
return this;
}
public IPhotoFilterBuilder ApplyDescriptionBeginsWithFilter(string filter)
{
EntityList = EntityList.Where(x => x.Description.StartsWith(filter));
return this;
}
public IPhotoFilterBuilder ApplyDescriptionContainsFilter(string filter)
{
EntityList = EntityList.Where(x => x.Description.Contains(filter));
return this;
}
public IPhotoFilterBuilder ApplyDescriptionEndsWithFilter(string filter)
{
EntityList = EntityList.Where(x => x.Description.EndsWith(filter));
return this;
}
public IPhotoFilterBuilder ApplyDescriptionEqualsFilter(string description)
{
EntityList = EntityList.Where(x => x.Description == description);
return this;
}
public IPhotoFilterBuilder ApplyNameEqualsFilter(string name)
{
EntityList = EntityList.Where(x => x.Name == name);
return this;
}
public IPhotoFilterBuilder ApplyHeightGreaterThanFilter(string filter)
{

EntityList = EntityList.Where(x => x.Height > int.Parse(filter));
return this;
}
public IPhotoFilterBuilder ApplyHeightLowerThanFilter(string filter)
{

EntityList = EntityList.Where(x => x.Height < int.Parse(filter));
return this;
}
public IPhotoFilterBuilder ApplyHeightEqualsFilter(string filter)
{
EntityList = EntityList.Where(x => x.Height == int.Parse(filter));
return this;
}
public IPhotoFilterBuilder ApplyHeightPlusMinus100Filter(string filter)
{
EntityList = EntityList.Where(x => x.Height < int.Parse(filter)+100 && x.Height > int.Parse(filter)-100);
return this;
}

}
}
Loading
Loading