网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using System.Xml.Linq;
using Dpz.Core.Infrastructure.Entity;
using Microsoft.AspNetCore.DataProtection.Repositories;
using Microsoft.Extensions.DependencyInjection;

namespace Dpz.Core.Service;

public class XmlRepositoryService : IXmlRepository
{
    private readonly IServiceScopeFactory _factory;
    private readonly string _key;

    public XmlRepositoryService(IServiceScopeFactory factory, string key)
    {
        _factory = factory;
        _key = key;
    }

    private class DpzXmlRepository : IBaseEntity
    {
        public string Id { get; init; } = "";

        public List<string> XmlRepository { get; init; } = new();
    }

    public IReadOnlyCollection<XElement> GetAllElements()
    {
        using var scope = _factory.CreateScope();
        var repository = scope.ServiceProvider.GetRequiredService<IRepository<DpzXmlRepository>>();
        var xmlRepository = repository.Collection.Find(x => x.Id == _key).FirstOrDefault();
        return (xmlRepository?.XmlRepository.Select(XElement.Parse).ToList() ?? new List<XElement>()).AsReadOnly();
    }

    public void StoreElement(XElement element, string friendlyName)
    {
        using var scope = _factory.CreateScope();
        var repository = scope.ServiceProvider.GetRequiredService<IRepository<DpzXmlRepository>>();
        var xmlRepository = repository.Collection.Find(x => x.Id == _key).FirstOrDefault();
        if (xmlRepository is null)
        {
            repository.Collection.InsertOne(new()
            {
                Id = _key,
                XmlRepository = new()
                {
                    element.ToString(SaveOptions.DisableFormatting)
                }
            });
            return;
        }

        var list = xmlRepository.XmlRepository;
        list.Add(element.ToString(SaveOptions.DisableFormatting));
        var update = Builders<DpzXmlRepository>.Update.Set(x => x.XmlRepository, list);
        repository.Collection.UpdateOne(x => x.Id == _key, update);
    }
}
loading