mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2024-10-02 20:13:13 +00:00
Removed clubs repository and moved functionality to an extension
This commit is contained in:
parent
9f6d4ab62f
commit
dbf51a8a1b
6 changed files with 92 additions and 164 deletions
|
@ -1,11 +1,13 @@
|
|||
using NadekoBot.Core.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NadekoBot.Core.Services.Database.Models;
|
||||
using Discord;
|
||||
using System.Linq;
|
||||
using NadekoBot.Extensions;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using NadekoBot.Modules.Xp.Common;
|
||||
|
||||
namespace NadekoBot.Modules.Xp.Services
|
||||
{
|
||||
|
@ -25,34 +27,32 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
//must be lvl 5 and must not be in a club already
|
||||
|
||||
club = null;
|
||||
using (var uow = _db.GetDbContext())
|
||||
using var uow = _db.GetDbContext();
|
||||
var du = uow.DiscordUsers.GetOrCreate(user);
|
||||
uow._context.SaveChanges();
|
||||
var xp = new LevelStats(du.TotalXp);
|
||||
|
||||
if (xp.Level >= 5 && du.Club == null)
|
||||
{
|
||||
var du = uow.DiscordUsers.GetOrCreate(user);
|
||||
uow._context.SaveChanges();
|
||||
var xp = new LevelStats(du.TotalXp);
|
||||
|
||||
if (xp.Level >= 5 && du.Club == null)
|
||||
du.IsClubAdmin = true;
|
||||
du.Club = new ClubInfo()
|
||||
{
|
||||
du.IsClubAdmin = true;
|
||||
du.Club = new ClubInfo()
|
||||
{
|
||||
Name = clubName,
|
||||
Discrim = uow.Clubs.GetNextDiscrim(clubName),
|
||||
Owner = du,
|
||||
};
|
||||
uow.Clubs.Add(du.Club);
|
||||
uow._context.SaveChanges();
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
uow._context.Set<ClubApplicants>()
|
||||
.RemoveRange(uow._context.Set<ClubApplicants>()
|
||||
.AsQueryable()
|
||||
.Where(x => x.UserId == du.Id));
|
||||
club = du.Club;
|
||||
uow.SaveChanges();
|
||||
Name = clubName,
|
||||
Discrim = uow._context.Clubs.GetNextDiscrim(clubName),
|
||||
Owner = du,
|
||||
};
|
||||
uow._context.Clubs.Add(du.Club);
|
||||
uow._context.SaveChanges();
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
uow._context.Set<ClubApplicants>()
|
||||
.RemoveRange(uow._context.Set<ClubApplicants>()
|
||||
.AsQueryable()
|
||||
.Where(x => x.UserId == du.Id));
|
||||
club = du.Club;
|
||||
uow.SaveChanges();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
ClubInfo club;
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
club = uow.Clubs.GetByOwner(from.Id);
|
||||
club = uow._context.Clubs.GetByOwner(from.Id);
|
||||
var newOwnerUser = uow.DiscordUsers.GetOrCreate(newOwner);
|
||||
|
||||
if (club == null ||
|
||||
|
@ -83,7 +83,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
bool newState;
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
var club = uow.Clubs.GetByOwner(owner.Id);
|
||||
var club = uow._context.Clubs.GetByOwner(owner.Id);
|
||||
var adminUser = uow.DiscordUsers.GetOrCreate(toAdmin);
|
||||
|
||||
if (club == null || club.Owner.UserId != owner.Id ||
|
||||
|
@ -101,10 +101,9 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
|
||||
public ClubInfo GetClubByMember(IUser user)
|
||||
{
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
return uow.Clubs.GetByMember(user.Id);
|
||||
}
|
||||
using var uow = _db.GetDbContext();
|
||||
var member = uow._context.Clubs.GetByMember(user.Id);
|
||||
return member;
|
||||
}
|
||||
|
||||
public async Task<bool> SetClubIcon(ulong ownerUserId, Uri url)
|
||||
|
@ -121,7 +120,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
var club = uow.Clubs.GetByOwner(ownerUserId, set => set);
|
||||
var club = uow._context.Clubs.GetByOwner(ownerUserId);
|
||||
|
||||
if (club == null)
|
||||
return false;
|
||||
|
@ -148,7 +147,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
club = uow.Clubs.GetByName(name, discrim);
|
||||
club = uow._context.Clubs.GetByName(name, discrim);
|
||||
if (club == null)
|
||||
return false;
|
||||
else
|
||||
|
@ -191,7 +190,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
discordUser = null;
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
var club = uow.Clubs.GetByOwnerOrAdmin(clubOwnerUserId);
|
||||
var club = uow._context.Clubs.GetByOwnerOrAdmin(clubOwnerUserId);
|
||||
if (club == null)
|
||||
return false;
|
||||
|
||||
|
@ -219,7 +218,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
{
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
return uow.Clubs.GetByOwnerOrAdmin(ownerUserId);
|
||||
return uow._context.Clubs.GetByOwnerOrAdmin(ownerUserId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -245,7 +244,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
var club = uow.Clubs.GetByOwner(userId);
|
||||
var club = uow._context.Clubs.GetByOwner(userId);
|
||||
if (club == null)
|
||||
return false;
|
||||
|
||||
|
@ -260,7 +259,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
{
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
var club = uow.Clubs.GetByOwner(userId);
|
||||
var club = uow._context.Clubs.GetByOwner(userId);
|
||||
if (club == null)
|
||||
return false;
|
||||
|
||||
|
@ -275,11 +274,11 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
{
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
club = uow.Clubs.GetByOwner(userId);
|
||||
club = uow._context.Clubs.GetByOwner(userId);
|
||||
if (club == null)
|
||||
return false;
|
||||
|
||||
uow.Clubs.Remove(club);
|
||||
uow._context.Clubs.Remove(club);
|
||||
uow.SaveChanges();
|
||||
}
|
||||
return true;
|
||||
|
@ -289,7 +288,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
{
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
club = uow.Clubs.GetByOwnerOrAdmin(bannerId);
|
||||
club = uow._context.Clubs.GetByOwnerOrAdmin(bannerId);
|
||||
if (club == null)
|
||||
return false;
|
||||
|
||||
|
@ -322,7 +321,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
{
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
club = uow.Clubs.GetByOwnerOrAdmin(ownerUserId);
|
||||
club = uow._context.Clubs.GetByOwnerOrAdmin(ownerUserId);
|
||||
if (club == null)
|
||||
return false;
|
||||
|
||||
|
@ -341,7 +340,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
{
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
club = uow.Clubs.GetByOwnerOrAdmin(kickerId);
|
||||
club = uow._context.Clubs.GetByOwnerOrAdmin(kickerId);
|
||||
if (club == null)
|
||||
return false;
|
||||
|
||||
|
@ -362,15 +361,13 @@ namespace NadekoBot.Modules.Xp.Services
|
|||
return true;
|
||||
}
|
||||
|
||||
public ClubInfo[] GetClubLeaderboardPage(int page)
|
||||
public List<ClubInfo> GetClubLeaderboardPage(int page)
|
||||
{
|
||||
if (page < 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(page));
|
||||
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
return uow.Clubs.GetClubLeaderboardPage(page);
|
||||
}
|
||||
using var uow = _db.GetDbContext();
|
||||
return uow._context.Clubs.GetClubLeaderboardPage(page);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ namespace NadekoBot.Core.Services.Database
|
|||
IDiscordUserRepository DiscordUsers { get; }
|
||||
IWarningsRepository Warnings { get; }
|
||||
IXpRepository Xp { get; }
|
||||
IClubRepository Clubs { get; }
|
||||
IPollsRepository Polls { get; }
|
||||
IPlantedCurrencyRepository PlantedCurrency { get; }
|
||||
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
using Microsoft.EntityFrameworkCore;
|
||||
using NadekoBot.Core.Services.Database.Models;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace NadekoBot.Core.Services.Database.Repositories
|
||||
{
|
||||
public interface IClubRepository : IRepository<ClubInfo>
|
||||
{
|
||||
int GetNextDiscrim(string clubName);
|
||||
ClubInfo GetByName(string v, int discrim, Func<DbSet<ClubInfo>, IQueryable<ClubInfo>> func = null);
|
||||
ClubInfo GetByOwner(ulong userId, Func<DbSet<ClubInfo>, IQueryable<ClubInfo>> func = null);
|
||||
ClubInfo GetByOwnerOrAdmin(ulong userId);
|
||||
ClubInfo GetByMember(ulong userId, Func<DbSet<ClubInfo>, IQueryable<ClubInfo>> func = null);
|
||||
ClubInfo[] GetClubLeaderboardPage(int page);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
using NadekoBot.Core.Services.Database.Models;
|
||||
using System.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NadekoBot.Modules.Xp.Common
|
||||
{
|
||||
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.Users)
|
||||
.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.Users.Any(u => u.UserId == userId && u.IsClubAdmin));
|
||||
|
||||
public static ClubInfo GetByMember(this DbSet<ClubInfo> clubs, ulong userId)
|
||||
=> Include(clubs).FirstOrDefault(c => c.Users.Any(u => u.UserId == userId));
|
||||
|
||||
public static ClubInfo? GetByName(this DbSet<ClubInfo> clubs, string name, int discrim)
|
||||
=> Include(clubs).FirstOrDefault(c => c.Name.ToUpper() == name.ToUpper() && c.Discrim == discrim);
|
||||
|
||||
public static int GetNextDiscrim(this DbSet<ClubInfo> clubs, string name)
|
||||
=> Include(clubs)
|
||||
.Where(x => x.Name.ToUpper() == name.ToUpper())
|
||||
.Select(x => x.Discrim)
|
||||
.DefaultIfEmpty()
|
||||
.Max() + 1;
|
||||
|
||||
public static List<ClubInfo> GetClubLeaderboardPage(this DbSet<ClubInfo> clubs, int page)
|
||||
{
|
||||
return clubs
|
||||
.AsNoTracking()
|
||||
.OrderByDescending(x => x.Xp)
|
||||
.Skip(page * 9)
|
||||
.Take(9)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
using NadekoBot.Core.Services.Database.Models;
|
||||
using System.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
|
||||
namespace NadekoBot.Core.Services.Database.Repositories.Impl
|
||||
{
|
||||
public class ClubRepository : Repository<ClubInfo>, IClubRepository
|
||||
{
|
||||
public ClubRepository(DbContext context) : base(context)
|
||||
{
|
||||
}
|
||||
|
||||
public ClubInfo GetByOwner(ulong userId, Func<DbSet<ClubInfo>, IQueryable<ClubInfo>> func = null)
|
||||
{
|
||||
if (func == null)
|
||||
return _set
|
||||
.Include(x => x.Bans)
|
||||
.Include(x => x.Applicants)
|
||||
.Include(x => x.Users)
|
||||
.Include(x => x.Owner)
|
||||
.FirstOrDefault(x => x.Owner.UserId == userId);
|
||||
|
||||
return func(_set).FirstOrDefault(x => x.Owner.UserId == userId);
|
||||
}
|
||||
|
||||
public ClubInfo GetByOwnerOrAdmin(ulong userId)
|
||||
{
|
||||
return _set
|
||||
.Include(x => x.Bans)
|
||||
.ThenInclude(x => x.User)
|
||||
.Include(x => x.Applicants)
|
||||
.ThenInclude(x => x.User)
|
||||
.Include(x => x.Owner)
|
||||
.Include(x => x.Users)
|
||||
.FirstOrDefault(x => x.Owner.UserId == userId) ??
|
||||
_context.Set<DiscordUser>()
|
||||
.Include(x => x.Club)
|
||||
.ThenInclude(x => x.Users)
|
||||
.Include(x => x.Club)
|
||||
.ThenInclude(x => x.Bans)
|
||||
.ThenInclude(x => x.User)
|
||||
.Include(x => x.Club)
|
||||
.ThenInclude(x => x.Applicants)
|
||||
.ThenInclude(x => x.User)
|
||||
.Include(x => x.Club)
|
||||
.ThenInclude(x => x.Owner)
|
||||
.FirstOrDefault(x => x.UserId == userId && x.IsClubAdmin)
|
||||
?.Club;
|
||||
}
|
||||
|
||||
public ClubInfo GetByName(string name, int discrim, Func<DbSet<ClubInfo>, IQueryable<ClubInfo>> func = null)
|
||||
{
|
||||
if (func == null)
|
||||
return _set.AsQueryable()
|
||||
.Where(x => x.Name == name && x.Discrim == discrim)
|
||||
.Include(x => x.Users)
|
||||
.Include(x => x.Bans)
|
||||
.Include(x => x.Applicants)
|
||||
.FirstOrDefault();
|
||||
|
||||
return func(_set).FirstOrDefault(x => x.Name == name && x.Discrim == discrim);
|
||||
}
|
||||
|
||||
public int GetNextDiscrim(string clubName)
|
||||
{
|
||||
return _set.AsQueryable()
|
||||
.Where(x => x.Name.ToUpper() == clubName.ToUpper())
|
||||
.Select(x => x.Discrim)
|
||||
.ToList()
|
||||
.DefaultIfEmpty()
|
||||
.Max() + 1;
|
||||
}
|
||||
|
||||
public ClubInfo GetByMember(ulong userId, Func<DbSet<ClubInfo>, IQueryable<ClubInfo>> func = null)
|
||||
{
|
||||
if (func == null)
|
||||
return _set
|
||||
.Include(x => x.Users)
|
||||
.Include(x => x.Bans)
|
||||
.Include(x => x.Applicants)
|
||||
.FirstOrDefault(x => x.Users.Any(y => y.UserId == userId));
|
||||
|
||||
return func(_set).FirstOrDefault(x => x.Users.Any(y => y.UserId == userId));
|
||||
}
|
||||
|
||||
public ClubInfo[] GetClubLeaderboardPage(int page)
|
||||
{
|
||||
return _set.AsQueryable()
|
||||
.OrderByDescending(x => x.Xp)
|
||||
.Skip(page * 9)
|
||||
.Take(9)
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -39,9 +39,6 @@ namespace NadekoBot.Core.Services.Database
|
|||
private IXpRepository _xp;
|
||||
public IXpRepository Xp => _xp ?? (_xp = new XpRepository(_context));
|
||||
|
||||
private IClubRepository _clubs;
|
||||
public IClubRepository Clubs => _clubs ?? (_clubs = new ClubRepository(_context));
|
||||
|
||||
private IPollsRepository _polls;
|
||||
public IPollsRepository Polls => _polls ?? (_polls = new PollsRepository(_context));
|
||||
|
||||
|
|
Loading…
Reference in a new issue