version 0.27.33.54 , fix blog update issue , fix sitemap , fix page creation
parent
5a38eda328
commit
c152f06e08
|
@ -82,6 +82,8 @@ public class BlogCategoryController : ICarterModule
|
||||||
if (dto.ParentId != default)
|
if (dto.ParentId != default)
|
||||||
ent.SetParent(dto.ParentId);
|
ent.SetParent(dto.ParentId);
|
||||||
newEnt.Id = ent.Id;
|
newEnt.Id = ent.Id;
|
||||||
|
newEnt.CreatedAt = ent.CreatedAt;
|
||||||
|
newEnt.CreatedBy = ent.CreatedBy;
|
||||||
repositoryWrapper.SetRepository<BlogCategory>().Update(newEnt);
|
repositoryWrapper.SetRepository<BlogCategory>().Update(newEnt);
|
||||||
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
return TypedResults.Ok();
|
return TypedResults.Ok();
|
||||||
|
|
|
@ -74,6 +74,8 @@ public class BlogController : ICarterModule
|
||||||
throw new AppException("Blog not found");
|
throw new AppException("Blog not found");
|
||||||
var newEnt = Blog.Create(dto.Title, dto.Content, dto.Tags, dto.ReadingTime, dto.Summery, dto.IsSuggested, dto.CategoryId);
|
var newEnt = Blog.Create(dto.Title, dto.Content, dto.Tags, dto.ReadingTime, dto.Summery, dto.IsSuggested, dto.CategoryId);
|
||||||
newEnt.Id = ent.Id;
|
newEnt.Id = ent.Id;
|
||||||
|
newEnt.CreatedAt = ent.CreatedAt;
|
||||||
|
newEnt.CreatedBy = ent.CreatedBy;
|
||||||
repositoryWrapper.SetRepository<Blog>().Update(newEnt);
|
repositoryWrapper.SetRepository<Blog>().Update(newEnt);
|
||||||
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
return TypedResults.Ok();
|
return TypedResults.Ok();
|
||||||
|
|
|
@ -31,8 +31,19 @@ public class PageController : ICarterModule
|
||||||
.WithDisplayName("Post Page")
|
.WithDisplayName("Post Page")
|
||||||
.HasApiVersion(1.0)
|
.HasApiVersion(1.0)
|
||||||
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManagePages));
|
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManagePages));
|
||||||
|
|
||||||
|
|
||||||
|
group.MapDelete("{id}", DeletePageByIdAsync)
|
||||||
|
.WithDisplayName("Delete Page")
|
||||||
|
.HasApiVersion(1.0)
|
||||||
|
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ViewPages, ApplicationPermission.ManagePages));
|
||||||
|
|
||||||
}
|
}
|
||||||
public async Task<IResult> GetPagesAsync(Guid id, [FromServices] IPageService pageService, CancellationToken cancellationToken)
|
|
||||||
|
private async Task<IResult> DeletePageByIdAsync([FromRoute]Guid id,[FromServices]IPageService pageService,CancellationToken cancellationToken)
|
||||||
|
=> TypedResults.Ok(await pageService.DeletePageAsync(id, cancellationToken));
|
||||||
|
|
||||||
|
public async Task<IResult> GetPagesAsync([FromServices] IPageService pageService, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return TypedResults.Ok(await pageService.GetPagesAsync(cancellationToken));
|
return TypedResults.Ok(await pageService.GetPagesAsync(cancellationToken));
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<InvariantGlobalization>true</InvariantGlobalization>
|
<InvariantGlobalization>true</InvariantGlobalization>
|
||||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||||
<AssemblyVersion>0.27.31.52</AssemblyVersion>
|
<AssemblyVersion>0.27.33.54</AssemblyVersion>
|
||||||
<FileVersion>0.27.31.52</FileVersion>
|
<FileVersion>0.27.33.54</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -8,7 +8,7 @@ string env = builder.Environment.IsDevelopment() == true ? "Development" : "Prod
|
||||||
builder.Host.UseContentRoot(Directory.GetCurrentDirectory());
|
builder.Host.UseContentRoot(Directory.GetCurrentDirectory());
|
||||||
if (builder.Environment.IsDevelopment())
|
if (builder.Environment.IsDevelopment())
|
||||||
{
|
{
|
||||||
string projectName = "Hamyan";
|
string projectName = "Vesmeh";
|
||||||
builder.Configuration.AddJsonFile($"AppSettings/appsettings.json").AddJsonFile($"AppSettings/appsettings.{env}{projectName}.json");
|
builder.Configuration.AddJsonFile($"AppSettings/appsettings.json").AddJsonFile($"AppSettings/appsettings.{env}{projectName}.json");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,12 +12,17 @@ public class SiteMapService : ISiteMapService
|
||||||
{
|
{
|
||||||
private readonly IUploadFileService _uploadFileService;
|
private readonly IUploadFileService _uploadFileService;
|
||||||
private readonly IRepositoryWrapper _repositoryWrapper;
|
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||||
|
private readonly IPageService _pageService;
|
||||||
private readonly SiteSettings _siteSetting;
|
private readonly SiteSettings _siteSetting;
|
||||||
|
|
||||||
public SiteMapService(IOptionsSnapshot<SiteSettings> snapshot, IUploadFileService uploadFileService, IRepositoryWrapper repositoryWrapper)
|
public SiteMapService(IOptionsSnapshot<SiteSettings> snapshot,
|
||||||
|
IUploadFileService uploadFileService,
|
||||||
|
IRepositoryWrapper repositoryWrapper,
|
||||||
|
IPageService pageService)
|
||||||
{
|
{
|
||||||
_uploadFileService = uploadFileService;
|
_uploadFileService = uploadFileService;
|
||||||
_repositoryWrapper = repositoryWrapper;
|
_repositoryWrapper = repositoryWrapper;
|
||||||
|
_pageService = pageService;
|
||||||
_siteSetting = snapshot.Value;
|
_siteSetting = snapshot.Value;
|
||||||
}
|
}
|
||||||
public async Task CreateSiteMapAsync()
|
public async Task CreateSiteMapAsync()
|
||||||
|
@ -106,10 +111,77 @@ public class SiteMapService : ISiteMapService
|
||||||
await CreateBlogsSiteMapsAsync();
|
await CreateBlogsSiteMapsAsync();
|
||||||
await CreateBrandsSiteMapsAsync();
|
await CreateBrandsSiteMapsAsync();
|
||||||
await CreateBlogCategoriesSiteMapsAsync();
|
await CreateBlogCategoriesSiteMapsAsync();
|
||||||
|
await CreatePagesSiteMapsAsync();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task CreatePagesSiteMapsAsync()
|
||||||
|
{
|
||||||
|
var siteMapsUId = SiteMapUIds.Pages;
|
||||||
|
|
||||||
|
var pages = await _pageService.GetPagesAsync();
|
||||||
|
|
||||||
|
XmlDocument doc = new XmlDocument();
|
||||||
|
XmlDeclaration documentType = doc.CreateXmlDeclaration("1.0", "utf-8", null);
|
||||||
|
doc.AppendChild(documentType);
|
||||||
|
|
||||||
|
//XmlNode declaration = doc.CreateNode(XmlNodeType.XmlDeclaration, "sitemap.xml", null);
|
||||||
|
//doc.AppendChild(declaration);
|
||||||
|
|
||||||
|
XmlElement root = doc.CreateElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
|
||||||
|
root.SetAttribute("xmlns:image", "http://www.google.com/schemas/sitemap-image/1.1");
|
||||||
|
doc.AppendChild(root);
|
||||||
|
|
||||||
|
foreach (var page in pages)
|
||||||
|
{
|
||||||
|
var productUrl = $"{_siteSetting.WebSiteUrl}/{page.Slug}";
|
||||||
|
XmlElement urlElement = doc.CreateElement("url", doc.DocumentElement?.NamespaceURI);
|
||||||
|
root.AppendChild(urlElement);
|
||||||
|
|
||||||
|
XmlElement loc = doc.CreateElement("loc", doc.DocumentElement?.NamespaceURI);
|
||||||
|
loc.InnerText = Path.Combine(productUrl);
|
||||||
|
urlElement.AppendChild(loc);
|
||||||
|
|
||||||
|
XmlElement lastmod = doc.CreateElement("lastmod", doc.DocumentElement?.NamespaceURI);
|
||||||
|
lastmod.InnerText = page.ModifiedAt == DateTime.MinValue ? page.CreatedAt.ToString("yyyy-MM-dd") : page.ModifiedAt.ToString("yyyy-MM-dd");
|
||||||
|
urlElement.AppendChild(lastmod);
|
||||||
|
|
||||||
|
|
||||||
|
XmlElement changeFeq = doc.CreateElement("changefreq", doc.DocumentElement?.NamespaceURI);
|
||||||
|
changeFeq.InnerText = "weekly";
|
||||||
|
urlElement.AppendChild(changeFeq);
|
||||||
|
|
||||||
|
|
||||||
|
XmlElement priority = doc.CreateElement("priority", doc.DocumentElement?.NamespaceURI);
|
||||||
|
priority.InnerText = "0.8";
|
||||||
|
urlElement.AppendChild(priority);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
using var siteMapStream = new MemoryStream();
|
||||||
|
await using var siteMapWriter = new XmlTextWriter(siteMapStream, Encoding.UTF8);
|
||||||
|
doc.WriteTo(siteMapWriter);
|
||||||
|
siteMapWriter.Flush();
|
||||||
|
byte[] unZipBytes = siteMapStream.ToArray();
|
||||||
|
|
||||||
|
using (var compressedStream = new MemoryStream())
|
||||||
|
await using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
|
||||||
|
{
|
||||||
|
zipStream.Write(unZipBytes, 0, unZipBytes.Length);
|
||||||
|
zipStream.Close();
|
||||||
|
var siteMapArray = compressedStream.ToArray();
|
||||||
|
|
||||||
|
await _uploadFileService.UploadFileByteAsync(new FileUploadRequest
|
||||||
|
{
|
||||||
|
FileBytes = siteMapArray,
|
||||||
|
ContentType = "text/plain",
|
||||||
|
FileName = $"{siteMapsUId}.gz",
|
||||||
|
FileUploadType = FileUploadType.SiteMap,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async Task CreateBrandsSiteMapsAsync()
|
private async Task CreateBrandsSiteMapsAsync()
|
||||||
{
|
{
|
||||||
var siteMapsUId = SiteMapUIds.Brands;
|
var siteMapsUId = SiteMapUIds.Brands;
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
using Netina.Common.Models;
|
namespace Netina.Core.CoreServices.Abstracts;
|
||||||
using Netina.Domain.Dtos.RequestDtos;
|
|
||||||
using Netina.Domain.Dtos.SmallDtos;
|
|
||||||
|
|
||||||
namespace Netina.Core.CoreServices.Abstracts;
|
|
||||||
|
|
||||||
public interface IPageService : IScopedDependency
|
public interface IPageService : IScopedDependency
|
||||||
{
|
{
|
||||||
Task<BasePageSDto> GetPageAsync(Guid? id = null, string? pageName = null, string? pageSlug = null,string? type = null, 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<List<BasePageSDto>> GetPagesAsync(CancellationToken cancellationToken = default);
|
||||||
Task<bool> CreatePageAsync(PageActionRequestDto entity, CancellationToken cancellationToken = default);
|
Task<bool> CreatePageAsync(PageActionRequestDto entity, CancellationToken cancellationToken = default);
|
||||||
|
Task<bool> DeletePageAsync(Guid id,CancellationToken cancellationToken = default);
|
||||||
}
|
}
|
|
@ -1,21 +1,16 @@
|
||||||
using Netina.Common.Models.Api;
|
using Netina.Domain.MartenEntities.Pages;
|
||||||
using Netina.Common.Models.Exception;
|
|
||||||
using Netina.Core.CoreServices.Abstracts;
|
|
||||||
using Netina.Domain;
|
|
||||||
using Netina.Domain.Dtos.RequestDtos;
|
|
||||||
using Netina.Domain.Dtos.SmallDtos;
|
|
||||||
using Netina.Domain.MartenEntities.Pages;
|
|
||||||
using Netina.Repository.Repositories.Marten;
|
|
||||||
|
|
||||||
namespace Netina.Core.CoreServices;
|
namespace Netina.Core.CoreServices;
|
||||||
|
|
||||||
public class PageService : IPageService
|
public class PageService : IPageService
|
||||||
{
|
{
|
||||||
private readonly IMartenRepositoryWrapper _martenRepositoryWrapper;
|
private readonly IMartenRepositoryWrapper _martenRepositoryWrapper;
|
||||||
|
private readonly ICurrentUserService _currentUserService;
|
||||||
|
|
||||||
public PageService(IMartenRepositoryWrapper martenRepositoryWrapperWrapper)
|
public PageService(IMartenRepositoryWrapper martenRepositoryWrapperWrapper, ICurrentUserService currentUserService)
|
||||||
{
|
{
|
||||||
_martenRepositoryWrapper = martenRepositoryWrapperWrapper;
|
_martenRepositoryWrapper = martenRepositoryWrapperWrapper;
|
||||||
|
_currentUserService = currentUserService;
|
||||||
}
|
}
|
||||||
public async Task<BasePageSDto> 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)
|
||||||
{
|
{
|
||||||
|
@ -25,7 +20,7 @@ public class PageService : IPageService
|
||||||
else if (pageSlug != null)
|
else if (pageSlug != null)
|
||||||
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Slug == pageSlug, cancellationToken);
|
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Slug == pageSlug, cancellationToken);
|
||||||
else if (pageName != null)
|
else if (pageName != null)
|
||||||
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Name == pageName, cancellationToken);
|
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Title == pageName, cancellationToken);
|
||||||
else if (type != null)
|
else if (type != null)
|
||||||
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Type == type, cancellationToken);
|
page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(entity => entity.Type == type, cancellationToken);
|
||||||
if (page == null)
|
if (page == null)
|
||||||
|
@ -39,7 +34,7 @@ public class PageService : IPageService
|
||||||
Id = page.Id,
|
Id = page.Id,
|
||||||
IsCustomPage = page.IsCustomPage,
|
IsCustomPage = page.IsCustomPage,
|
||||||
IsHtmlBasePage = page.IsHtmlBasePage,
|
IsHtmlBasePage = page.IsHtmlBasePage,
|
||||||
Name = page.Name,
|
Title = page.Title,
|
||||||
Slug = page.Slug,
|
Slug = page.Slug,
|
||||||
Data = page.Data
|
Data = page.Data
|
||||||
};
|
};
|
||||||
|
@ -53,8 +48,6 @@ public class PageService : IPageService
|
||||||
var pages = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntitiesAsync(cancellationToken);
|
var pages = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntitiesAsync(cancellationToken);
|
||||||
foreach (var page in pages)
|
foreach (var page in pages)
|
||||||
{
|
{
|
||||||
|
|
||||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType(page.Type);
|
|
||||||
var dto = new BasePageSDto
|
var dto = new BasePageSDto
|
||||||
{
|
{
|
||||||
Content = page.Content,
|
Content = page.Content,
|
||||||
|
@ -62,9 +55,11 @@ public class PageService : IPageService
|
||||||
Id = page.Id,
|
Id = page.Id,
|
||||||
IsCustomPage = page.IsCustomPage,
|
IsCustomPage = page.IsCustomPage,
|
||||||
IsHtmlBasePage = page.IsHtmlBasePage,
|
IsHtmlBasePage = page.IsHtmlBasePage,
|
||||||
Name = page.Name,
|
Title = page.Title,
|
||||||
Slug = page.Slug,
|
Slug = page.Slug,
|
||||||
Data = page.Data
|
Data = page.Data,
|
||||||
|
CreatedAt = page.CreatedAt,
|
||||||
|
ModifiedAt = page.ModifiedAt
|
||||||
};
|
};
|
||||||
sDtos.Add(dto);
|
sDtos.Add(dto);
|
||||||
}
|
}
|
||||||
|
@ -77,16 +72,30 @@ public class PageService : IPageService
|
||||||
{
|
{
|
||||||
Content = entity.Content,
|
Content = entity.Content,
|
||||||
Description = entity.Description,
|
Description = entity.Description,
|
||||||
Id = entity.Id,
|
Id = Guid.NewGuid(),
|
||||||
IsCustomPage = entity.IsCustomPage,
|
IsCustomPage = entity.IsCustomPage,
|
||||||
IsHtmlBasePage = entity.IsHtmlBasePage,
|
IsHtmlBasePage = entity.IsHtmlBasePage,
|
||||||
Name = entity.Name,
|
Title = entity.Title,
|
||||||
Type = entity.Type,
|
Type = entity.Type,
|
||||||
Slug = entity.Slug,
|
Slug = entity.Slug,
|
||||||
|
CreatedAt = DateTime.Now,
|
||||||
|
CreatedBy = _currentUserService.UserName ?? string.Empty
|
||||||
};
|
};
|
||||||
|
if (!basePage.Type.IsNullOrEmpty())
|
||||||
|
{
|
||||||
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType(entity.Type);
|
var type = Assembly.GetAssembly(typeof(DomainConfig))?.GetType(entity.Type);
|
||||||
basePage.Data = JsonConvert.SerializeObject(((JsonElement)entity.Data).Deserialize(type));
|
basePage.Data = JsonConvert.SerializeObject(((JsonElement)entity.Data).Deserialize(type));
|
||||||
|
}
|
||||||
await _martenRepositoryWrapper.SetRepository<BasePage>().AddOrUpdateEntityAsync(basePage, cancellationToken);
|
await _martenRepositoryWrapper.SetRepository<BasePage>().AddOrUpdateEntityAsync(basePage, cancellationToken);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<bool> DeletePageAsync(Guid id, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
var page = await _martenRepositoryWrapper.SetRepository<BasePage>().GetEntityAsync(p => p.Id == id, cancellationToken);
|
||||||
|
if (page == null)
|
||||||
|
throw new AppException("Page not found", ApiResultStatusCode.NotFound);
|
||||||
|
await _martenRepositoryWrapper.SetRepository<BasePage>().RemoveEntityAsync(page,cancellationToken);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -5,12 +5,14 @@ public static class SiteMapUIds
|
||||||
public const string Brands = "662AF2DC6A2746FA88191F1F3DA94164";
|
public const string Brands = "662AF2DC6A2746FA88191F1F3DA94164";
|
||||||
public const string Blogs = "4C2F0C2A7A3E41268702D12FDDDB837F";
|
public const string Blogs = "4C2F0C2A7A3E41268702D12FDDDB837F";
|
||||||
public const string BlogCategories = "B5FF333DC4FF4BB4A309CE3AA32CE45A";
|
public const string BlogCategories = "B5FF333DC4FF4BB4A309CE3AA32CE45A";
|
||||||
|
public const string Pages = "B463B6C4CC53432C822D79934F528D3E";
|
||||||
|
|
||||||
public static List<string> AllSiteMapsUIds => new List<string>
|
public static List<string> AllSiteMapsUIds => new List<string>
|
||||||
{
|
{
|
||||||
BlogCategories,
|
BlogCategories,
|
||||||
Categories,
|
Categories,
|
||||||
Blogs,
|
Blogs,
|
||||||
Brands
|
Brands,
|
||||||
|
Pages
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
public class PageActionRequestDto
|
public class PageActionRequestDto
|
||||||
{
|
{
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Title { get; set; } = string.Empty;
|
||||||
public string Description { get; set; } = string.Empty;
|
public string Description { get; set; } = string.Empty;
|
||||||
public string Content { get; set; } = string.Empty;
|
public string Content { get; set; } = string.Empty;
|
||||||
public bool IsCustomPage { get; set; }
|
public bool IsCustomPage { get; set; }
|
||||||
|
|
|
@ -5,13 +5,14 @@ namespace Netina.Domain.Dtos.SmallDtos;
|
||||||
|
|
||||||
public class BasePageSDto : BaseDto<BasePageSDto,BasePage>
|
public class BasePageSDto : BaseDto<BasePageSDto,BasePage>
|
||||||
{
|
{
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Title { get; set; } = string.Empty;
|
||||||
public string Description { get; set; } = string.Empty;
|
public string Description { get; set; } = string.Empty;
|
||||||
public string Content { get; set; } = string.Empty;
|
public string Content { get; set; } = string.Empty;
|
||||||
public bool IsCustomPage { get; set; }
|
public bool IsCustomPage { get; set; }
|
||||||
public bool IsHtmlBasePage { get; set; }
|
public bool IsHtmlBasePage { get; set; }
|
||||||
public string Slug { get; set; } = string.Empty;
|
public string Slug { get; set; } = string.Empty;
|
||||||
public string Data { get; set; } = string.Empty;
|
public string Data { get; set; } = string.Empty;
|
||||||
|
public DateTime ModifiedAt { get; set; }
|
||||||
|
|
||||||
public T GetData<T>() => JsonConvert.DeserializeObject<T>(Data);
|
public T GetData<T>() => JsonConvert.DeserializeObject<T>(Data);
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
public class BasePage : MartenEntity
|
public class BasePage : MartenEntity
|
||||||
{
|
{
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Title { get; set; } = string.Empty;
|
||||||
public string Description { get; set; } = string.Empty;
|
public string Description { get; set; } = string.Empty;
|
||||||
public string Content { get; set; } = string.Empty;
|
public string Content { get; set; } = string.Empty;
|
||||||
public bool IsCustomPage { get; set; }
|
public bool IsCustomPage { get; set; }
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
using Marten;
|
using Marten;
|
||||||
using Netina.Common.Models.Api;
|
|
||||||
using Netina.Common.Models.Entity;
|
|
||||||
using Netina.Common.Models.Exception;
|
|
||||||
using Netina.Repository.Repositories.Marten;
|
|
||||||
|
|
||||||
namespace Netina.Infrastructure.Marten;
|
namespace Netina.Infrastructure.Marten;
|
||||||
|
|
||||||
|
@ -45,18 +41,22 @@ public class MartenRepository<TMartenEntity> : IMartenRepository<TMartenEntity>
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddOrUpdateEntityAsync(TMartenEntity setting, CancellationToken cancellation)
|
public async Task AddOrUpdateEntityAsync(TMartenEntity entity, CancellationToken cancellation)
|
||||||
{
|
{
|
||||||
if (setting == null)
|
if (entity == null)
|
||||||
throw new AppException($"{nameof(setting)} is null", ApiResultStatusCode.BadRequest);
|
throw new AppException($"{nameof(entity)} is null", ApiResultStatusCode.BadRequest);
|
||||||
|
|
||||||
await using var session = _documentStore.LightweightSession();
|
await using var session = _documentStore.LightweightSession();
|
||||||
session.Store(setting);
|
session.Store(entity);
|
||||||
await session.SaveChangesAsync(cancellation);
|
await session.SaveChangesAsync(cancellation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task RemoveEntityAsync(CancellationToken cancellation)
|
public async Task RemoveEntityAsync(TMartenEntity entity, CancellationToken cancellation)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (entity == null)
|
||||||
|
throw new AppException($"{nameof(entity)} is null", ApiResultStatusCode.BadRequest);
|
||||||
|
await using var session = _documentStore.LightweightSession();
|
||||||
|
session.Delete(entity);
|
||||||
|
await session.SaveChangesAsync(cancellation);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,12 +4,12 @@ namespace Netina.Repository.Repositories.Marten;
|
||||||
|
|
||||||
public interface IMartenRepository<TMartenEntity> : IScopedDependency where TMartenEntity : IMartenEntity
|
public interface IMartenRepository<TMartenEntity> : IScopedDependency where TMartenEntity : IMartenEntity
|
||||||
{
|
{
|
||||||
Task<List<TMartenEntity>> GetEntitiesAsync(CancellationToken cancellation);
|
Task<List<TMartenEntity>> GetEntitiesAsync(CancellationToken cancellation = default);
|
||||||
Task<List<TMartenEntity>> GetEntitiesAsync(Expression<Func<TMartenEntity, bool>> expression, CancellationToken cancellation);
|
Task<List<TMartenEntity>> GetEntitiesAsync(Expression<Func<TMartenEntity, bool>> expression, CancellationToken cancellation = default);
|
||||||
|
|
||||||
Task<TMartenEntity> GetEntityAsync(Guid id, CancellationToken cancellation);
|
Task<TMartenEntity> GetEntityAsync(Guid id, CancellationToken cancellation = default);
|
||||||
Task<TMartenEntity?> GetEntityAsync(Expression<Func<TMartenEntity, bool>> expression, CancellationToken cancellation);
|
Task<TMartenEntity?> GetEntityAsync(Expression<Func<TMartenEntity, bool>> expression, CancellationToken cancellation = default);
|
||||||
|
|
||||||
Task AddOrUpdateEntityAsync(TMartenEntity setting, CancellationToken cancellation);
|
Task AddOrUpdateEntityAsync(TMartenEntity entity, CancellationToken cancellation = default);
|
||||||
Task RemoveEntityAsync(CancellationToken cancellation);
|
Task RemoveEntityAsync(TMartenEntity entity, CancellationToken cancellation = default);
|
||||||
}
|
}
|
Loading…
Reference in New Issue