@ -4,15 +4,15 @@ using System.Globalization;
using System.Linq ;
using AutoMapper ;
using FluentValidation ;
using Nancy ;
using NzbDrone.Api.Extensions ;
using NzbDrone.Common ;
using NzbDrone.Core.Tv ;
using NzbDrone.Core.Model ;
using NzbDrone.Api.Validation ;
namespace NzbDrone.Api.Series
{
public class SeriesModule : NzbDrone ApiModule//: RestModule<SeriesResource>
public class SeriesModule : NzbDrone RestModule < SeriesResource >
{
private readonly ISeriesService _seriesService ;
@ -20,15 +20,23 @@ namespace NzbDrone.Api.Series
: base ( "/Series" )
{
_seriesService = seriesService ;
Get [ "/" ] = x = > AllSeries ( ) ;
Get [ "/{id}" ] = x = > GetSeries ( ( int ) x . id ) ;
Post [ "/" ] = x = > AddSeries ( ) ;
Put [ "/" ] = x = > UpdateSeries ( ) ;
Delete [ "/{id}" ] = x = > DeleteSeries ( ( int ) x . id ) ;
GetResourceAll = AllSeries ;
GetResourceById = GetSeries ;
CreateResource = AddSeries ;
UpdateResource = UpdateSeries ;
DeleteResource = DeleteSeries ;
SharedValidator . RuleFor ( s = > s . RootFolderId ) . ValidId ( ) ;
SharedValidator . RuleFor ( s = > s . QualityProfileId ) . ValidId ( ) ;
PostValidator . RuleFor ( s = > s . Title ) . NotEmpty ( ) ;
}
private Response AllSeries ( )
private List< SeriesResource > AllSeries ( )
{
var series = _seriesService . GetAllSeries ( ) . ToList ( ) ;
var seriesStats = _seriesService . SeriesStatistics ( ) ;
@ -45,18 +53,17 @@ namespace NzbDrone.Api.Series
s . NextAiring = stats . NextAiring ;
}
return seriesModels .AsResponse ( ) ;
return seriesModels ;
}
private Respons e GetSeries ( int id )
private SeriesResourc e GetSeries ( int id )
{
var series = _seriesService . GetSeries ( id ) ;
var seriesModels = Mapper . Map < Core . Tv . Series , SeriesResource > ( series ) ;
return seriesModels . AsResponse ( ) ;
return seriesModels ;
}
private Response AddSeries ( )
private SeriesResource AddSeries ( SeriesResource seriesResource )
{
var newSeries = Request . Body . FromJson < Core . Tv . Series > ( ) ;
@ -64,44 +71,40 @@ namespace NzbDrone.Api.Series
//Todo: We need to create the folder if the user is adding a new series
//(we can just create the folder and it won't blow up if it already exists)
//We also need to remove any special characters from the filename before attempting to create it
_seriesService . AddSeries ( newSeries ) ;
return new Response { StatusCode = HttpStatusCode . Created } ;
var series = Mapper . Map < SeriesResource , Core . Tv . Series > ( seriesResource ) ;
_seriesService . AddSeries ( series ) ;
return Mapper . Map < Core . Tv . Series , SeriesResource > ( series ) ;
}
private Response UpdateSeries ( )
private SeriesResource UpdateSeries ( SeriesResource seriesResource )
{
var request = Request . Body . FromJson < SeriesResource > ( ) ;
var series = _seriesService . GetSeries ( request . Id ) ;
var series = _seriesService . GetSeries ( seriesResource . Id ) ;
series . Monitored = request . Monitored ;
series . SeasonFolder = request . SeasonFolder ;
series . QualityProfileId = request . QualityProfileId ;
series . Monitored = seriesResource . Monitored ;
series . SeasonFolder = seriesResource . SeasonFolder ;
series . QualityProfileId = seriesResource . QualityProfileId ;
//Todo: Do we want to force a scan when this path changes? Can we use events instead?
series . RootFolderId = request . RootFolderId ;
series . FolderName = request . FolderName ;
series . RootFolderId = seriesResource . RootFolderId ;
series . FolderName = seriesResource . FolderName ;
series . BacklogSetting = ( BacklogSettingType ) request . BacklogSetting ;
series . BacklogSetting = ( BacklogSettingType ) seriesResource . BacklogSetting ;
if ( ! String . IsNullOrWhiteSpace ( request . CustomStartDate ) )
series . CustomStartDate = DateTime . Parse ( request . CustomStartDate , null , DateTimeStyles . RoundtripKind ) ;
if ( ! String . IsNullOrWhiteSpace ( seriesResource . CustomStartDate ) )
series . CustomStartDate = DateTime . Parse ( seriesResource . CustomStartDate , null , DateTimeStyles . RoundtripKind ) ;
else
series . CustomStartDate = null ;
_seriesService . UpdateSeries ( series ) ;
return request. AsResponse ( ) ;
return Mapper. Map < Core . Tv . Series , SeriesResource > ( series ) ;
}
private Response DeleteSeries ( int id )
private void DeleteSeries ( int id )
{
var deleteFiles = Convert . ToBoolean ( Request . Headers [ "deleteFiles" ] . FirstOrDefault ( ) ) ;
_seriesService . DeleteSeries ( id , deleteFiles ) ;
return new Response { StatusCode = HttpStatusCode . OK } ;
}
}