first commit

This commit is contained in:
2026-04-16 21:05:21 +04:30
commit 49591985ac
283 changed files with 12716 additions and 0 deletions
@@ -0,0 +1,24 @@
using Vizhvizh.BuildingBlocks.Application.Configuration.Commnad;
using Vizhvizh.Shared.Domain.ValueObjects;
using Vizhvizh.Shop.ApplicationContract.Commands;
using Vizhvizh.Shop.Domain.Shops.Repositories;
using Vizhvizh.Shop.Domain.Shops.TypeIds;
using Vizhvizh.Shop.Domain.Shops.ValuesObjects;
namespace Vizhvizh.Shop.Application.CommandHandlers.Shops;
public class CreateShopCommandHandler(IShopRepository shopRepository) : ICommandHandler<CreateShopCommand, ShopId>
{
public async Task<ShopId> Handle(CreateShopCommand request, CancellationToken cancellationToken)
{
var location = ShopLocation.CreateNew(request.ShopLocation.Latitude, request.ShopLocation.Longitude,
request.ShopLocation.ProvinceId, request.ShopLocation.CityId, request.ShopLocation.Address, request.ShopLocation.PostalCode);
var shop = Domain.Shops.Entities.Shop.CreateNew(request.OwnerId, request.Title,
location,TelephoneVO.CreateNew(request.Telephone), request.Description);
await shopRepository.AddAsync(shop, cancellationToken);
return shop.Id;
}
}
@@ -0,0 +1,14 @@
using Vizhvizh.BuildingBlocks.Application.Configuration.Commnad;
using Vizhvizh.Shop.ApplicationContract.Commands;
using Vizhvizh.Shop.Domain.Shops.Repositories;
namespace Vizhvizh.Shop.Application.CommandHandlers.Shops;
public class SetTitleShopCommandHandler(IShopRepository shopRepository) : ICommandHandler<SetTitleShopCommand>
{
public async Task Handle(SetTitleShopCommand request, CancellationToken cancellationToken)
{
var shop = await shopRepository.FindByIdAsync(request.ShopId, cancellationToken);
shop.SetTitle(request.Title);
}
}
@@ -0,0 +1,18 @@
using Vizhvizh.BuildingBlocks.Application.Configuration.Commnad;
using Vizhvizh.Shop.ApplicationContract.Commands;
using Vizhvizh.Shop.Domain.Sliders.Entities;
using Vizhvizh.Shop.Domain.Sliders.Repositories;
using Vizhvizh.Shop.Domain.Sliders.ValuesObjects;
namespace Vizhvizh.Shop.Application.CommandHandlers.Sliders;
public class CreateSliderCommandHandler(ISliderRepository sliderRepository) : ICommandHandler<CreateSliderCommand>
{
public async Task Handle(CreateSliderCommand request, CancellationToken cancellationToken)
{
var slider = Slider.CreateNew(request.Title, SliderImage.CreateNew(request.ImageUrl),
SliderUrl.CreateNew(request.LinkUrl), new SliderKey(request.SliderKeyType, request.SliderKey));
await sliderRepository.AddAsync(slider, cancellationToken);
}
}
+13
View File
@@ -0,0 +1,13 @@
using Vizhvizh.BuildingBlocks.Application.Contract;
using Vizhvizh.BuildingBlocks.Domain.Contract;
namespace Vizhvizh.Shop.Application;
public interface IShopModule
{
Task<TResult> ExecuteCommandAsync<TResult>(ICommand<TResult> command,CancellationToken cancellationToken);
Task ExecuteCommandAsync(ICommand command, CancellationToken cancellationToken);
Task<TResult> ExecuteQueryAsync<TResult>(IQuery<TResult> query, CancellationToken cancellationToken);
}
@@ -0,0 +1,33 @@
using Dapper;
using Vizhvizh.BuildingBlocks.Application.Configuration.Query;
using Vizhvizh.BuildingBlocks.Application.Data;
using Vizhvizh.BuildingBlocks.Application.SelectBuilders;
using Vizhvizh.Shop.ApplicationContract.DTOs;
using Vizhvizh.Shop.ApplicationContract.Queries;
namespace Vizhvizh.Shop.Application.QueryHandlers.Shops;
public class GetShopByIdQueryHandler(ISqlConnectionFactory connectionFactory, ISqlSelectBuilder sqlSelectBuilder) : IQueryHandler<GetShopByIdQuery, ShopDTO?>
{
public async Task<ShopDTO?> Handle(GetShopByIdQuery request, CancellationToken cancellationToken)
{
var connection = connectionFactory.GetOpenConnection();
var (sql, parameters) = sqlSelectBuilder
.From("Shop.Shops")
.Select<Domain.Shops.Entities.Shop, ShopDTO>(
(d => d.Id, dto => dto.Id),
(d => d.OwnerId, dto => dto.OwnerId),
(d => d.Title, dto => dto.Title),
(d => d.Description, dto => dto.Description),
(d => d.Email, dto => dto.Email),
(d => d.Telephone, dto => dto.Telephone),
(d => d.Logo, dto => dto.Logo)
)
.Where<ShopDTO>(s => s.Id, request.ShopId)
.Build();
var result = await connection.QueryFirstOrDefaultAsync<ShopDTO>(sql, parameters);
return result;
}
}
@@ -0,0 +1,31 @@
using Dapper;
using Vizhvizh.BuildingBlocks.Application.Configuration.Query;
using Vizhvizh.BuildingBlocks.Application.Data;
using Vizhvizh.BuildingBlocks.Application.SelectBuilders;
using Vizhvizh.Shop.ApplicationContract.DTOs;
using Vizhvizh.Shop.ApplicationContract.Queries;
using Vizhvizh.Shop.Domain.Sliders.Entities;
namespace Vizhvizh.Shop.Application.QueryHandlers.Sliders;
public class GetSlidersByKeyQueryHandler(ISqlConnectionFactory sqlConnectionFactory, ISqlSelectBuilder sqlSelectBuilder)
: IQueryHandler<GetSlidersByKeyQuery, IEnumerable<SliderDTO>>
{
public async Task<IEnumerable<SliderDTO>> Handle(GetSlidersByKeyQuery request, CancellationToken cancellationToken)
{
var connection = sqlConnectionFactory.GetOpenConnection();
var (sql, parameters) = sqlSelectBuilder.From("Shop.Sliders")
.Select<Slider, SliderDTO>(
(d => d.Title, dto => dto.Title),
(d => d.Image, dto => dto.Image),
(d => d.Url, dto => dto.LinkUrl)
)
.Pagination<Slider>(request.PageNumber, request.PageSize, x => x.CreateOn, false)
.Where<Slider>(x => x.Key, request.Key)
.Build();
var result = await connection.QueryAsync<SliderDTO>(sql, parameters);
return result;
}
}
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.72" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Vichvich.Shop.ApplicationContract\Vizhvizh.Shop.ApplicationContract.csproj" />
</ItemGroup>
</Project>