refactoring, improvements, fixes, etc...
This commit is contained in:
parent
242a4cddc0
commit
5cc7ff9529
|
|
@ -14,4 +14,8 @@
|
|||
<Folder Include="Extensions\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
using AyCode.Core.Interfaces;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace AyCode.Core.Extensions;
|
||||
|
||||
public static class SerializeObjectToJsonExtensions
|
||||
{
|
||||
private static string SerializeObjectToJson<T>(T source)
|
||||
{
|
||||
JsonSerializerSettings options = new()
|
||||
{
|
||||
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
|
||||
NullValueHandling = NullValueHandling.Ignore
|
||||
};
|
||||
|
||||
return JsonConvert.SerializeObject(source, options);
|
||||
}
|
||||
|
||||
public static string ToJson<T>(this T source) where T : class, IAcSerializableToJson => SerializeObjectToJson(source);
|
||||
public static string ToJson<T>(this IQueryable<T> source) where T : class, IAcSerializableToJson => SerializeObjectToJson(source);
|
||||
public static string ToJson<T>(this IEnumerable<T> source) where T : class, IAcSerializableToJson => SerializeObjectToJson(source);
|
||||
}
|
||||
|
|
@ -7,6 +7,8 @@ using AyCode.Core.Extensions;
|
|||
using AyCode.Core.Helpers;
|
||||
using AyCode.Database.DbContexts;
|
||||
using AyCode.Database.Extensions;
|
||||
using AyCode.Entities;
|
||||
using AyCode.Interfaces;
|
||||
using AyCode.Interfaces.Entities;
|
||||
using AyCode.Utils.Extensions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
|
@ -50,6 +52,18 @@ public abstract class AcDalBase<TDbContext> : IAcDalBase<TDbContext> where TDbCo
|
|||
ctx = null;
|
||||
}
|
||||
|
||||
public TModelDto? GetModelDtoById<TModelDto, TEntity>(Guid id) where TModelDto : class, IAcModelDtoBase where TEntity : class, IEntity
|
||||
=> Session(ctx => ctx.GetModelDtoById<TModelDto, TEntity>(id));
|
||||
|
||||
public Task<TModelDto?> GetModelDtoByIdAsync<TModelDto, TEntity>(Guid id) where TModelDto : class, IAcModelDtoBase where TEntity : class, IEntity
|
||||
=> SessionAsync(ctx => ctx.GetModelDtoById<TModelDto, TEntity>(id));
|
||||
|
||||
public List<TModelDto> GetAllModelDto<TModelDto, TEntity>() where TModelDto : class, IAcModelDtoBase where TEntity : class, IEntity
|
||||
=> Session(ctx => ctx.GetAllModelDto<TModelDto, TEntity>().ToList());
|
||||
public Task<List<TModelDto>> GetAllModelDtoAsync<TModelDto, TEntity>() where TModelDto : class, IAcModelDtoBase where TEntity : class, IEntity
|
||||
=> SessionAsync(ctx => ctx.GetAllModelDto<TModelDto, TEntity>().ToList());
|
||||
|
||||
|
||||
public Task<TResultType> SessionAsync<TResultType>(Func<TDbContext, TResultType> callback)
|
||||
=> this.SessionAsync<TDbContext, TResultType>(callback);
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,22 @@ namespace AyCode.Database.DataLayers.Users
|
|||
public TUser? GetUserByEmail(string? email, bool onlyConfirmed) => Session(x => x.GetUserByEmail(email, onlyConfirmed));
|
||||
public Task<TUser?> GetUserByEmailAsync(string? email, bool onlyConfirmed) => SessionAsync(x => x.GetUserByEmail(email, onlyConfirmed));
|
||||
|
||||
public TUserModelDto? GetUserModelDtoById<TUserModelDto>(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IAcUserModelDtoMinBase
|
||||
=> Session(ctx => ctx.GetUserModelDtoById<TUserModelDto, TUser>(userId, onlyConfirmed));
|
||||
public Task<TUserModelDto?> GetUserModelDtoByIdAsync<TUserModelDto>(Guid userId, bool onlyConfirmed) where TUserModelDto : class, IAcUserModelDtoMinBase
|
||||
=> SessionAsync(ctx => ctx.GetUserModelDtoById<TUserModelDto, TUser>(userId, onlyConfirmed));
|
||||
|
||||
public TUserModelDto? GetUserModelDtoByEmail<TUserModelDto>(string email, bool onlyConfirmed) where TUserModelDto : class, IAcUserModelDtoMinBase
|
||||
=> Session(ctx => ctx.GetUserModelDtoByEmail<TUserModelDto, TUser>(email, onlyConfirmed));
|
||||
public Task<TUserModelDto?> GetUserModelDtoByEmailAsync<TUserModelDto>(string email, bool onlyConfirmed) where TUserModelDto : class, IAcUserModelDtoMinBase
|
||||
=> SessionAsync(ctx => ctx.GetUserModelDtoByEmail<TUserModelDto, TUser>(email, onlyConfirmed));
|
||||
|
||||
public List<TUserModelDto> GetAllUserModelDto<TUserModelDto>() where TUserModelDto : class, IAcUserModelDtoMinBase
|
||||
=> GetAllModelDto<TUserModelDto, TUser>();
|
||||
public Task<List<TUserModelDto>> GetAllUserModelDtoAsync<TUserModelDto>() where TUserModelDto : class, IAcUserModelDtoMinBase
|
||||
=> GetAllModelDtoAsync<TUserModelDto, TUser>();
|
||||
|
||||
|
||||
public Task<bool> AddUserAsync(TUser user)
|
||||
{
|
||||
return TransactionAsync(ctx => ctx.AddUser(user));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
using AyCode.Interfaces.Messages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace AyCode.Database.DbSets.Messages;
|
||||
|
||||
public static class AcEmailMessageDbSetExtension
|
||||
{
|
||||
public static TEmailMessage? GetEmailMessageById<TEmailMessage>(this IAcEmailMessageDbSet<TEmailMessage> ctx, Guid emailMessageId) where TEmailMessage : class, IAcEmailMessageBase
|
||||
=> ctx.EmailMessages.FirstOrDefault(x => x.Id == emailMessageId);
|
||||
|
||||
public static IQueryable<TEmailMessage> GetEmailMessagesByContextId<TEmailMessage>(this IAcEmailMessageDbSet<TEmailMessage> ctx, Guid contextId) where TEmailMessage : class, IAcEmailMessageBase
|
||||
=> ctx.EmailMessages.Where(x => x.ContextId == contextId);
|
||||
|
||||
public static IQueryable<TEmailMessage> GetEmailMessagesBySenderId<TEmailMessage>(this IAcEmailMessageDbSet<TEmailMessage> ctx, Guid senderId) where TEmailMessage : class, IAcEmailMessageBase
|
||||
=> ctx.EmailMessages.Where(x => x.SenderId == senderId);
|
||||
|
||||
public static IQueryable<TEmailMessage> GetEmailMessagesBySenderEmailAddress<TEmailMessage>(this IAcEmailMessageDbSet<TEmailMessage> ctx, string senderEmailAddress) where TEmailMessage : class, IAcEmailMessageBase
|
||||
=> ctx.EmailMessages.Where(x => x.EmailAddress == senderEmailAddress);
|
||||
|
||||
private static IQueryable<TEmailMessage> GetEmailMessages<TEmailMessage, TEmailRecipient>(this IQueryable<TEmailMessage> queryableEmails, Guid userId, Guid userProductMappingId)
|
||||
where TEmailMessage : class, IAcEmailMessageBase, IAcEmailRecipientsRelation<TEmailRecipient>
|
||||
where TEmailRecipient : IAcEmailRecipientBase
|
||||
{
|
||||
return queryableEmails.Where(x => x.SenderId == userId || x.SenderId == userProductMappingId || x.Recipients.Any(recipient => recipient.RecipientId == userId || recipient.RecipientId == userProductMappingId));
|
||||
}
|
||||
|
||||
public static IQueryable<TEmailMessage> GetEmailMessages<TEmailMessage, TEmailRecipient>(this IAcEmailMessageDbSet<TEmailMessage> ctx, Guid userId, Guid userProductMappingId)
|
||||
where TEmailMessage : class, IAcEmailMessageBase, IAcEmailRecipientsRelation<TEmailRecipient>
|
||||
where TEmailRecipient : IAcEmailRecipientBase
|
||||
{
|
||||
return ctx.EmailMessages.GetEmailMessages<TEmailMessage, TEmailRecipient>(userId, userProductMappingId);
|
||||
}
|
||||
|
||||
public static IQueryable<TEmailMessage> GetEmailMessages<TEmailMessage, TEmailRecipient>(this IAcEmailMessageDbSet<TEmailMessage> ctx, Guid contextId, Guid userId, Guid userProductMappingId)
|
||||
where TEmailMessage : class, IAcEmailMessageBase, IAcEmailRecipientsRelation<TEmailRecipient>
|
||||
where TEmailRecipient : IAcEmailRecipientBase
|
||||
{
|
||||
return ctx.GetEmailMessagesByContextId(contextId).GetEmailMessages<TEmailMessage, TEmailRecipient>(userId, userProductMappingId);
|
||||
}
|
||||
|
||||
#region Add, Update, Remove
|
||||
|
||||
public static bool AddEmailMessage<TEmailMessage>(this IAcEmailMessageDbSet<TEmailMessage> ctx, TEmailMessage emailMessage) where TEmailMessage : class, IAcEmailMessageBase
|
||||
=> ctx.EmailMessages.Add(emailMessage).State == EntityState.Added;
|
||||
|
||||
public static bool UpdateEmailMessage<TEmailMessage>(this IAcEmailMessageDbSet<TEmailMessage> ctx, TEmailMessage emailMessage) where TEmailMessage : class, IAcEmailMessageBase
|
||||
=> ctx.EmailMessages.Update(emailMessage).State == EntityState.Modified;
|
||||
|
||||
public static bool RemoveEmailMessage<TEmailMessage>(this IAcEmailMessageDbSet<TEmailMessage> ctx, Guid emailMessageId) where TEmailMessage : class, IAcEmailMessageBase
|
||||
{
|
||||
var emailMessage = ctx.GetEmailMessageById(emailMessageId);
|
||||
|
||||
return emailMessage == null || ctx.RemoveEmailMessage(emailMessage);
|
||||
}
|
||||
|
||||
public static bool RemoveEmailMessage<TEmailMessage>(this IAcEmailMessageDbSet<TEmailMessage> ctx, TEmailMessage emailMessage) where TEmailMessage : class, IAcEmailMessageBase
|
||||
=> ctx.EmailMessages.Remove(emailMessage).State == EntityState.Deleted;
|
||||
|
||||
#endregion Add, Update, Remove
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
using AyCode.Interfaces.Messages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace AyCode.Database.DbSets.Messages;
|
||||
|
||||
public interface IAcEmailMessageDbSet<TEmailMessage> where TEmailMessage : class, IAcEmailMessageBase
|
||||
{
|
||||
public DbSet<TEmailMessage> EmailMessages { get; set; }
|
||||
}
|
||||
|
|
@ -1,9 +1,12 @@
|
|||
using AyCode.Core.Extensions;
|
||||
using AyCode.Core.Logger;
|
||||
using AyCode.Database.Extensions;
|
||||
using AyCode.Entities;
|
||||
using AyCode.Entities.Users;
|
||||
using AyCode.Interfaces.Entities;
|
||||
using AyCode.Interfaces.Profiles;
|
||||
using AyCode.Interfaces.Users;
|
||||
using AyCode.Models.Users;
|
||||
|
||||
namespace AyCode.Database.DbSets.Users;
|
||||
|
||||
|
|
@ -14,24 +17,38 @@ public static class AcUserDbSetExtensions
|
|||
if (string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(passwordHash))
|
||||
return null;
|
||||
|
||||
return ctx.GetUsersByEmail(email, onlyConfirmed).SingleOrDefault(u => u.Password == passwordHash);
|
||||
return ctx.GetQueryableUserByEmail(email, onlyConfirmed)?.SingleOrDefault(u => u.Password == passwordHash);
|
||||
}
|
||||
|
||||
public static TUser? GetUserById<TUser>(this IAcUserDbSetBase<TUser> ctx, Guid userId, bool onlyConfirmed) where TUser : class, IAcUserBase
|
||||
=> ctx.GetUsersById(userId, onlyConfirmed).FirstOrDefault();
|
||||
=> ctx.Users.FirstOrDefault(u => u.Id == userId && (!onlyConfirmed || u.EmailConfirmed));
|
||||
|
||||
public static TUser? GetUserByEmail<TUser>(this IAcUserDbSetBase<TUser> ctx, string? email, bool onlyConfirmed) where TUser : class, IAcUserBase
|
||||
public static TUserModelDto? GetUserModelDtoById<TUserModelDto, TUser>(this IAcUserDbSetBase<TUser> ctx, Guid userId, bool onlyConfirmed)
|
||||
where TUserModelDto : class, IAcUserModelDtoMinBase
|
||||
where TUser : class, IAcUserBase
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(email) ? null : ctx.GetUsersByEmail(email, onlyConfirmed).FirstOrDefault();
|
||||
return ctx.GetUserById(userId, onlyConfirmed)?.ToModelDto<TUserModelDto, TUser>();
|
||||
}
|
||||
|
||||
public static IQueryable<TUser> GetUsersById<TUser>(this IAcUserDbSetBase<TUser> ctx, Guid userId, bool onlyConfirmed) where TUser : class, IAcUserBase
|
||||
public static TUser? GetUserByEmail<TUser>(this IAcUserDbSetBase<TUser> ctx, string? email, bool onlyConfirmed) where TUser : class, IAcUserBase
|
||||
=> ctx.GetQueryableUserByEmail(email, onlyConfirmed)?.FirstOrDefault();
|
||||
|
||||
public static TUserModelDto? GetUserModelDtoByEmail<TUserModelDto, TUser>(this IAcUserDbSetBase<TUser> ctx, string? email, bool onlyConfirmed)
|
||||
where TUserModelDto : class, IAcUserModelDtoMinBase
|
||||
where TUser : class, IAcUserBase
|
||||
{
|
||||
return ctx.GetUserByEmail(email, onlyConfirmed)?.ToModelDto<TUserModelDto, TUser>();
|
||||
}
|
||||
|
||||
public static IQueryable<TUser> GetQueryableUsersById<TUser>(this IAcUserDbSetBase<TUser> ctx, Guid userId, bool onlyConfirmed) where TUser : class, IAcUserBase
|
||||
=> ctx.Users.Where(u => u.Id == userId && (!onlyConfirmed || u.EmailConfirmed));
|
||||
|
||||
public static IQueryable<TUser> GetUsersByEmail<TUser>(this IAcUserDbSetBase<TUser> ctx, string email, bool onlyConfirmed) where TUser : class, IAcUserBase
|
||||
public static IQueryable<TUser>? GetQueryableUserByEmail<TUser>(this IAcUserDbSetBase<TUser> ctx, string? email, bool onlyConfirmed) where TUser : class, IAcUserBase
|
||||
{
|
||||
Logger.Info($"GetUserByEmail: {email}");
|
||||
|
||||
if (string.IsNullOrWhiteSpace(email)) return null;
|
||||
|
||||
var emailLower = email.ToLower();
|
||||
return ctx.Users.Where(u => u.EmailAddress == emailLower && (!onlyConfirmed || u.EmailConfirmed));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
using AyCode.Core.Interfaces;
|
||||
using AyCode.Database.DbContexts;
|
||||
using AyCode.Database.DbSets.Users;
|
||||
using AyCode.Entities;
|
||||
using AyCode.Interfaces;
|
||||
using AyCode.Interfaces.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace AyCode.Database.Extensions;
|
||||
|
||||
public static class AcDbModelDtoExtension
|
||||
{
|
||||
public static TModelDto? GetModelDtoById<TModelDto, TEntity>(this AcDbContextBase ctx, Guid id) where TModelDto : class, IAcModelDtoBase where TEntity : class, IEntity
|
||||
=> ctx.Set<TEntity>().Find(id)?.ToModelDto<TModelDto, TEntity>();
|
||||
|
||||
public static IEnumerable<TModelDto> GetAllModelDto<TModelDto, TEntity>(this AcDbContextBase ctx) where TModelDto : class, IAcModelDtoBase where TEntity : class, IEntity
|
||||
=> ctx.Set<TEntity>().ToModelDto<TModelDto, TEntity>();
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
using AyCode.Interfaces;
|
||||
using AyCode.Interfaces.Entities;
|
||||
|
||||
namespace AyCode.Entities;
|
||||
|
||||
public static class AcModelDtoExtension
|
||||
{
|
||||
public static TModelDto? ToModelDto<TModelDto, TEntity>(this TEntity entity) where TModelDto : class, IAcModelDtoBase where TEntity : class, IEntity
|
||||
=> Activator.CreateInstance(typeof(TModelDto), entity) as TModelDto;
|
||||
|
||||
public static IEnumerable<TModelDto> ToModelDto<TModelDto, TEntity>(this IEnumerable<TEntity> entities) where TModelDto : class, IAcModelDtoBase where TEntity : class, IEntity
|
||||
=> entities.Select(entity => entity.ToModelDto<TModelDto, TEntity>())!;
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
namespace AyCode.Interfaces.Messages;
|
||||
|
||||
public interface IAcEmailMessageForeignKey<T>
|
||||
{
|
||||
public T EmailMessageId { get; set; }
|
||||
}
|
||||
|
||||
public interface IAcEmailMessageForeignKey : IAcEmailMessageForeignKey<Guid>
|
||||
{ }
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
namespace AyCode.Interfaces.Messages;
|
||||
|
||||
public interface IAcEmailRecipientsRelation<TEmailRecipient>
|
||||
public interface IAcEmailRecipientsRelation<TEmailRecipient> where TEmailRecipient : IAcEmailRecipientBase
|
||||
{
|
||||
public List<TEmailRecipient> Recipients { get; set; }
|
||||
}
|
||||
Loading…
Reference in New Issue