TourIAm/TIAM.Database/DbSets/Users/UserDbSetExtensions.cs

46 lines
2.3 KiB
C#

using System.Security.Cryptography.X509Certificates;
using AyCode.Database.DbSets.Users;
using Microsoft.EntityFrameworkCore;
using TIAM.Entities.Users;
using TIAM.Models.Dtos.Users;
namespace TIAM.Database.DbSets.Users;
public static class UserDbSetExtensions
{
public static IQueryable<User> UsersWithProductRelations(this IUserDbSet ctx, bool autoInclude = true)
=> autoInclude
? ctx.Users
.Include(x => x.UserProductMappings)
.ThenInclude(x => x.Product)
: ctx.Users;
public static User? GetUserById(this IUserDbSet ctx, Guid userId, bool autoInclude)
=> ctx.UsersWithProductRelations(autoInclude).FirstOrDefault(x => x.Id == userId);
public static User? GetUserByEmail(this IUserDbSet ctx, string email, bool autoInclude)
=> ctx.UsersWithProductRelations(autoInclude).FirstOrDefault(x => x.EmailAddress == email);
public static TUserModelDto? GetUserModelDtoById<TUserModelDto>(this IUserDbSet ctx, Guid userId, bool onlyConfirmed) where TUserModelDto : class, IUserModelDtoMinBase
{
var user = ctx.GetUsersById(userId, onlyConfirmed).FirstOrDefault();
return Activator.CreateInstance(typeof(TUserModelDto), user) as TUserModelDto;
}
//=> ctx.GetUsersById(userId, onlyConfirmed).Select(user => new UserModelDto(user)).FirstOrDefault();
public static UserModelDto? GetUserModelDtoByEmail(this IUserDbSet ctx, string email, bool onlyConfirmed)
=> ctx.GetUsersByEmail(email, onlyConfirmed).Select(user => new UserModelDto(user)).FirstOrDefault();
public static IQueryable<UserModelDto> GetAllUsersModelDto(this IUserDbSet ctx)
=> ctx.Users.Select(user => new UserModelDto(user));
public static UserModelDtoDetail? GetUserModelDtoDetailById(this IUserDbSet ctx, Guid userId, bool onlyConfirmed)
=> ctx.GetUsersById(userId, onlyConfirmed).Select(user => new UserModelDtoDetail(user)).FirstOrDefault();
public static UserModelDtoDetail? GetUserModelDtoDetailByEmail(this IUserDbSet ctx, string email, bool onlyConfirmed)
=> ctx.GetUsersByEmail(email, onlyConfirmed).Select(user => new UserModelDtoDetail(user)).FirstOrDefault();
public static IQueryable<UserModelDtoDetail> GetAllUsersModelDetailDto(this IUserDbSet ctx)
=> ctx.Users.Select(user => new UserModelDtoDetail(user));
}