Skip to content

Commit 00c5698

Browse files
refactor: search demo things
1 parent 54a321c commit 00c5698

15 files changed

Lines changed: 197 additions & 33 deletions

File tree

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
using CanBeYours.Core.Domain.DemoThings;
12
using CodeBlock.DevKit.Contracts.Dtos;
23

34
namespace CanBeYours.Application.Dtos;
45

56
public class SearchDemoThingsInputDto : SearchInputDto
67
{
7-
// Add any additional search filters here if needed in the future
8+
public DemoThingType Type { get; set; }
89
}

src/1-Libraries/Application/Services/DemoThings/DemoThingService.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ public async Task<Result<CommandResult>> UpdateDemoThing(string id, UpdateDemoTh
3131

3232
public async Task<Result<SearchOutputDto<GetDemoThingDto>>> SearchDemoThings(SearchDemoThingsInputDto input)
3333
{
34-
return await _requestDispatcher.SendQuery(new SearchDemoThingsRequest(input.Term, input.PageNumber, input.RecordsPerPage, input.SortOrder));
34+
return await _requestDispatcher.SendQuery(
35+
new SearchDemoThingsRequest(
36+
input.Term,
37+
input.Type,
38+
input.PageNumber,
39+
input.RecordsPerPage,
40+
input.SortOrder,
41+
input.FromDateTime,
42+
input.ToDateTime
43+
)
44+
);
3545
}
3646
}
Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CanBeYours.Application.Dtos;
2+
using CanBeYours.Core.Domain.DemoThings;
23
using CodeBlock.DevKit.Application.Queries;
34
using CodeBlock.DevKit.Contracts.Dtos;
45
using CodeBlock.DevKit.Core.Helpers;
@@ -7,17 +8,32 @@ namespace CanBeYours.Application.UseCases.DemoThings.SearchDemoThings;
78

89
internal class SearchDemoThingsRequest : BaseQuery<SearchOutputDto<GetDemoThingDto>>
910
{
10-
public SearchDemoThingsRequest(string term, int pageNumber, int recordsPerPage, SortOrder sortOrder, QueryOptions options = null)
11+
public SearchDemoThingsRequest(
12+
string term,
13+
DemoThingType? type,
14+
int pageNumber,
15+
int recordsPerPage,
16+
SortOrder sortOrder,
17+
DateTime? fromDateTime,
18+
DateTime? toDateTime,
19+
QueryOptions options = null
20+
)
1121
: base(options)
1222
{
1323
Term = term;
14-
PageNumber = pageNumber;
24+
Type = type;
1525
RecordsPerPage = recordsPerPage;
26+
PageNumber = pageNumber;
1627
SortOrder = sortOrder;
28+
FromDateTime = fromDateTime;
29+
ToDateTime = toDateTime;
1730
}
1831

32+
public DemoThingType? Type { get; }
33+
public SortOrder SortOrder { get; }
1934
public string Term { get; }
20-
public int PageNumber { get; }
2135
public int RecordsPerPage { get; }
22-
public SortOrder SortOrder { get; }
36+
public int PageNumber { get; }
37+
public DateTime? FromDateTime { get; }
38+
public DateTime? ToDateTime { get; }
2339
}

src/1-Libraries/Application/UseCases/DemoThings/SearchDemoThings/SearchDemoThingsUseCase.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,26 @@ public SearchDemoThingsUseCase(IDemoThingRepository demoThingRepository, IMapper
2020

2121
public async Task<SearchOutputDto<GetDemoThingDto>> Handle(SearchDemoThingsRequest request, CancellationToken cancellationToken)
2222
{
23-
var demoThings = await _demoThingRepository.SearchAsync(request.Term, request.PageNumber, request.RecordsPerPage);
24-
var totalRecords = await _demoThingRepository.CountAsync(request.Term);
23+
var demoThings = await _demoThingRepository.SearchAsync(
24+
request.Term,
25+
request.Type,
26+
request.PageNumber,
27+
request.RecordsPerPage,
28+
request.SortOrder,
29+
request.FromDateTime,
30+
request.ToDateTime
31+
);
2532

26-
var demoThingsDto = _mapper.Map<IEnumerable<GetDemoThingDto>>(demoThings);
33+
var totalRecords = await _demoThingRepository.CountAsync(request.Term, request.Type, request.FromDateTime, request.ToDateTime);
2734

28-
//foreach (var dto in demoThingsDto)
35+
var demoThingdto = _mapper.Map<IEnumerable<GetDemoThingDto>>(demoThings);
36+
37+
//foreach (var demoThing in demoThingdto)
2938
//{
30-
//
39+
// demoThing.OrdersCount = await _orderAccessorService.PaidOrdersCountByDemoThingId(demoThing.Id);
40+
// demoThing.PlansCount = await _planRepository.CountByDemoThingId(demoThing.Id);
3141
//}
3242

33-
return new SearchOutputDto<GetDemoThingDto> { TotalRecords = totalRecords, Items = demoThingsDto };
43+
return new SearchOutputDto<GetDemoThingDto> { TotalRecords = totalRecords, Items = demoThingdto };
3444
}
3545
}
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1+
using CodeBlock.DevKit.Core.Helpers;
12
using CodeBlock.DevKit.Domain.Services;
23

34
namespace CanBeYours.Core.Domain.DemoThings;
45

56
public interface IDemoThingRepository : IBaseAggregateRepository<DemoThing>
67
{
7-
Task<long> CountAsync(string term);
8-
Task<IEnumerable<DemoThing>> SearchAsync(string term, int pageNumber, int recordsPerPage);
8+
Task<long> CountAsync(string term, DemoThingType? type, DateTime? fromDateTime, DateTime? toDateTime);
9+
Task<IEnumerable<DemoThing>> SearchAsync(
10+
string term,
11+
DemoThingType? type,
12+
int pageNumber,
13+
int recordsPerPage,
14+
SortOrder sortOrder,
15+
DateTime? fromDateTime,
16+
DateTime? toDateTime
17+
);
918
}

src/1-Libraries/Core/Resources/SharedResource.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/1-Libraries/Core/Resources/SharedResource.fa.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,7 @@
141141
<data name="DemoThing_UserId" xml:space="preserve">
142142
<value>شناسه ی کاربر</value>
143143
</data>
144+
<data name="DemoThingType_All" xml:space="preserve">
145+
<value>همه ی انواع دمو</value>
146+
</data>
144147
</root>

src/1-Libraries/Core/Resources/SharedResource.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,7 @@
141141
<data name="DemoThing_UserId" xml:space="preserve">
142142
<value>User Id</value>
143143
</data>
144+
<data name="DemoThingType_All" xml:space="preserve">
145+
<value>All Demo Types</value>
146+
</data>
144147
</root>

src/1-Libraries/Infrastructure/Repositories/DemoThingRepository.cs

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33

44
using CanBeYours.Core.Domain.DemoThings;
55
using CanBeYours.Infrastructure.DbContext;
6-
using CodeBlock.DevKit.Infrastructure.Database;
76
using CodeBlock.DevKit.Core.Extensions;
7+
using CodeBlock.DevKit.Core.Helpers;
8+
using CodeBlock.DevKit.Infrastructure.Database;
89
using MongoDB.Driver;
910

1011
namespace CanBeYours.Infrastructure.Repositories;
@@ -19,36 +20,53 @@ public DemoThingRepository(MainDbContext dbContext)
1920
_demoThings = dbContext.DemoThings;
2021
}
2122

22-
public async Task<long> CountAsync(string term)
23+
public async Task<long> CountAsync(string term, DemoThingType? type, DateTime? fromDateTime, DateTime? toDateTime)
2324
{
24-
var filter = GetFilter(term);
25+
var filter = GetFilter(term, type, fromDateTime, toDateTime);
2526
return await _demoThings.CountDocumentsAsync(filter);
2627
}
2728

28-
public async Task<IEnumerable<DemoThing>> SearchAsync(string term, int pageNumber, int recordsPerPage)
29+
public async Task<IEnumerable<DemoThing>> SearchAsync(
30+
string term,
31+
DemoThingType? type,
32+
int pageNumber,
33+
int recordsPerPage,
34+
SortOrder sortOrder,
35+
DateTime? fromDateTime,
36+
DateTime? toDateTime
37+
)
2938
{
30-
var filter = GetFilter(term);
31-
var sortDefinition = Builders<DemoThing>.Sort.Descending(u => u.CreationTime.DateTime);
32-
33-
return await _demoThings
34-
.Find(filter)
35-
.Sort(sortDefinition)
36-
.Skip(recordsPerPage * (pageNumber - 1))
37-
.Limit(recordsPerPage)
38-
.ToListAsync();
39+
var filter = GetFilter(term, type, fromDateTime, toDateTime);
40+
41+
var sortDefinition =
42+
sortOrder == SortOrder.Desc
43+
? Builders<DemoThing>.Sort.Descending(u => u.CreationTime.DateTime)
44+
: Builders<DemoThing>.Sort.Ascending(u => u.CreationTime.DateTime);
45+
46+
return await _demoThings.Find(filter).Sort(sortDefinition).Skip(recordsPerPage * (pageNumber - 1)).Limit(recordsPerPage).ToListAsync();
3947
}
4048

41-
private FilterDefinition<DemoThing> GetFilter(string term)
49+
private FilterDefinition<DemoThing> GetFilter(string term, DemoThingType? type, DateTime? fromDateTime, DateTime? toDateTime)
4250
{
4351
var filterBuilder = Builders<DemoThing>.Filter;
4452
var filters = new List<FilterDefinition<DemoThing>>();
4553

54+
if (type.HasValue)
55+
filters.Add(filterBuilder.Eq(u => u.Type, type.Value));
56+
57+
if (fromDateTime.HasValue)
58+
filters.Add(filterBuilder.Gte(t => t.CreationTime.DateTime, fromDateTime.Value.ToUniversalTime()));
59+
60+
if (toDateTime.HasValue)
61+
filters.Add(filterBuilder.Lte(t => t.CreationTime.DateTime, toDateTime.Value.ToUniversalTime()));
62+
4663
if (!term.IsNullOrEmptyOrWhiteSpace())
4764
{
4865
filters.Add(
4966
filterBuilder.Or(
5067
filterBuilder.Regex(u => u.Name, new MongoDB.Bson.BsonRegularExpression(term, "i")),
51-
filterBuilder.Regex(u => u.Description, new MongoDB.Bson.BsonRegularExpression(term, "i"))
68+
filterBuilder.Regex(u => u.Description, new MongoDB.Bson.BsonRegularExpression(term, "i")),
69+
filterBuilder.Regex(u => u.UserId, new MongoDB.Bson.BsonRegularExpression(term, "i"))
5270
)
5371
);
5472
}

src/2-Clients/AdminPanel/Pages/DemoThings/Components/CreateDemoThing.razor

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
@using CanBeYours.AdminPanel.Helpers
2+
@using CanBeYours.Core.Domain.DemoThings
23

34
<EditForm Model="Input" OnValidSubmit="HandleCreateDemoThing">
45
<DataAnnotationsValidator />
@@ -8,15 +9,28 @@
89
@SharedLocalizer[SharedResource.DemoThing_Name]:
910
</label>
1011
<InputText @bind-Value="Input.Name" class="form-control f-sm"></InputText>
11-
<ValidationMessage For="()=>Input.Name" class="text-danger f-sm"></ValidationMessage>
12+
<ValidationMessage For="() => Input.Name" class="text-danger f-sm"></ValidationMessage>
13+
</div>
14+
15+
<div class="form-group p-2">
16+
<label class="f-sm text-secondary">
17+
@SharedLocalizer[SharedResource.DemoThing_Type]:
18+
</label>
19+
<InputSelect @bind-Value="Input.Type" class="form-control f-sm">
20+
@foreach (var type in Enum.GetValues<DemoThingType>())
21+
{
22+
<option value="@type">@type.GetEnumDisplayName()</option>
23+
}
24+
</InputSelect>
25+
<ValidationMessage For="() => Input.Type" class="text-danger f-sm"></ValidationMessage>
1226
</div>
1327

1428
<div class="form-group p-2">
1529
<label class="f-sm text-secondary">
1630
@SharedLocalizer[SharedResource.DemoThing_Description]:
1731
</label>
1832
<InputTextArea @bind-Value="Input.Description" class="form-control f-sm" rows="3"></InputTextArea>
19-
<ValidationMessage For="()=>Input.Description" class="text-danger f-sm"></ValidationMessage>
33+
<ValidationMessage For="() => Input.Description" class="text-danger f-sm"></ValidationMessage>
2034
</div>
2135

2236
<div class="form-group p-2">
@@ -37,4 +51,4 @@
3751
var result = await DemoThingService.CreateDemoThing(Input);
3852
result.ShowToast(ToastService).PublishMessage(MessageService, Constants.DEMO_THING_CREATED).CloseModal(ModalInstance);
3953
}
40-
}
54+
}

0 commit comments

Comments
 (0)