Core.Blueprint.DAL/Core.Blueprint.DAL.SQLServer/Services/UserProjectService.cs
Sergio Matias Urquin 6358f5f199 Add project files.
2025-04-29 18:39:57 -06:00

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;
}
}