34 lines
No EOL
1.3 KiB
C#
34 lines
No EOL
1.3 KiB
C#
#nullable disable
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Ellie.Db.Models;
|
|
|
|
namespace Ellie.Db;
|
|
|
|
public static class ClubExtensions
|
|
{
|
|
private static IQueryable<ClubInfo> Include(this DbSet<ClubInfo> clubs)
|
|
=> clubs.Include(x => x.Owner)
|
|
.Include(x => x.Applicants)
|
|
.ThenInclude(x => x.User)
|
|
.Include(x => x.Bans)
|
|
.ThenInclude(x => x.User)
|
|
.Include(x => x.Members)
|
|
.AsQueryable();
|
|
|
|
public static ClubInfo GetByOwner(this DbSet<ClubInfo> clubs, ulong userId)
|
|
=> Include(clubs).FirstOrDefault(c => c.Owner.UserId == userId);
|
|
|
|
public static ClubInfo GetByOwnerOrAdmin(this DbSet<ClubInfo> clubs, ulong userId)
|
|
=> Include(clubs)
|
|
.FirstOrDefault(c => c.Owner.UserId == userId || c.Members.Any(u => u.UserId == userId && u.IsClubAdmin));
|
|
|
|
public static ClubInfo GetByMember(this DbSet<ClubInfo> clubs, ulong userId)
|
|
=> Include(clubs).FirstOrDefault(c => c.Members.Any(u => u.UserId == userId));
|
|
|
|
public static ClubInfo GetByName(this DbSet<ClubInfo> clubs, string name)
|
|
=> Include(clubs)
|
|
.FirstOrDefault(c => c.Name == name);
|
|
|
|
public static List<ClubInfo> GetClubLeaderboardPage(this DbSet<ClubInfo> clubs, int page)
|
|
=> clubs.AsNoTracking().OrderByDescending(x => x.Xp).Skip(page * 9).Take(9).ToList();
|
|
} |