Add sample in mongo and sql layers

This commit is contained in:
Sergio Matias Urquin
2025-05-18 14:38:54 -06:00
parent ca35645488
commit 10f2083590
18 changed files with 248 additions and 250 deletions

View File

@@ -7,7 +7,7 @@ namespace Core.Blueprint.DAL.SQLServer.Context
public sealed class SqlServerContext : DbContext
{
public SqlServerContext(DbContextOptions<SqlServerContext> options) : base(options) { }
public DbSet<UserProject> UserProjects { get; set; }
public DbSet<Sample> UserProjects { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{

View File

@@ -0,0 +1,19 @@
using Core.Blueprint.DAL.SQLServer.Entities;
using Core.Blueprint.DAL.SQLServer.Entities.Request;
namespace Core.Blueprint.DAL.SQLServer.Contracts
{
public interface ISqlSampleService
{
Task<IEnumerable<Sample>> GetAllSamples();
Task<Sample?> GetSampleById(int id);
Task<Sample> AddSample(SampleRequest newSample);
Task<Sample?> UpdateSample(Sample sample);
Task<Sample?> DeleteSample(int id);
}
}

View File

@@ -1,19 +0,0 @@
using Core.Blueprint.DAL.SQLServer.Entities;
using Core.Blueprint.DAL.SQLServer.Entities.Request;
namespace Core.Blueprint.DAL.SQLServer.Contracts
{
public interface IUserProjectService
{
Task<IEnumerable<UserProject>> GetAllUserProjects();
Task<UserProject?> GetUserProjectById(int id);
Task<UserProject> AddUserProject(UserProjectRequest newUserProject);
Task<UserProject?> UpdateUserProject(UserProject userProject);
Task<UserProject?> DeleteUserProject(int id);
}
}

View File

@@ -0,0 +1,8 @@
namespace Core.Blueprint.DAL.SQLServer.Entities.Request
{
public class SampleRequest
{
public string Name { get; set; } = null!;
public string Description { get; set; } = null!;
}
}

View File

@@ -1,9 +0,0 @@
namespace Core.Blueprint.DAL.SQLServer.Entities.Request
{
public class UserProjectRequest
{
public string ProjectCode { get; set; } = null!;
public string ProjectDescription { get; set; } = null!;
public string UserId { get; set; } = null!;
}
}

View File

@@ -0,0 +1,12 @@
using Core.Blueprint.SQLServer.Entities;
using System.ComponentModel.DataAnnotations.Schema;
namespace Core.Blueprint.DAL.SQLServer.Entities
{
[Table("Samples")]
public class Sample : BaseSQLAdapter
{
public string Name { get; set; } = null!;
public string Description { get; set; } = null!;
}
}

View File

@@ -1,13 +0,0 @@
using Core.Blueprint.SQLServer.Entities;
using System.ComponentModel.DataAnnotations.Schema;
namespace Core.Blueprint.DAL.SQLServer.Entities
{
[Table("UserProjects")]
public class UserProject : BaseSQLAdapter
{
public string ProjectCode { get; set; } = null!;
public string ProjectDescription { get; set; } = null!;
public string UserId { get; set; } = null!;
}
}

View File

@@ -0,0 +1,82 @@
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 SqlSampleService : ISqlSampleService
{
private readonly IEntityRepository<Sample, SqlServerContext> _sqlSampleRepository;
private readonly CacheSettings cacheSettings;
private readonly IRedisCacheProvider cacheProvider;
public SqlSampleService(IEntityRepository<Sample, SqlServerContext> sqlSampleRepository, IRedisCacheProvider cacheProvider, IOptions<CacheSettings> cacheSettings)
{
_sqlSampleRepository = sqlSampleRepository;
this.cacheSettings = cacheSettings.Value;
this.cacheProvider = cacheProvider;
}
public async Task<IEnumerable<Sample>> GetAllSamples()
{
var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetAllSamples");
var cachedData = await cacheProvider.GetAsync<IEnumerable<Sample>>(cacheKey) ?? [];
if (cachedData.Any()) return cachedData;
var samples = await _sqlSampleRepository.GetAllAsync();
await cacheProvider.SetAsync(cacheKey, samples);
return samples;
}
public async Task<Sample?> GetSampleById(int id)
{
var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetSampleById", id);
var cachedData = await cacheProvider.GetAsync<Sample>(cacheKey);
if (cachedData is not null) { return cachedData; }
var sample = await _sqlSampleRepository.GetByIdAsync(id);
await cacheProvider.SetAsync(cacheKey, sample);
return sample;
}
public async Task<Sample> AddSample(SampleRequest newSample)
{
var sample = newSample.Adapt<Sample>();
await _sqlSampleRepository.AddAsync(sample);
await _sqlSampleRepository.SaveAsync();
return sample;
}
public async Task<Sample?> UpdateSample(Sample sample)
{
var existingEntity = await _sqlSampleRepository.GetByIdAsync(sample.Id);
if (existingEntity is null) return existingEntity;
_sqlSampleRepository.Update(sample);
await _sqlSampleRepository.SaveAsync();
return sample;
}
public async Task<Sample?> DeleteSample(int id)
{
var sample = await _sqlSampleRepository.GetByIdAsync(id);
if (sample == null)
return null;
_sqlSampleRepository.Delete(sample);
await _sqlSampleRepository.SaveAsync();
return sample;
}
}

View File

@@ -1,82 +0,0 @@
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;
}
}