2013-04-20 23:36:23 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2013-07-18 00:07:48 +00:00
|
|
|
|
using System.Text;
|
2013-04-20 23:36:23 +00:00
|
|
|
|
using NzbDrone.Core.Datastore;
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.SeriesStats
|
|
|
|
|
{
|
|
|
|
|
public interface ISeriesStatisticsRepository
|
|
|
|
|
{
|
|
|
|
|
List<SeriesStatistics> SeriesStatistics();
|
2013-07-18 00:07:48 +00:00
|
|
|
|
SeriesStatistics SeriesStatistics(int seriesId);
|
2013-04-20 23:36:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class SeriesStatisticsRepository : ISeriesStatisticsRepository
|
|
|
|
|
{
|
2013-07-16 00:45:49 +00:00
|
|
|
|
private readonly IDatabase _database;
|
2013-04-20 23:36:23 +00:00
|
|
|
|
|
|
|
|
|
public SeriesStatisticsRepository(IDatabase database)
|
|
|
|
|
{
|
2013-07-16 00:45:49 +00:00
|
|
|
|
_database = database;
|
2013-04-20 23:36:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<SeriesStatistics> SeriesStatistics()
|
|
|
|
|
{
|
2013-07-16 00:45:49 +00:00
|
|
|
|
var mapper = _database.GetDataMapper();
|
2013-04-20 23:36:23 +00:00
|
|
|
|
|
2013-07-16 00:45:49 +00:00
|
|
|
|
mapper.AddParameter("currentDate", DateTime.UtcNow);
|
|
|
|
|
|
2013-07-18 00:07:48 +00:00
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
sb.AppendLine(GetSelectClause());
|
|
|
|
|
sb.AppendLine(GetGroupByClause());
|
|
|
|
|
var queryText = sb.ToString();
|
2013-04-20 23:36:23 +00:00
|
|
|
|
|
2013-07-16 00:45:49 +00:00
|
|
|
|
return mapper.Query<SeriesStatistics>(queryText);
|
2013-04-20 23:36:23 +00:00
|
|
|
|
}
|
2013-07-18 00:07:48 +00:00
|
|
|
|
|
|
|
|
|
public SeriesStatistics SeriesStatistics(int seriesId)
|
|
|
|
|
{
|
|
|
|
|
var mapper = _database.GetDataMapper();
|
|
|
|
|
|
|
|
|
|
mapper.AddParameter("currentDate", DateTime.UtcNow);
|
|
|
|
|
mapper.AddParameter("seriesId", seriesId);
|
|
|
|
|
|
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
sb.AppendLine(GetSelectClause());
|
|
|
|
|
sb.AppendLine("WHERE SeriesId = @seriesId");
|
|
|
|
|
sb.AppendLine(GetGroupByClause());
|
|
|
|
|
var queryText = sb.ToString();
|
|
|
|
|
|
|
|
|
|
return mapper.Find<SeriesStatistics>(queryText);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GetSelectClause()
|
|
|
|
|
{
|
|
|
|
|
return @"SELECT
|
|
|
|
|
SeriesId,
|
2013-09-05 06:45:18 +00:00
|
|
|
|
SUM(CASE WHEN (Monitored = 1 AND AirdateUtc <= @currentDate) OR EpisodeFileId > 0 THEN 1 ELSE 0 END) AS EpisodeCount,
|
2013-09-08 23:49:04 +00:00
|
|
|
|
SUM(CASE WHEN EpisodeFileId > 0 THEN 1 ELSE 0 END) AS EpisodeFileCount,
|
|
|
|
|
MIN(CASE WHEN AirDateUtc < @currentDate OR EpisodeFileId > 0 THEN NULL ELSE AirDateUtc END) AS NextAiringString
|
2013-07-18 00:07:48 +00:00
|
|
|
|
FROM Episodes";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GetGroupByClause()
|
|
|
|
|
{
|
|
|
|
|
return "GROUP BY SeriesId";
|
|
|
|
|
}
|
2013-04-20 23:36:23 +00:00
|
|
|
|
}
|
|
|
|
|
}
|