feat(request-limits): Added in the main logic for the new request limits

pull/4312/head
tidusjar 3 years ago
parent f73bccbea7
commit 70d5bf52bf

@ -35,7 +35,7 @@ namespace Ombi.Core.Engine.Interfaces
return null;
}
var username = Username.ToUpper();
return _user ?? (_user = await UserManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username));
return _user ??= await UserManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username);
}
protected async Task<string> UserAlias()

@ -782,9 +782,16 @@ namespace Ombi.Core.Engine
IQueryable<RequestLog> log = _requestLog.GetAll().Where(x => x.UserId == user.Id && x.RequestType == RequestType.Movie);
int count = limit - await log.CountAsync(x => x.RequestDate >= DateTime.UtcNow.AddDays(-7));
DateTime oldestRequestedAt = await log.Where(x => x.RequestDate >= DateTime.UtcNow.AddDays(-7))
int count = 0;
DateTime oldestRequestedAt = DateTime.Now;
DateTime nextRequest = DateTime.Now;
if (!user.MovieRequestLimitType.HasValue)
{
count = limit - await log.CountAsync(x => x.RequestDate >= DateTime.UtcNow.AddDays(-7));
oldestRequestedAt = await log.Where(x => x.RequestDate >= DateTime.UtcNow.AddDays(-7))
.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate)
.FirstOrDefaultAsync();
@ -793,9 +800,48 @@ namespace Ombi.Core.Engine
{
HasLimit = true,
Limit = limit,
Remaining = count,
Remaining = count < 0 ? 0 : count,
NextRequest = DateTime.SpecifyKind(oldestRequestedAt.AddDays(7), DateTimeKind.Utc),
};
}
switch (user.MovieRequestLimitType)
{
case RequestLimitType.Day:
count = limit - await log.CountAsync(x => x.RequestDate >= DateTime.UtcNow.Date);
oldestRequestedAt = await log.Where(x => x.RequestDate >= DateTime.UtcNow.Date)
.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate)
.FirstOrDefaultAsync();
nextRequest = oldestRequestedAt.AddDays(1);
break;
case RequestLimitType.Week:
count = limit - await log.CountAsync(x => x.RequestDate >= DateTime.UtcNow.Date.AddDays(-7));
oldestRequestedAt = await log.Where(x => x.RequestDate >= DateTime.UtcNow.Date.AddDays(-7))
.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate)
.FirstOrDefaultAsync();
nextRequest = oldestRequestedAt.AddDays(7);
break;
case RequestLimitType.Month:
count = limit - await log.CountAsync(x => x.RequestDate >= DateTime.UtcNow.Date.AddMonths(-1));
oldestRequestedAt = await log.Where(x => x.RequestDate >= DateTime.UtcNow.Date.AddMonths(-1))
.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate)
.FirstOrDefaultAsync();
nextRequest = oldestRequestedAt.AddMonths(1);
break;
default:
break;
}
return new RequestQuotaCountModel()
{
HasLimit = true,
Limit = limit,
Remaining = count < 0 ? 0 : count,
NextRequest = DateTime.SpecifyKind(nextRequest, DateTimeKind.Utc),
};
}
}
}

@ -981,19 +981,30 @@ namespace Ombi.Core.Engine
};
}
IQueryable<RequestLog> log = _requestLog.GetAll()
.Where(x => x.UserId == user.Id
&& x.RequestType == RequestType.TvShow
&& x.RequestDate >= DateTime.UtcNow.AddDays(-7));
IQueryable<RequestLog> log = _requestLog.GetAll().Where(x => x.UserId == user.Id && x.RequestType == RequestType.TvShow);
int count = 0;
DateTime oldestRequestedAt = DateTime.Now;
DateTime nextRequest = DateTime.Now;
IQueryable<RequestLog> filteredLog;
int zeroEpisodeCount;
int episodeCount;
if (!user.EpisodeRequestLimitType.HasValue)
{
filteredLog = log.Where(x => x.RequestDate >= DateTime.UtcNow.AddDays(-7));
// Needed, due to a bug which would cause all episode counts to be 0
int zeroEpisodeCount = await log.Where(x => x.EpisodeCount == 0).Select(x => x.EpisodeCount).CountAsync();
zeroEpisodeCount = await filteredLog.Where(x => x.EpisodeCount == 0).Select(x => x.EpisodeCount).CountAsync();
int episodeCount = await log.Where(x => x.EpisodeCount != 0).Select(x => x.EpisodeCount).SumAsync();
episodeCount = await filteredLog.Where(x => x.EpisodeCount != 0).Select(x => x.EpisodeCount).SumAsync();
int count = limit - (zeroEpisodeCount + episodeCount);
count = limit - (zeroEpisodeCount + episodeCount);
DateTime oldestRequestedAt = await log.OrderBy(x => x.RequestDate)
oldestRequestedAt = await log
.Where(x => x.RequestDate >= DateTime.UtcNow.AddDays(-7))
.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate)
.FirstOrDefaultAsync();
@ -1001,11 +1012,69 @@ namespace Ombi.Core.Engine
{
HasLimit = true,
Limit = limit,
Remaining = count,
Remaining = count < 0 ? 0 : count,
NextRequest = DateTime.SpecifyKind(oldestRequestedAt.AddDays(7), DateTimeKind.Utc),
};
}
switch (user.EpisodeRequestLimitType)
{
case RequestLimitType.Day:
filteredLog = log.Where(x => x.RequestDate >= DateTime.UtcNow.Date);
// Needed, due to a bug which would cause all episode counts to be 0
zeroEpisodeCount = await filteredLog.Where(x => x.EpisodeCount == 0).Select(x => x.EpisodeCount).CountAsync();
episodeCount = await filteredLog.Where(x => x.EpisodeCount != 0).Select(x => x.EpisodeCount).SumAsync();
count = limit - (zeroEpisodeCount + episodeCount);
oldestRequestedAt = await log.Where(x => x.RequestDate >= DateTime.UtcNow.Date)
.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate)
.FirstOrDefaultAsync();
nextRequest = oldestRequestedAt.AddDays(1);
break;
case RequestLimitType.Week:
filteredLog = log.Where(x => x.RequestDate >= DateTime.UtcNow.Date.AddDays(-7));
// Needed, due to a bug which would cause all episode counts to be 0
zeroEpisodeCount = await filteredLog.Where(x => x.EpisodeCount == 0).Select(x => x.EpisodeCount).CountAsync();
episodeCount = await filteredLog.Where(x => x.EpisodeCount != 0).Select(x => x.EpisodeCount).SumAsync();
count = limit - (zeroEpisodeCount + episodeCount);
oldestRequestedAt = await log.Where(x => x.RequestDate >= DateTime.UtcNow.Date.AddDays(-7))
.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate)
.FirstOrDefaultAsync();
nextRequest = oldestRequestedAt.AddDays(7);
break;
case RequestLimitType.Month:
filteredLog = log.Where(x => x.RequestDate >= DateTime.UtcNow.Date.AddMonths(-1));
// Needed, due to a bug which would cause all episode counts to be 0
zeroEpisodeCount = await filteredLog.Where(x => x.EpisodeCount == 0).Select(x => x.EpisodeCount).CountAsync();
episodeCount = await filteredLog.Where(x => x.EpisodeCount != 0).Select(x => x.EpisodeCount).SumAsync();
count = limit - (zeroEpisodeCount + episodeCount);
oldestRequestedAt = await log.Where(x => x.RequestDate >= DateTime.UtcNow.Date.AddMonths(-1))
.OrderBy(x => x.RequestDate)
.Select(x => x.RequestDate)
.FirstOrDefaultAsync();
nextRequest = oldestRequestedAt.AddMonths(1);
break;
default:
break;
}
return new RequestQuotaCountModel()
{
HasLimit = true,
Limit = limit,
Remaining = count < 0 ? 0 : count,
NextRequest = DateTime.SpecifyKind(nextRequest, DateTimeKind.Utc),
};
return null;
}
public async Task<RequestEngineResult> UpdateAdvancedOptions(MediaAdvancedOptions options)
{
var request = await TvRepository.Find(options.RequestId);

@ -34,9 +34,6 @@ namespace Ombi.Store.Entities
public RequestLimitType? MovieRequestLimitType { get; set; }
public RequestLimitType? EpisodeRequestLimitType { get; set; }
public RequestLimitType? MusicRequestLimitType { get; set; }
public int? MovieRequestLimitAmount { get; set; }
public int? EpisodeRequestLimitAmount { get; set; }
public int? MusicRequestLimitAmount { get; set; }
public string UserAccessToken { get; set; }

@ -0,0 +1,43 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Ombi.Store.Migrations.OmbiMySql
{
public partial class UserRequestLimits_Pt2 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "EpisodeRequestLimitAmount",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "MovieRequestLimitAmount",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "MusicRequestLimitAmount",
table: "AspNetUsers");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "EpisodeRequestLimitAmount",
table: "AspNetUsers",
type: "int",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "MovieRequestLimitAmount",
table: "AspNetUsers",
type: "int",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "MusicRequestLimitAmount",
table: "AspNetUsers",
type: "int",
nullable: true);
}
}
}

@ -266,9 +266,6 @@ namespace Ombi.Store.Migrations.OmbiMySql
b.Property<int?>("EpisodeRequestLimit")
.HasColumnType("int");
b.Property<int?>("EpisodeRequestLimitAmount")
.HasColumnType("int");
b.Property<int?>("EpisodeRequestLimitType")
.HasColumnType("int");
@ -287,18 +284,12 @@ namespace Ombi.Store.Migrations.OmbiMySql
b.Property<int?>("MovieRequestLimit")
.HasColumnType("int");
b.Property<int?>("MovieRequestLimitAmount")
.HasColumnType("int");
b.Property<int?>("MovieRequestLimitType")
.HasColumnType("int");
b.Property<int?>("MusicRequestLimit")
.HasColumnType("int");
b.Property<int?>("MusicRequestLimitAmount")
.HasColumnType("int");
b.Property<int?>("MusicRequestLimitType")
.HasColumnType("int");

@ -0,0 +1,43 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Ombi.Store.Migrations.OmbiSqlite
{
public partial class UserRequestLimits_Pt2 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "EpisodeRequestLimitAmount",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "MovieRequestLimitAmount",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "MusicRequestLimitAmount",
table: "AspNetUsers");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "EpisodeRequestLimitAmount",
table: "AspNetUsers",
type: "INTEGER",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "MovieRequestLimitAmount",
table: "AspNetUsers",
type: "INTEGER",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "MusicRequestLimitAmount",
table: "AspNetUsers",
type: "INTEGER",
nullable: true);
}
}
}

@ -265,9 +265,6 @@ namespace Ombi.Store.Migrations.OmbiSqlite
b.Property<int?>("EpisodeRequestLimit")
.HasColumnType("INTEGER");
b.Property<int?>("EpisodeRequestLimitAmount")
.HasColumnType("INTEGER");
b.Property<int?>("EpisodeRequestLimitType")
.HasColumnType("INTEGER");
@ -286,18 +283,12 @@ namespace Ombi.Store.Migrations.OmbiSqlite
b.Property<int?>("MovieRequestLimit")
.HasColumnType("INTEGER");
b.Property<int?>("MovieRequestLimitAmount")
.HasColumnType("INTEGER");
b.Property<int?>("MovieRequestLimitType")
.HasColumnType("INTEGER");
b.Property<int?>("MusicRequestLimit")
.HasColumnType("INTEGER");
b.Property<int?>("MusicRequestLimitAmount")
.HasColumnType("INTEGER");
b.Property<int?>("MusicRequestLimitType")
.HasColumnType("INTEGER");

Loading…
Cancel
Save