83 lines
2.8 KiB
C#
83 lines
2.8 KiB
C#
using Core.Blueprint.DAL.SQLServer;
|
|
using Core.Blueprint.DAL.SQLServer.Context;
|
|
using Core.Blueprint.DAL.SQLServer.Contracts;
|
|
using Core.Blueprint.DAL.SQLServer.Entities;
|
|
using Core.Blueprint.DAL.SQLServer.Entities.Request;
|
|
using Core.Blueprint.Redis;
|
|
using Core.Blueprint.Redis.Helpers;
|
|
using Mapster;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
public class UserProjectService : IUserProjectService
|
|
{
|
|
private readonly IEntityRepository<UserProject, SqlServerContext> _userProjectRepository;
|
|
private readonly CacheSettings cacheSettings;
|
|
private readonly IRedisCacheProvider cacheProvider;
|
|
|
|
public UserProjectService(IEntityRepository<UserProject, SqlServerContext> userProjectRepository, IRedisCacheProvider cacheProvider, IOptions<CacheSettings> cacheSettings)
|
|
{
|
|
_userProjectRepository = userProjectRepository;
|
|
this.cacheSettings = cacheSettings.Value;
|
|
this.cacheProvider = cacheProvider;
|
|
}
|
|
|
|
public async Task<IEnumerable<UserProject>> GetAllUserProjects()
|
|
{
|
|
var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetAllUserProjects");
|
|
var cachedData = await cacheProvider.GetAsync<IEnumerable<UserProject>>(cacheKey) ?? [];
|
|
|
|
if (cachedData.Any()) return cachedData;
|
|
|
|
var userProjects = await _userProjectRepository.GetAllAsync();
|
|
|
|
await cacheProvider.SetAsync(cacheKey, userProjects);
|
|
|
|
return userProjects;
|
|
}
|
|
|
|
public async Task<UserProject?> GetUserProjectById(int id)
|
|
{
|
|
var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetUserProjectById", id);
|
|
var cachedData = await cacheProvider.GetAsync<UserProject>(cacheKey);
|
|
|
|
if (cachedData is not null) { return cachedData; }
|
|
|
|
var userProject = await _userProjectRepository.GetByIdAsync(id);
|
|
|
|
await cacheProvider.SetAsync(cacheKey, userProject);
|
|
|
|
return userProject;
|
|
}
|
|
|
|
public async Task<UserProject> AddUserProject(UserProjectRequest newUserProject)
|
|
{
|
|
var userProject = newUserProject.Adapt<UserProject>();
|
|
|
|
await _userProjectRepository.AddAsync(userProject);
|
|
await _userProjectRepository.SaveAsync();
|
|
return userProject;
|
|
}
|
|
|
|
public async Task<UserProject?> UpdateUserProject(UserProject userProject)
|
|
{
|
|
var existingEntity = await _userProjectRepository.GetByIdAsync(userProject.Id);
|
|
|
|
if (existingEntity is null) return existingEntity;
|
|
|
|
_userProjectRepository.Update(userProject);
|
|
await _userProjectRepository.SaveAsync();
|
|
return userProject;
|
|
}
|
|
|
|
public async Task<UserProject?> DeleteUserProject(int id)
|
|
{
|
|
var userProject = await _userProjectRepository.GetByIdAsync(id);
|
|
if (userProject == null)
|
|
return null;
|
|
|
|
_userProjectRepository.Delete(userProject);
|
|
await _userProjectRepository.SaveAsync();
|
|
return userProject;
|
|
}
|
|
}
|