add version 0.17.21.34 , fix payment issues
parent
54312efb3b
commit
34f2efa128
|
@ -17,8 +17,8 @@
|
|||
"TaxesFee": 9
|
||||
},
|
||||
"SiteSettings": {
|
||||
"BaseUrl": "http://192.168.88.251:32770",
|
||||
"AdminPanelBaseUrl": "https://admin.vesmook.com",
|
||||
"BaseUrl": "http://localhost:32770",
|
||||
"AdminPanelBaseUrl": "https://admin.vesmeh.com",
|
||||
"KaveNegarApiKey": "3735494B4143727A794346457461576A2B4B6668414973424E333561505A694B",
|
||||
"UserSetting": {
|
||||
"Username": "netinashop",
|
||||
|
|
|
@ -6,38 +6,9 @@ public class SeedController : ICarterModule
|
|||
{
|
||||
public void AddRoutes(IEndpointRouteBuilder app)
|
||||
{
|
||||
var group = app.NewVersionedApi("Seed")
|
||||
.MapGroup("api/seed");
|
||||
//var group = app.NewVersionedApi("Seed")
|
||||
// .MapGroup("api/seed");
|
||||
|
||||
group.MapGet("test1", () =>
|
||||
{
|
||||
return TypedResults.BadRequest(new ApiResult(false, ApiResultStatusCode.ServerError,
|
||||
"Server Error 1 ( BAD REQUEST )"));
|
||||
})
|
||||
.WithDisplayName("SeedCategoriesAsync")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapGet("test2", () =>
|
||||
{
|
||||
throw new Exception("Server Error 2 ( EXCEPTION THROWN )");
|
||||
})
|
||||
.WithDisplayName("SeedCategoriesAsync")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapGet("test3", () =>
|
||||
{
|
||||
return TypedResults.Problem("Server Error 2 ( EXCEPTION THROWN )");
|
||||
})
|
||||
.WithDisplayName("SeedCategoriesAsync")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
|
||||
group.MapGet("test3", () =>
|
||||
{
|
||||
return TypedResults.StatusCode(500);
|
||||
})
|
||||
.WithDisplayName("SeedCategoriesAsync")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
//group.MapPost("categories", SeedCategoriesAsync)
|
||||
// .WithDisplayName("SeedCategoriesAsync")
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using NetinaShop.Repository.Repositories.Entity.Abstracts;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace NetinaShop.Api.Controller;
|
||||
|
||||
|
@ -9,43 +7,25 @@ public class SettingController : ICarterModule
|
|||
public void AddRoutes(IEndpointRouteBuilder app)
|
||||
{
|
||||
var group = app.NewVersionedApi("Setting")
|
||||
.MapGroup("api/setting")
|
||||
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser());
|
||||
.MapGroup("api/setting");
|
||||
|
||||
group.MapGet("{settingName}", GetSettingAsync)
|
||||
.WithDisplayName("GetSetting")
|
||||
.RequireAuthorization(builder=>builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser())
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapPost("{settingName}", PostSettingAsync)
|
||||
.WithDisplayName("PostSettingAsync")
|
||||
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser())
|
||||
.HasApiVersion(1.0);
|
||||
}
|
||||
|
||||
public async Task<IResult> GetSettingAsync(string settingName, [FromServices] IMartenRepository martenRepository, CancellationToken cancellationToken)
|
||||
public async Task<IResult> GetSettingAsync(string settingName, [FromServices] ISettingService settingService, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await settingService.GetSettingAsync(settingName, cancellationToken));
|
||||
|
||||
public async Task<IResult> PostSettingAsync(string settingName, [FromBody]JsonDocument settingObj, [FromServices]ISettingService settingService, CancellationToken cancellationToken)
|
||||
{
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"NetinaShop.Domain.Entities.Settings.{settingName}");
|
||||
if (type == null)
|
||||
throw new AppException("Setting not found", ApiResultStatusCode.NotFound);
|
||||
|
||||
var setting = await ((dynamic)martenRepository.GetType()?.GetMethod("GetEntityAsync")
|
||||
?.MakeGenericMethod(type)
|
||||
.Invoke(martenRepository,new object[]{ cancellationToken })!);
|
||||
if (setting == null)
|
||||
setting = Activator.CreateInstance(type);
|
||||
|
||||
return TypedResults.Ok(setting);
|
||||
}
|
||||
|
||||
public async Task<IResult> PostSettingAsync(string settingName, [FromBody]JsonDocument settingObj, [FromServices] IMartenRepository martenRepository, CancellationToken cancellationToken)
|
||||
{
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"NetinaShop.Domain.Entities.Settings.{settingName}");
|
||||
if (type == null)
|
||||
throw new AppException("Setting not found", ApiResultStatusCode.NotFound);
|
||||
var setting = settingObj.Deserialize(type);
|
||||
if (setting == null)
|
||||
throw new AppException("Setting not found", ApiResultStatusCode.NotFound);
|
||||
await ((dynamic)martenRepository.GetType().GetMethod("AddOrUpdateEntityAsync")
|
||||
?.MakeGenericMethod(type).Invoke(martenRepository, new[] { setting , cancellationToken })!);
|
||||
|
||||
await settingService.CreateOrUpdateSettingAsync(settingName, settingObj,cancellationToken);
|
||||
return TypedResults.Ok();
|
||||
}
|
||||
}
|
|
@ -6,43 +6,43 @@
|
|||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
<AssemblyVersion>0.17.20.33</AssemblyVersion>
|
||||
<FileVersion>0.17.20.33</FileVersion>
|
||||
<AssemblyVersion>0.17.21.34</AssemblyVersion>
|
||||
<FileVersion>0.17.21.34</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.3" />
|
||||
|
||||
<PackageReference Include="Asp.Versioning.Http" Version="8.0.0" />
|
||||
<PackageReference Include="Asp.Versioning.Http" Version="8.1.0" />
|
||||
<PackageReference Include="Ben.BlockingDetector" Version="0.0.4" />
|
||||
<PackageReference Include="Carter" Version="8.0.0" />
|
||||
<PackageReference Include="FluentValidation" Version="11.9.0" />
|
||||
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="11.9.0" />
|
||||
<PackageReference Include="MediatR.Extensions.Autofac.DependencyInjection" Version="12.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.1">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Autofac" Version="8.0.0" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
|
||||
<PackageReference Include="Elmah.Io.AspNetCore.Serilog" Version="5.0.17" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.6" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
|
||||
<PackageReference Include="Sentry.Serilog" Version="4.0.1" />
|
||||
<PackageReference Include="Sentry.Serilog" Version="4.2.1" />
|
||||
<PackageReference Include="Serilog" Version="3.1.1" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.1" />
|
||||
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" />
|
||||
<PackageReference Include="Serilog.Sinks.PostgreSQL" Version="2.3.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Seq" Version="6.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Seq" Version="7.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.ElmahIo" Version="5.0.38" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
<PackageReference Include="StackExchange.Redis.Extensions.AspNetCore" Version="10.2.0" />
|
||||
|
@ -50,9 +50,9 @@
|
|||
<PackageReference Include="StackExchange.Redis.Extensions.Newtonsoft" Version="10.2.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.5.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="8.0.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="8.0.1" />
|
||||
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="8.0.1" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="8.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -145,7 +145,10 @@ public class ExceptionHandlerMiddleware
|
|||
Formatting = Formatting.Indented
|
||||
});
|
||||
|
||||
context.Response.StatusCode = 501;
|
||||
if (httpStatusCode == HttpStatusCode.InternalServerError)
|
||||
context.Response.StatusCode = 501;
|
||||
else
|
||||
context.Response.StatusCode = (int)httpStatusCode;
|
||||
context.Response.ContentType = "application/json";
|
||||
await context.Response.WriteAsJsonAsync(result);
|
||||
}
|
||||
|
@ -171,7 +174,10 @@ public class ExceptionHandlerMiddleware
|
|||
Formatting = Formatting.Indented
|
||||
});
|
||||
|
||||
context.Response.StatusCode = 501;
|
||||
if (httpStatusCode == HttpStatusCode.InternalServerError)
|
||||
context.Response.StatusCode = 501;
|
||||
else
|
||||
context.Response.StatusCode = (int)httpStatusCode;
|
||||
context.Response.ContentType = "application/json";
|
||||
await context.Response.WriteAsJsonAsync(result);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
namespace NetinaShop.Common.Models.Entity;
|
||||
|
||||
public interface IMartenEntity
|
||||
{
|
||||
string CreatedBy { get; }
|
||||
string ModifiedBy { get; }
|
||||
DateTime CreatedAt { get; }
|
||||
DateTime ModifiedAt { get; }
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
namespace NetinaShop.Common.Models.Entity;
|
||||
|
||||
public class MartenEntity : IMartenEntity
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
|
||||
[Display(Name = "تاریخ ساخت")]
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
[Display(Name = "ساخته شده توسط")]
|
||||
public string CreatedBy { get; set; } = string.Empty;
|
||||
|
||||
[Display(Name = "اخرین تغییر در")]
|
||||
public DateTime ModifiedAt { get; set; }
|
||||
|
||||
[Display(Name = "اخرین تغییر توسط")]
|
||||
public string ModifiedBy { get; set; } = string.Empty;
|
||||
|
||||
|
||||
|
||||
public bool Equals(ApiEntity other)
|
||||
{
|
||||
if (ReferenceEquals(null, other)) return false;
|
||||
if (ReferenceEquals(this, other)) return true;
|
||||
return Id.Equals(other.Id);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj)) return false;
|
||||
if (ReferenceEquals(this, obj)) return true;
|
||||
if (obj.GetType() != this.GetType()) return false;
|
||||
return Equals((ApiEntity)obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return Id.GetHashCode();
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<!--<PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
@ -11,10 +11,10 @@
|
|||
<PackageReference Include="MD.PersianDateTime.Standard" Version="2.5.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.3.1" />
|
||||
</ItemGroup>-->
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.4.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<!--<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<LangVersion>10</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
|
@ -25,7 +25,7 @@
|
|||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.3.1" />
|
||||
</ItemGroup>
|
||||
</ItemGroup>-->
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="MD.PersianDateTime.Standard" />
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
using NetinaShop.Domain.Entities.Pages;
|
||||
|
||||
namespace NetinaShop.Core.CoreServices.Abstracts;
|
||||
namespace NetinaShop.Core.CoreServices.Abstracts;
|
||||
|
||||
public interface IPageService : IScopedDependency
|
||||
{
|
||||
Task<BasePageEntitySDto> GetPageAsync(Guid? id = null, string? pageName = null, string? pageSlug = null,string? type = null, CancellationToken cancellationToken=default);
|
||||
Task<List<BasePageEntitySDto>> GetPagesAsync(CancellationToken cancellationToken = default);
|
||||
Task<BasePageSDto> GetPageAsync(Guid? id = null, string? pageName = null, string? pageSlug = null,string? type = null, CancellationToken cancellationToken=default);
|
||||
Task<List<BasePageSDto>> GetPagesAsync(CancellationToken cancellationToken = default);
|
||||
Task<bool> CreatePageAsync(PageActionRequestDto entity, CancellationToken cancellationToken = default);
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
namespace NetinaShop.Core.CoreServices.Abstracts;
|
||||
|
||||
public interface ISettingService : IScopedDependency
|
||||
{
|
||||
public Task<object> GetSettingAsync(string settingName, CancellationToken cancellationToken = default);
|
||||
public Task CreateOrUpdateSettingAsync(string settingName, JsonDocument settingObj, CancellationToken cancellationToken = default);
|
||||
}
|
|
@ -1,36 +1,35 @@
|
|||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using NetinaShop.Domain;
|
||||
using NetinaShop.Domain.Entities.Pages;
|
||||
using NetinaShop.Repository.Repositories.Entity.Abstracts;
|
||||
using NetinaShop.Domain.MartenEntities.Pages;
|
||||
using NetinaShop.Repository.Repositories.Marten;
|
||||
|
||||
namespace NetinaShop.Core.CoreServices;
|
||||
|
||||
public class PageService : IPageService
|
||||
{
|
||||
private readonly IMartenRepository _martenRepository;
|
||||
private readonly IMartenRepositoryWrapper _martenRepositoryWrapper;
|
||||
|
||||
public PageService(IMartenRepository martenRepository)
|
||||
public PageService(IMartenRepositoryWrapper martenRepositoryWrapperWrapper)
|
||||
{
|
||||
_martenRepository = martenRepository;
|
||||
_martenRepositoryWrapper = martenRepositoryWrapperWrapper;
|
||||
}
|
||||
public async Task<BasePageEntitySDto> GetPageAsync(Guid? id = null, string? pageName = null, string? pageSlug = null, string? type = null, CancellationToken cancellationToken = default)
|
||||
public async Task<BasePageSDto> GetPageAsync(Guid? id = null, string? pageName = null, string? pageSlug = null, string? type = null, CancellationToken cancellationToken = default)
|
||||
{
|
||||
BasePageEntity? page = null;
|
||||
BasePage? page = null;
|
||||
if (id != null)
|
||||
page = await _martenRepository.GetEntityAsync<BasePageEntity>(id.Value, cancellationToken);
|
||||
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(id.Value, cancellationToken);
|
||||
else if (pageSlug != null)
|
||||
page = await _martenRepository.GetEntityAsync<BasePageEntity>(entity => entity.Slug == pageSlug, cancellationToken);
|
||||
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Slug == pageSlug, cancellationToken);
|
||||
else if (pageName != null)
|
||||
page = await _martenRepository.GetEntityAsync<BasePageEntity>(entity => entity.Name == pageName, cancellationToken);
|
||||
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Name == pageName, cancellationToken);
|
||||
else if (type != null)
|
||||
page = await _martenRepository.GetEntityAsync<BasePageEntity>(entity => entity.Type == type, cancellationToken);
|
||||
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Type == type, cancellationToken);
|
||||
if (page == null)
|
||||
throw new AppException("Page not found", ApiResultStatusCode.NotFound);
|
||||
|
||||
var entityType = Assembly.GetAssembly(typeof(DomainConfig))?.GetType(page.Type);
|
||||
var dto = new BasePageEntitySDto
|
||||
var dto = new BasePageSDto
|
||||
{
|
||||
Content = page.Content,
|
||||
Description = page.Description,
|
||||
|
@ -45,15 +44,15 @@ public class PageService : IPageService
|
|||
return dto;
|
||||
}
|
||||
|
||||
public async Task<List<BasePageEntitySDto>> GetPagesAsync(CancellationToken cancellationToken = default)
|
||||
public async Task<List<BasePageSDto>> GetPagesAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
List<BasePageEntitySDto> sDtos = new List<BasePageEntitySDto>();
|
||||
var pages = await _martenRepository.GetEntitiesAsync<BasePageEntity>(cancellationToken);
|
||||
List<BasePageSDto> sDtos = new List<BasePageSDto>();
|
||||
var pages = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntitiesAsync(cancellationToken);
|
||||
foreach (var page in pages)
|
||||
{
|
||||
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType(page.Type);
|
||||
var dto = new BasePageEntitySDto
|
||||
var dto = new BasePageSDto
|
||||
{
|
||||
Content = page.Content,
|
||||
Description = page.Description,
|
||||
|
@ -71,7 +70,7 @@ public class PageService : IPageService
|
|||
|
||||
public async Task<bool> CreatePageAsync(PageActionRequestDto entity, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var basePage = new BasePageEntity
|
||||
var basePage = new BasePage
|
||||
{
|
||||
Content = entity.Content,
|
||||
Description = entity.Description,
|
||||
|
@ -84,7 +83,7 @@ public class PageService : IPageService
|
|||
};
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType(entity.Type);
|
||||
basePage.Data = JsonConvert.SerializeObject(((JsonElement)entity.Data).Deserialize(type));
|
||||
await _martenRepository.AddOrUpdateEntityAsync(basePage, cancellationToken);
|
||||
await _martenRepositoryWrapper.SetRepository<BasePage>().AddOrUpdateEntityAsync(basePage, cancellationToken);
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
namespace NetinaShop.Core.CoreServices;
|
||||
|
||||
|
||||
public class SettingService : ISettingService
|
||||
{
|
||||
private readonly IMartenRepositoryWrapper _martenRepositoryWrapper;
|
||||
|
||||
public SettingService(IMartenRepositoryWrapper martenRepositoryWrapper)
|
||||
{
|
||||
_martenRepositoryWrapper = martenRepositoryWrapper;
|
||||
}
|
||||
|
||||
public async Task<object> GetSettingAsync(string settingName, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"NetinaShop.Domain.MartenEntities.Settings.{settingName}");
|
||||
if (type == null)
|
||||
throw new AppException("Setting not found", ApiResultStatusCode.NotFound);
|
||||
|
||||
var baseSetting = await _martenRepositoryWrapper.SetRepository<BaseSetting>()
|
||||
.GetEntityAsync(s => s.Name == settingName, cancellationToken);
|
||||
object? setting;
|
||||
if (baseSetting == null)
|
||||
setting = Activator.CreateInstance(type);
|
||||
else
|
||||
setting = JsonConvert.DeserializeObject(baseSetting.JsonData, type) ?? Activator.CreateInstance(type);
|
||||
|
||||
if (setting == null)
|
||||
throw new AppException("Setting type or base is wrong");
|
||||
|
||||
return setting;
|
||||
}
|
||||
|
||||
public async Task CreateOrUpdateSettingAsync(string settingName, JsonDocument settingObj, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType($"NetinaShop.Domain.MartenEntities.Settings.{settingName}");
|
||||
if (type == null)
|
||||
throw new AppException("Setting not found", ApiResultStatusCode.NotFound);
|
||||
|
||||
var baseSetting = await _martenRepositoryWrapper.SetRepository<BaseSetting>()
|
||||
.GetEntityAsync(s => s.Name == settingName, cancellationToken);
|
||||
|
||||
if (baseSetting == null)
|
||||
{
|
||||
baseSetting = new BaseSetting
|
||||
{
|
||||
JsonData = JsonConvert.SerializeObject(settingObj.Deserialize(type)),
|
||||
Name = settingName,
|
||||
DotnetType = type.FullName ?? $"NetinaShop.Domain.MartenEntities.Settings.{settingName}"
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
baseSetting.JsonData = JsonConvert.SerializeObject(settingObj.Deserialize(type));
|
||||
}
|
||||
|
||||
await _martenRepositoryWrapper.SetRepository<BaseSetting>()
|
||||
.AddOrUpdateEntityAsync(baseSetting, cancellationToken);
|
||||
}
|
||||
}
|
|
@ -10,11 +10,11 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
||||
<PackageReference Include="AspNetCoreRateLimit.Redis" Version="2.0.0" />
|
||||
<PackageReference Include="Autofac.Extras.Quartz" Version="9.0.0" />
|
||||
<PackageReference Include="Autofac.Extras.Quartz" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.2" />
|
||||
<PackageReference Include="Quartz" Version="3.8.0" />
|
||||
<PackageReference Include="Syncfusion.Pdf.Net.Core" Version="24.2.8" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.3" />
|
||||
<PackageReference Include="Quartz" Version="3.8.1" />
|
||||
<PackageReference Include="Syncfusion.Pdf.Net.Core" Version="25.1.35" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
@ -48,6 +48,7 @@
|
|||
<Using Include="NetinaShop.Core.BaseServices.Abstracts" />
|
||||
<Using Include="NetinaShop.Core.CoreServices.Abstracts" />
|
||||
<Using Include="NetinaShop.Core.EntityServices.Abstracts" />
|
||||
<Using Include="NetinaShop.Domain" />
|
||||
<Using Include="NetinaShop.Domain.CommandQueries.Commands" />
|
||||
<Using Include="NetinaShop.Domain.CommandQueries.Queries" />
|
||||
<Using Include="NetinaShop.Domain.Dtos.DashboardDtos" />
|
||||
|
@ -60,14 +61,18 @@
|
|||
<Using Include="NetinaShop.Domain.Entities.Users" />
|
||||
<Using Include="NetinaShop.Domain.Enums" />
|
||||
<Using Include="NetinaShop.Domain.Mappers" />
|
||||
<Using Include="NetinaShop.Domain.MartenEntities.Settings" />
|
||||
<Using Include="NetinaShop.Domain.Models.Claims" />
|
||||
<Using Include="NetinaShop.Domain.Models.Settings" />
|
||||
<Using Include="NetinaShop.Repository.Abstracts" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Base.Contracts" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Marten" />
|
||||
<Using Include="Newtonsoft.Json" />
|
||||
<Using Include="System.IdentityModel.Tokens.Jwt" />
|
||||
<Using Include="System.Reflection" />
|
||||
<Using Include="System.Security.Claims" />
|
||||
<Using Include="System.Text" />
|
||||
<Using Include="System.Text.Json" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
using NetinaShop.Domain.Entities.Pages;
|
||||
using NetinaShop.Domain.MartenEntities.Pages;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace NetinaShop.Domain.Dtos.SmallDtos;
|
||||
|
||||
public class BasePageEntitySDto : BaseDto<BasePageEntitySDto,BasePageEntity>
|
||||
public class BasePageSDto : BaseDto<BasePageSDto,BasePage>
|
||||
{
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
|
@ -1,10 +1,7 @@
|
|||
using System.Text.Json;
|
||||
namespace NetinaShop.Domain.MartenEntities.Pages;
|
||||
|
||||
namespace NetinaShop.Domain.Entities.Pages;
|
||||
|
||||
public class BasePageEntity
|
||||
public class BasePage : MartenEntity
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string Content { get; set; } = string.Empty;
|
|
@ -1,5 +1,5 @@
|
|||
namespace NetinaShop.Domain.Entities.Pages;
|
||||
|
||||
namespace NetinaShop.Domain.MartenEntities.Pages;
|
||||
|
||||
[PageClassDisplay("FAQPage", "صفحه سوالات متداول")]
|
||||
public class FAQPage
|
||||
{
|
|
@ -0,0 +1,8 @@
|
|||
namespace NetinaShop.Domain.MartenEntities.Settings;
|
||||
|
||||
public class BaseSetting : MartenEntity
|
||||
{
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string JsonData { get; set; } = string.Empty;
|
||||
public string DotnetType { get; set; } = string.Empty;
|
||||
}
|
|
@ -1,8 +1,7 @@
|
|||
namespace NetinaShop.Domain.Entities.Settings;
|
||||
namespace NetinaShop.Domain.MartenEntities.Settings;
|
||||
|
||||
public class PaymentSetting
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string ZarinPalApiKey { get; set; } = string.Empty;
|
||||
public string PayPalApiKey { get; set; } = string.Empty;
|
||||
public string BehPardakhtApiKey { get; set; } = string.Empty;
|
|
@ -0,0 +1,12 @@
|
|||
namespace NetinaShop.Domain.MartenEntities.Settings;
|
||||
|
||||
public class ShopSetting
|
||||
{
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string Slogan { get; set; } = string.Empty;
|
||||
public double LocationLat { get; set; }
|
||||
public double LocationLon { get; set; }
|
||||
public string Address { get; set; } = string.Empty;
|
||||
public string SupportPhoneNumber { get; set; } = string.Empty;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<!--<PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
@ -12,11 +12,11 @@
|
|||
<PackageReference Include="Mapster" Version="7.4.0" />
|
||||
<PackageReference Include="Mapster.Core" Version="1.2.1" />
|
||||
<PackageReference Include="MediatR" Version="12.2.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="8.0.3" />
|
||||
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0" />
|
||||
</ItemGroup>-->
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<!--<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<LangVersion>10</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
|
@ -32,7 +32,7 @@
|
|||
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.0" />
|
||||
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0" />
|
||||
</ItemGroup>
|
||||
</ItemGroup>-->
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
using Marten;
|
||||
|
||||
namespace NetinaShop.Infrastructure.Marten;
|
||||
|
||||
public class MartenRepository<TMartenEntity> : IMartenRepository<TMartenEntity> where TMartenEntity : IMartenEntity
|
||||
{
|
||||
private readonly IDocumentStore _documentStore;
|
||||
|
||||
public MartenRepository(IDocumentStore documentStore)
|
||||
{
|
||||
_documentStore = documentStore;
|
||||
}
|
||||
|
||||
public async Task<List<TMartenEntity>> GetEntitiesAsync(CancellationToken cancellation)
|
||||
{
|
||||
await using var session = _documentStore.QuerySession();
|
||||
var entities = await session.Query<TMartenEntity>().ToListAsync(cancellation);
|
||||
return entities.ToList();
|
||||
}
|
||||
|
||||
public async Task<List<TMartenEntity>> GetEntitiesAsync(Expression<Func<TMartenEntity, bool>> expression, CancellationToken cancellation)
|
||||
{
|
||||
await using var session = _documentStore.QuerySession();
|
||||
var entities = await session.Query<TMartenEntity>().Where(expression).ToListAsync(cancellation);
|
||||
return entities.ToList();
|
||||
}
|
||||
|
||||
public async Task<TMartenEntity> GetEntityAsync(Guid id, CancellationToken cancellation)
|
||||
{
|
||||
await using var session = _documentStore.QuerySession();
|
||||
var setting = await session.LoadAsync<TMartenEntity>(id, cancellation);
|
||||
if (setting == null)
|
||||
throw new AppException($"{nameof(setting)} not found", ApiResultStatusCode.NotFound);
|
||||
return setting;
|
||||
}
|
||||
|
||||
public async Task<TMartenEntity?> GetEntityAsync(Expression<Func<TMartenEntity, bool>> expression, CancellationToken cancellation)
|
||||
{
|
||||
await using var session = _documentStore.QuerySession();
|
||||
var entity = await session.Query<TMartenEntity>().FirstOrDefaultAsync(expression, cancellation);
|
||||
return entity;
|
||||
}
|
||||
|
||||
public async Task AddOrUpdateEntityAsync(TMartenEntity setting, CancellationToken cancellation)
|
||||
{
|
||||
if (setting == null)
|
||||
throw new AppException($"{nameof(setting)} is null", ApiResultStatusCode.BadRequest);
|
||||
|
||||
await using var session = _documentStore.LightweightSession();
|
||||
session.Store(setting);
|
||||
await session.SaveChangesAsync(cancellation);
|
||||
}
|
||||
|
||||
public Task RemoveEntityAsync(CancellationToken cancellation)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using Marten;
|
||||
|
||||
namespace NetinaShop.Infrastructure.Marten;
|
||||
|
||||
public class MartenRepositoryWrapper : IMartenRepositoryWrapper
|
||||
{
|
||||
private readonly IDocumentStore _documentStore;
|
||||
|
||||
public MartenRepositoryWrapper(IDocumentStore documentStore)
|
||||
{
|
||||
_documentStore = documentStore;
|
||||
}
|
||||
|
||||
public IMartenRepository<TMartenEntity> SetRepository<TMartenEntity>() where TMartenEntity : IMartenEntity
|
||||
=> new MartenRepository<TMartenEntity>(_documentStore);
|
||||
}
|
|
@ -8,7 +8,8 @@
|
|||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AWSSDK.S3" Version="3.7.305.22" />
|
||||
<PackageReference Include="Marten" Version="7.4.0" />
|
||||
<PackageReference Include="AWSSDK.S3" Version="3.7.307.2" />
|
||||
<PackageReference Include="Refit" Version="7.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@ -27,12 +28,15 @@
|
|||
<Using Include="NetinaShop.Common.Extensions" />
|
||||
<Using Include="NetinaShop.Common.Models" />
|
||||
<Using Include="NetinaShop.Common.Models.Api" />
|
||||
<Using Include="NetinaShop.Common.Models.Entity" />
|
||||
<Using Include="NetinaShop.Common.Models.Exception" />
|
||||
<Using Include="NetinaShop.Core.Abstracts" />
|
||||
<Using Include="NetinaShop.Domain.Models.Settings" />
|
||||
<Using Include="NetinaShop.Infrastructure.Models.RestApi.KaveNegar" />
|
||||
<Using Include="NetinaShop.Infrastructure.RestServices" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Marten" />
|
||||
<Using Include="Refit" />
|
||||
<Using Include="System.Linq.Expressions" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ using NetinaShop.Domain.Dtos.ScraperDtos.Response;
|
|||
using NetinaShop.Domain.Dtos.SmallDtos;
|
||||
using NetinaShop.Domain.Entities.Products;
|
||||
using NetinaShop.Repository.Repositories.Base.Contracts;
|
||||
using System.Linq;
|
||||
using MediatR;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
|
|
@ -23,7 +23,7 @@ public class ZarinpalService : IPaymentService
|
|||
{
|
||||
description = $"پرداخت {amount.ToString("N0")} ریال توسط {fullName} با شماره تماس {phoneNumber} برای سفارش با شماره {factorNumber}",
|
||||
amount = (int)amount,
|
||||
callback_url = Path.Combine("https://api.vesmook.com", "api", "accounting", "pay", "verify"),
|
||||
callback_url = Path.Combine(_siteSettings.BaseUrl, "api", "accounting", "pay", "verify"),
|
||||
merchant_id = "4292b845-b510-4d1d-8ee2-097499b198e5",
|
||||
metadata = new ZarinaplPaymentLinkRequestMetadata { mobile = phoneNumber }
|
||||
};
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
x
|
||||
<PackageReference Include="Marten" Version="7.4.0" /> <ItemGroup>
|
||||
|
||||
<PackageReference Include="MediatR" Version="12.2.0" />
|
||||
<PackageReference Include="FluentValidation" Version="11.9.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Pluralize.NET" Version="1.0.2" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.3" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.7.33" />
|
||||
<PackageReference Include="StackExchange.Redis.Extensions.Core" Version="10.2.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Models\" />
|
||||
<Folder Include="Extensions\" />
|
||||
<Folder Include="Repositories\Marten\Abstracts\" />
|
||||
<Folder Include="Services\Abstracts\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\NetinaShop.Domain\NetinaShop.Domain.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Mapster" />
|
||||
<Using Include="MediatR" />
|
||||
<Using Include="Microsoft.AspNetCore.Builder" />
|
||||
<Using Include="Microsoft.AspNetCore.Identity" />
|
||||
<Using Include="Microsoft.Extensions.DependencyInjection" />
|
||||
<Using Include="Microsoft.Extensions.Logging" />
|
||||
<Using Include="Microsoft.Extensions.Options" />
|
||||
<Using Include="NetinaShop.Common.Extensions" />
|
||||
<Using Include="NetinaShop.Common.Models" />
|
||||
<Using Include="NetinaShop.Common.Models.Api" />
|
||||
<Using Include="NetinaShop.Common.Models.Entity" />
|
||||
<Using Include="NetinaShop.Common.Models.Exception" />
|
||||
<Using Include="NetinaShop.Domain.CommandQueries.Commands" />
|
||||
<Using Include="NetinaShop.Domain.CommandQueries.Queries" />
|
||||
<Using Include="NetinaShop.Domain.Dtos.LargDtos" />
|
||||
<Using Include="NetinaShop.Domain.Dtos.ResponseDtos" />
|
||||
<Using Include="NetinaShop.Domain.Dtos.SmallDtos" />
|
||||
<Using Include="NetinaShop.Domain.Entities.Discounts" />
|
||||
<Using Include="NetinaShop.Domain.Entities.ProductCategories" />
|
||||
<Using Include="NetinaShop.Domain.Entities.Products" />
|
||||
<Using Include="NetinaShop.Domain.Entities.Users" />
|
||||
<Using Include="NetinaShop.Domain.Enums" />
|
||||
<Using Include="NetinaShop.Domain.Mappers" />
|
||||
<Using Include="NetinaShop.Domain.Models.Claims" />
|
||||
<Using Include="NetinaShop.Domain.Models.Settings" />
|
||||
<Using Include="NetinaShop.Repository.Abstracts" />
|
||||
<Using Include="NetinaShop.Repository.Extensions" />
|
||||
<Using Include="NetinaShop.Repository.Models" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Base" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Base.Contracts" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Entity.Abstracts" />
|
||||
<Using Include="NetinaShop.Repository.Services.Abstracts" />
|
||||
<Using Include="Pluralize.NET" />
|
||||
<Using Include="System.Diagnostics" />
|
||||
<Using Include="System.Reflection" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -8,23 +8,22 @@
|
|||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Marten" Version="7.0.0-beta.5" />
|
||||
<PackageReference Include="MediatR" Version="12.2.0" />
|
||||
<PackageReference Include="FluentValidation" Version="11.9.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.1">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.1">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Pluralize.NET" Version="1.0.2" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.1" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.7.17" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.3" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.7.33" />
|
||||
<PackageReference Include="StackExchange.Redis.Extensions.Core" Version="10.2.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@ -70,7 +69,6 @@
|
|||
<Using Include="NetinaShop.Repository.Models" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Base" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Base.Contracts" />
|
||||
<Using Include="NetinaShop.Repository.Repositories.Entity.Abstracts" />
|
||||
<Using Include="NetinaShop.Repository.Services.Abstracts" />
|
||||
<Using Include="Pluralize.NET" />
|
||||
<Using Include="System.Diagnostics" />
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
using System.Linq.Expressions;
|
||||
|
||||
namespace NetinaShop.Repository.Repositories.Entity.Abstracts;
|
||||
|
||||
public interface IMartenRepository : IScopedDependency
|
||||
{
|
||||
Task<List<TSetting>> GetEntitiesAsync<TSetting>(CancellationToken cancellation) where TSetting : notnull;
|
||||
Task<List<TSetting>> GetEntitiesAsync<TSetting>(Expression<Func<TSetting,bool>> expression,CancellationToken cancellation) where TSetting : notnull;
|
||||
|
||||
Task<TSetting> GetEntityAsync<TSetting>(Guid id,CancellationToken cancellation) where TSetting : notnull;
|
||||
Task<TSetting> GetEntityAsync<TSetting>(Expression<Func<TSetting, bool>> expression, CancellationToken cancellation) where TSetting : notnull;
|
||||
|
||||
Task AddOrUpdateEntityAsync<TSetting>(TSetting setting, CancellationToken cancellation) where TSetting : notnull;
|
||||
Task RemoveEntityAsync<TSetting>(CancellationToken cancellation);
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
using System.Linq.Expressions;
|
||||
using Marten;
|
||||
|
||||
namespace NetinaShop.Repository.Repositories.Entity;
|
||||
|
||||
public class MartenRepository : IMartenRepository
|
||||
{
|
||||
private readonly IDocumentStore _documentStore;
|
||||
|
||||
public MartenRepository(IDocumentStore documentStore)
|
||||
{
|
||||
_documentStore = documentStore;
|
||||
}
|
||||
public async Task<List<TSetting>> GetEntitiesAsync<TSetting>(CancellationToken cancellation) where TSetting : notnull
|
||||
{
|
||||
await using var session = _documentStore.QuerySession();
|
||||
var entities = await session.Query<TSetting>().ToListAsync(cancellation);
|
||||
return entities.ToList();
|
||||
}
|
||||
|
||||
public async Task<List<TSetting>> GetEntitiesAsync<TSetting>(Expression<Func<TSetting, bool>> expression, CancellationToken cancellation) where TSetting : notnull
|
||||
{
|
||||
await using var session = _documentStore.QuerySession();
|
||||
var entities = await session.Query<TSetting>().Where(expression).ToListAsync(cancellation);
|
||||
return entities.ToList();
|
||||
}
|
||||
|
||||
public async Task<TSetting> GetEntityAsync<TSetting>(Guid id,CancellationToken cancellation) where TSetting : notnull
|
||||
{
|
||||
await using var session = _documentStore.QuerySession();
|
||||
var setting = await session.LoadAsync<TSetting>(id,cancellation);
|
||||
if (setting == null)
|
||||
throw new AppException($"{nameof(setting)} not found", ApiResultStatusCode.NotFound);
|
||||
return setting;
|
||||
}
|
||||
|
||||
public async Task<TSetting> GetEntityAsync<TSetting>(Expression<Func<TSetting, bool>> expression, CancellationToken cancellation) where TSetting : notnull
|
||||
{
|
||||
await using var session = _documentStore.QuerySession();
|
||||
var entity = await session.Query<TSetting>().FirstOrDefaultAsync(expression,cancellation);
|
||||
if (entity == null)
|
||||
throw new AppException($"{nameof(entity)} not found", ApiResultStatusCode.NotFound);
|
||||
return entity;
|
||||
}
|
||||
|
||||
public async Task AddOrUpdateEntityAsync<TSetting>(TSetting setting, CancellationToken cancellation) where TSetting : notnull
|
||||
{
|
||||
if (setting == null)
|
||||
throw new AppException($"{nameof(setting)} is null", ApiResultStatusCode.BadRequest);
|
||||
|
||||
await using var session = _documentStore.LightweightSession();
|
||||
session.Store(setting);
|
||||
await session.SaveChangesAsync(cancellation);
|
||||
}
|
||||
|
||||
public Task RemoveEntityAsync<TSetting>(CancellationToken cancellation)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
using System.Linq.Expressions;
|
||||
|
||||
namespace NetinaShop.Repository.Repositories.Marten;
|
||||
|
||||
public interface IMartenRepository<TMartenEntity> : IScopedDependency where TMartenEntity : IMartenEntity
|
||||
{
|
||||
Task<List<TMartenEntity>> GetEntitiesAsync(CancellationToken cancellation);
|
||||
Task<List<TMartenEntity>> GetEntitiesAsync(Expression<Func<TMartenEntity, bool>> expression, CancellationToken cancellation);
|
||||
|
||||
Task<TMartenEntity> GetEntityAsync(Guid id, CancellationToken cancellation);
|
||||
Task<TMartenEntity?> GetEntityAsync(Expression<Func<TMartenEntity, bool>> expression, CancellationToken cancellation);
|
||||
|
||||
Task AddOrUpdateEntityAsync(TMartenEntity setting, CancellationToken cancellation);
|
||||
Task RemoveEntityAsync(CancellationToken cancellation);
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
namespace NetinaShop.Repository.Repositories.Marten;
|
||||
|
||||
public interface IMartenRepositoryWrapper : IScopedDependency
|
||||
{
|
||||
IMartenRepository<TMartenEntity> SetRepository<TMartenEntity>() where TMartenEntity : IMartenEntity;
|
||||
}
|
Loading…
Reference in New Issue