reworked sign up allowed check
This commit is contained in:
parent
a5f19cf086
commit
87c68fbcf7
1 changed files with 35 additions and 26 deletions
|
@ -96,8 +96,10 @@ namespace Lieb.Data
|
||||||
|
|
||||||
public async Task SignUp(int raidId, int liebUserId, int guildWars2AccountId, int plannedRoleId, SignUpType signUpType)
|
public async Task SignUp(int raidId, int liebUserId, int guildWars2AccountId, int plannedRoleId, SignUpType signUpType)
|
||||||
{
|
{
|
||||||
if ((await GetFreeRoles(raidId)).Where(r => r.PlannedRaidRoleId == plannedRoleId).Any() || signUpType == SignUpType.Backup || signUpType == SignUpType.Flex)
|
if (!IsSignUpAllowed(liebUserId, plannedRoleId, signUpType))
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
using var context = _contextFactory.CreateDbContext();
|
using var context = _contextFactory.CreateDbContext();
|
||||||
context.RaidSignUps.Add(new RaidSignUp()
|
context.RaidSignUps.Add(new RaidSignUp()
|
||||||
{
|
{
|
||||||
|
@ -109,7 +111,6 @@ namespace Lieb.Data
|
||||||
});
|
});
|
||||||
await context.SaveChangesAsync();
|
await context.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public async Task SignOff(int raidId, int liebUserId)
|
public async Task SignOff(int raidId, int liebUserId)
|
||||||
{
|
{
|
||||||
|
@ -132,32 +133,40 @@ namespace Lieb.Data
|
||||||
|
|
||||||
public async Task ChangeSignUpType(int raidId, int liebUserId, int plannedRoleId, SignUpType signUpType)
|
public async Task ChangeSignUpType(int raidId, int liebUserId, int plannedRoleId, SignUpType signUpType)
|
||||||
{
|
{
|
||||||
bool roleIsAvailable = (await GetFreeRoles(raidId)).Where(r => r.PlannedRaidRoleId == plannedRoleId).Any();
|
if (!IsSignUpAllowed(liebUserId, plannedRoleId, signUpType))
|
||||||
if (!roleIsAvailable && signUpType == SignUpType.SignedUp)
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
using var context = _contextFactory.CreateDbContext();
|
using var context = _contextFactory.CreateDbContext();
|
||||||
|
|
||||||
//allow changing to Maybe if already signed up
|
|
||||||
if (!roleIsAvailable && signUpType == SignUpType.Maybe)
|
|
||||||
{
|
|
||||||
Raid raid = await context.Raids
|
|
||||||
.Include(r => r.SignUps)
|
|
||||||
.FirstOrDefaultAsync(r => r.RaidId != raidId);
|
|
||||||
RaidSignUp sign = raid.SignUps.FirstOrDefault(s => s.LiebUserId == liebUserId && s.SignUpType != SignUpType.Flex && s.SignUpType != SignUpType.SignedOff);
|
|
||||||
if(!(sign.SignUpType == SignUpType.SignedUp && sign.PlannedRaidRoleId == plannedRoleId))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RaidSignUp signUp = await context.RaidSignUps.FirstOrDefaultAsync(x => x.RaidId == raidId && x.LiebUserId == liebUserId && x.SignUpType != SignUpType.SignedOff && x.SignUpType != SignUpType.Flex);
|
RaidSignUp signUp = await context.RaidSignUps.FirstOrDefaultAsync(x => x.RaidId == raidId && x.LiebUserId == liebUserId && x.SignUpType != SignUpType.SignedOff && x.SignUpType != SignUpType.Flex);
|
||||||
signUp.PlannedRaidRoleId = plannedRoleId;
|
signUp.PlannedRaidRoleId = plannedRoleId;
|
||||||
signUp.SignUpType = signUpType;
|
signUp.SignUpType = signUpType;
|
||||||
await context.SaveChangesAsync();
|
await context.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSignUpAllowed(int liebUserId, int plannedRoleId, SignUpType signUpType)
|
||||||
|
{
|
||||||
|
if(signUpType == SignUpType.Backup || signUpType == SignUpType.Flex || signUpType == SignUpType.SignedOff)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
using var context = _contextFactory.CreateDbContext();
|
||||||
|
|
||||||
|
List<RaidSignUp> signUps = context.RaidSignUps.Where(s => s.PlannedRaidRoleId == plannedRoleId).ToList();
|
||||||
|
|
||||||
|
PlannedRaidRole role = context.PlannedRaidRoles
|
||||||
|
.FirstOrDefault(r => r.PlannedRaidRoleId == plannedRoleId);
|
||||||
|
|
||||||
|
if (role == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(signUps.Count(s => s.SignUpType == SignUpType.SignedUp) < role.Spots)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return signUps.Where(s => s.LiebUserId == liebUserId && s.SignUpType == SignUpType.SignedUp).Any();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue