From 8373e1ce10f430c59a62396d17865fd97bc5ff73 Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Fri, 3 May 2013 19:30:44 -0700 Subject: [PATCH] added support for getting series by slug --- NzbDrone.Api/Series/SeriesModule.cs | 17 +++++++++++++++++ NzbDrone.Core/Tv/SeriesRepository.cs | 5 +++++ NzbDrone.Core/Tv/SeriesService.cs | 8 ++++++++ 3 files changed, 30 insertions(+) diff --git a/NzbDrone.Api/Series/SeriesModule.cs b/NzbDrone.Api/Series/SeriesModule.cs index bc761fa6e..c934ee62d 100644 --- a/NzbDrone.Api/Series/SeriesModule.cs +++ b/NzbDrone.Api/Series/SeriesModule.cs @@ -2,9 +2,11 @@ using System.Collections.Generic; using System.Linq; using FluentValidation; +using Nancy; using NzbDrone.Core.SeriesStats; using NzbDrone.Core.Tv; using NzbDrone.Api.Validation; +using NzbDrone.Api.Extensions; namespace NzbDrone.Api.Series { @@ -25,15 +27,30 @@ public SeriesModule(ISeriesService seriesService, ISeriesStatisticsService serie UpdateResource = UpdateSeries; DeleteResource = DeleteSeries; + Get["/{slug}"] = o => GetSeries((string)o.slug.ToString()); SharedValidator.RuleFor(s => s.RootFolderId).ValidId(); SharedValidator.RuleFor(s => s.QualityProfileId).ValidId(); + + PostValidator.RuleFor(s => s.Title).NotEmpty(); } + private Response GetSeries(string slug) + { + var series = _seriesService.FindBySlug(slug); + + if (series == null) + { + return new NotFoundResponse(); + } + + return series.AsResponse(); + } + private List AllSeries() { var seriesStats = _seriesStatisticsService.SeriesStatistics(); diff --git a/NzbDrone.Core/Tv/SeriesRepository.cs b/NzbDrone.Core/Tv/SeriesRepository.cs index 182722563..7d9c1d3ce 100644 --- a/NzbDrone.Core/Tv/SeriesRepository.cs +++ b/NzbDrone.Core/Tv/SeriesRepository.cs @@ -13,6 +13,7 @@ public interface ISeriesRepository : IBasicRepository Series FindByTitle(string cleanTitle); Series FindByTvdbId(int tvdbId); void SetSeriesType(int seriesId, SeriesTypes seriesTypes); + Series FindBySlug(string slug); } public class SeriesRepository : BasicRepository, ISeriesRepository @@ -47,5 +48,9 @@ public void SetSeriesType(int seriesId, SeriesTypes seriesType) SetFields(new Series { Id = seriesId, SeriesType = seriesType }, s => s.SeriesType); } + public Series FindBySlug(string slug) + { + return Query.SingleOrDefault(c => c.TitleSlug == slug.ToLower()); + } } } \ No newline at end of file diff --git a/NzbDrone.Core/Tv/SeriesService.cs b/NzbDrone.Core/Tv/SeriesService.cs index f51401ca3..379a96268 100644 --- a/NzbDrone.Core/Tv/SeriesService.cs +++ b/NzbDrone.Core/Tv/SeriesService.cs @@ -35,6 +35,7 @@ public interface ISeriesService Series UpdateSeries(Series series); bool SeriesPathExists(string folder); List GetSeriesInList(IEnumerable seriesIds); + Series FindBySlug(string slug); } public class SeriesService : ISeriesService, IHandleAsync @@ -147,6 +148,13 @@ public Series FindByTvdbId(int tvdbId) return _seriesRepository.FindByTvdbId(tvdbId); } + + public Series FindBySlug(string slug) + { + var series = _seriesRepository.FindBySlug(slug); + return series; + } + public Series FindByTitle(string title) { var tvdbId = _sceneMappingService.GetTvDbId(title);