Skip to content

Commit f07ccad

Browse files
refactor: demo use cases
1 parent 05cbf72 commit f07ccad

7 files changed

Lines changed: 90 additions & 35 deletions

File tree

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
<Project Sdk="Microsoft.NET.Sdk">
2-
<PropertyGroup>
3-
<TargetFramework>net8.0</TargetFramework>
4-
<AssemblyName>CanBeYours.Application</AssemblyName>
5-
<RootNamespace>CanBeYours.Application</RootNamespace>
6-
<ImplicitUsings>enable</ImplicitUsings>
7-
</PropertyGroup>
8-
<ItemGroup>
9-
<PackageReference Include="CodeBlock.DevKit.Application" Version="1.3.6" />
10-
<PackageReference Include="CodeBlock.DevKit.Contracts" Version="1.3.6" />
11-
<PackageReference Include="CodeBlock.DevKit.Identity" Version="1.3.6" />
12-
<PackageReference Include="CodeBlock.DevKit.Administration" Version="1.3.6" />
13-
<PackageReference Include="CodeBlock.DevKit.AIChatBot" Version="1.3.6" />
14-
<PackageReference Include="CodeBlock.DevKit.Licensing" Version="1.3.6" />
15-
<PackageReference Include="CodeBlock.DevKit.Payment" Version="1.3.6" />
16-
<PackageReference Include="CodeBlock.DevKit.Pricing" Version="1.3.6" />
17-
<PackageReference Include="CodeBlock.DevKit.Settings" Version="1.3.6" />
18-
<PackageReference Include="CodeBlock.DevKit.Subscription" Version="1.3.6" />
19-
</ItemGroup>
20-
<ItemGroup>
21-
<ProjectReference Include="..\Core\Core.csproj" />
22-
</ItemGroup>
23-
<ItemGroup>
24-
<Folder Include="UseCases\" />
25-
</ItemGroup>
2+
<PropertyGroup>
3+
<TargetFramework>net8.0</TargetFramework>
4+
<AssemblyName>CanBeYours.Application</AssemblyName>
5+
<RootNamespace>CanBeYours.Application</RootNamespace>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
</PropertyGroup>
8+
<ItemGroup>
9+
<PackageReference Include="CodeBlock.DevKit.Application" Version="1.3.7" />
10+
<PackageReference Include="CodeBlock.DevKit.Contracts" Version="1.3.7" />
11+
<PackageReference Include="CodeBlock.DevKit.Identity" Version="1.3.7" />
12+
<PackageReference Include="CodeBlock.DevKit.Administration" Version="1.3.7" />
13+
<PackageReference Include="CodeBlock.DevKit.AIChatBot" Version="1.3.7" />
14+
<PackageReference Include="CodeBlock.DevKit.Licensing" Version="1.3.7" />
15+
<PackageReference Include="CodeBlock.DevKit.Payment" Version="1.3.7" />
16+
<PackageReference Include="CodeBlock.DevKit.Pricing" Version="1.3.7" />
17+
<PackageReference Include="CodeBlock.DevKit.Settings" Version="1.3.7" />
18+
<PackageReference Include="CodeBlock.DevKit.Subscription" Version="1.3.7" />
19+
</ItemGroup>
20+
<ItemGroup>
21+
<ProjectReference Include="..\Core\Core.csproj" />
22+
</ItemGroup>
23+
<ItemGroup>
24+
<Folder Include="UseCases\" />
25+
</ItemGroup>
2626
</Project>

src/1-Libraries/Application/Dtos/GetDemoThingDto.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ public class GetDemoThingDto : GetEntityDto
88
public string Name { get; set; }
99
public string Description { get; set; }
1010
public DemoThingType Type { get; set; }
11+
public string UserEmail { get; set; }
1112
public string UserId { get; set; }
1213
}

src/1-Libraries/Application/UseCases/DemoThings/GetDemoThing/GetDemoThingUseCase.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using CanBeYours.Core.Domain.DemoThings;
66
using CodeBlock.DevKit.Application.Queries;
77
using CodeBlock.DevKit.Application.Srvices;
8+
using CodeBlock.DevKit.Contracts.Services;
89
using MediatR;
910
using Microsoft.Extensions.Logging;
1011

@@ -14,17 +15,20 @@ internal class GetDemoThingUseCase : BaseQueryHandler, IRequestHandler<GetDemoTh
1415
{
1516
private readonly IDemoThingRepository _demoThingRepository;
1617
private readonly ICurrentUser _currentUser;
18+
private readonly IUserAccessorService _userAccessorService;
1719

1820
public GetDemoThingUseCase(
1921
IDemoThingRepository demoThingRepository,
2022
IMapper mapper,
2123
ILogger<GetDemoThingUseCase> logger,
22-
ICurrentUser currentUser
24+
ICurrentUser currentUser,
25+
IUserAccessorService userAccessorService
2326
)
2427
: base(mapper, logger)
2528
{
2629
_demoThingRepository = demoThingRepository;
2730
_currentUser = currentUser;
31+
_userAccessorService = userAccessorService;
2832
}
2933

3034
public async Task<GetDemoThingDto> Handle(GetDemoThingRequest request, CancellationToken cancellationToken)
@@ -33,8 +37,14 @@ public async Task<GetDemoThingDto> Handle(GetDemoThingRequest request, Cancellat
3337
if (demoThing == null)
3438
throw DemoThingApplicationExceptions.DemoThingNotFound(request.Id);
3539

40+
// Ensures that the current user has permission to access the specified data
3641
EnsureUserHasAccess(demoThing.UserId, _currentUser, Permissions.Demo.DEMO_THINGS);
3742

38-
return _mapper.Map<GetDemoThingDto>(demoThing);
43+
var demoThingDto = _mapper.Map<GetDemoThingDto>(demoThing);
44+
45+
// Fetch the email associated with the user Id
46+
demoThingDto.UserEmail = await _userAccessorService.GetEmailByUserIdIfExists(demoThing.UserId);
47+
48+
return demoThingDto;
3949
}
4050
}

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

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
using CanBeYours.Core.Domain.DemoThings;
44
using CodeBlock.DevKit.Application.Queries;
55
using CodeBlock.DevKit.Contracts.Dtos;
6+
using CodeBlock.DevKit.Contracts.Services;
7+
using CodeBlock.DevKit.Core.Extensions;
8+
using CodeBlock.DevKit.Core.Helpers;
69
using MediatR;
710
using Microsoft.Extensions.Logging;
811

@@ -11,17 +14,28 @@ namespace CanBeYours.Application.UseCases.DemoThings.SearchDemoThings;
1114
internal class SearchDemoThingsUseCase : BaseQueryHandler, IRequestHandler<SearchDemoThingsRequest, SearchOutputDto<GetDemoThingDto>>
1215
{
1316
private readonly IDemoThingRepository _demoThingRepository;
17+
private readonly IUserAccessorService _userAccessorService;
1418

15-
public SearchDemoThingsUseCase(IDemoThingRepository demoThingRepository, IMapper mapper, ILogger<SearchDemoThingsUseCase> logger)
19+
public SearchDemoThingsUseCase(
20+
IDemoThingRepository demoThingRepository,
21+
IMapper mapper,
22+
ILogger<SearchDemoThingsUseCase> logger,
23+
IUserAccessorService userAccessorService
24+
)
1625
: base(mapper, logger)
1726
{
1827
_demoThingRepository = demoThingRepository;
28+
_userAccessorService = userAccessorService;
1929
}
2030

2131
public async Task<SearchOutputDto<GetDemoThingDto>> Handle(SearchDemoThingsRequest request, CancellationToken cancellationToken)
2232
{
33+
// Replace the searched user email with user Id if the term is a valid email
34+
// This allows searching by user email as well as user Id
35+
var term = await ReplaceSearchedUserEmailWithUserId(request.Term);
36+
2337
var demoThings = await _demoThingRepository.SearchAsync(
24-
request.Term,
38+
term,
2539
request.Type,
2640
request.PageNumber,
2741
request.RecordsPerPage,
@@ -32,14 +46,29 @@ public async Task<SearchOutputDto<GetDemoThingDto>> Handle(SearchDemoThingsReque
3246

3347
var totalRecords = await _demoThingRepository.CountAsync(request.Term, request.Type, request.FromDateTime, request.ToDateTime);
3448

35-
var demoThingdto = _mapper.Map<IEnumerable<GetDemoThingDto>>(demoThings);
49+
var demoThingsDto = _mapper.Map<IEnumerable<GetDemoThingDto>>(demoThings);
50+
51+
// Fetch the email associated with the user Id
52+
foreach (var demoThingDto in demoThingsDto)
53+
demoThingDto.UserEmail = await _userAccessorService.GetEmailByUserIdIfExists(demoThingDto.UserId);
54+
55+
return new SearchOutputDto<GetDemoThingDto> { TotalRecords = totalRecords, Items = demoThingsDto };
56+
}
57+
58+
private async Task<string> ReplaceSearchedUserEmailWithUserId(string term)
59+
{
60+
if (term.IsNullOrEmptyOrWhiteSpace())
61+
return string.Empty;
62+
63+
term = term.Trim();
3664

37-
//foreach (var demoThing in demoThingdto)
38-
//{
39-
// demoThing.OrdersCount = await _orderAccessorService.PaidOrdersCountByDemoThingId(demoThing.Id);
40-
// demoThing.PlansCount = await _planRepository.CountByDemoThingId(demoThing.Id);
41-
//}
65+
if (term.IsValidEmail())
66+
{
67+
var userId = await _userAccessorService.GetUserIdByEmailIfExists(term);
68+
if (!userId.IsNullOrEmptyOrWhiteSpace())
69+
term = userId;
70+
}
4271

43-
return new SearchOutputDto<GetDemoThingDto> { TotalRecords = totalRecords, Items = demoThingdto };
72+
return term;
4473
}
4574
}

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
@@ -144,4 +144,7 @@
144144
<data name="DemoThingType_All" xml:space="preserve">
145145
<value>همه ی انواع دمو</value>
146146
</data>
147+
<data name="Email" xml:space="preserve">
148+
<value>ایمیل</value>
149+
</data>
147150
</root>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,7 @@
144144
<data name="DemoThingType_All" xml:space="preserve">
145145
<value>All Demo Types</value>
146146
</data>
147+
<data name="Email" xml:space="preserve">
148+
<value>Email</value>
149+
</data>
147150
</root>

0 commit comments

Comments
 (0)