Mapping mainly

pull/1425/head
Jamie.Rees 8 years ago
parent 3f62d0d5ec
commit 41f03b46f1

@ -2,6 +2,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using AutoMapper;
using Ombi.Api.TheMovieDb;
using Ombi.Api.TheMovieDb.Models;
using Ombi.Core.Models.Requests; using Ombi.Core.Models.Requests;
using Ombi.Core.Models.Search; using Ombi.Core.Models.Search;
using Ombi.Core.Requests.Models; using Ombi.Core.Requests.Models;
@ -15,13 +18,15 @@ namespace Ombi.Core.Engine
public class MovieEngine : IMovieEngine public class MovieEngine : IMovieEngine
{ {
public MovieEngine(IRequestService service, IMovieDbApi movApi) public MovieEngine(IRequestService service, IMovieDbApi movApi, IMapper mapper)
{ {
RequestService = service; RequestService = service;
MovieApi = movApi; MovieApi = movApi;
Mapper = mapper;
} }
private IRequestService RequestService { get; } private IRequestService RequestService { get; }
private IMovieDbApi MovieApi { get; } private IMovieDbApi MovieApi { get; }
private IMapper Mapper { get; }
public async Task<IEnumerable<SearchMovieViewModel>> LookupImdbInformation(IEnumerable<SearchMovieViewModel> movies) public async Task<IEnumerable<SearchMovieViewModel>> LookupImdbInformation(IEnumerable<SearchMovieViewModel> movies)
{ {
@ -31,27 +36,8 @@ namespace Ombi.Core.Engine
{ {
var movieInfo = await MovieApi.GetMovieInformationWithVideo(m.Id); var movieInfo = await MovieApi.GetMovieInformationWithVideo(m.Id);
var viewMovie = new SearchMovieViewModel var viewMovie = Mapper.Map<SearchMovieViewModel>(movieInfo);
{
Adult = movieInfo.adult,
BackdropPath = movieInfo.backdrop_path,
Id = movieInfo.id,
OriginalLanguage = movieInfo.original_language,
OriginalTitle = movieInfo.original_title,
Overview = movieInfo.overview,
Popularity = movieInfo.popularity,
PosterPath = movieInfo.poster_path,
ReleaseDate =
string.IsNullOrEmpty(movieInfo.release_date)
? DateTime.MinValue
: DateTime.Parse(movieInfo.release_date),
Title = movieInfo.title,
Video = movieInfo.video,
VoteAverage = movieInfo.vote_average,
VoteCount = movieInfo.vote_count,
ImdbId = movieInfo?.imdb_id,
Homepage = movieInfo?.homepage
};
retVal.Add(viewMovie); retVal.Add(viewMovie);
// TODO needs to be careful about this, it's adding extra time to search... // TODO needs to be careful about this, it's adding extra time to search...
// https://www.themoviedb.org/talk/5807f4cdc3a36812160041f2 // https://www.themoviedb.org/talk/5807f4cdc3a36812160041f2
@ -62,9 +48,9 @@ namespace Ombi.Core.Engine
//viewMovie.Trailer = string.IsNullOrEmpty(videoId) //viewMovie.Trailer = string.IsNullOrEmpty(videoId)
// ? string.Empty // ? string.Empty
// : $"https://www.youtube.com/watch?v={videoId}"; // : $"https://www.youtube.com/watch?v={videoId}";
if (dbMovies.ContainsKey(movieInfo.id) /*&& canSee*/) // compare to the requests db if (dbMovies.ContainsKey(movieInfo.Id) /*&& canSee*/) // compare to the requests db
{ {
var dbm = dbMovies[movieInfo.id]; var dbm = dbMovies[movieInfo.Id];
viewMovie.Requested = true; viewMovie.Requested = true;
viewMovie.Approved = dbm.Approved; viewMovie.Approved = dbm.Approved;
@ -76,59 +62,54 @@ namespace Ombi.Core.Engine
public async Task<IEnumerable<SearchMovieViewModel>> ProcessMovieSearch(string search) public async Task<IEnumerable<SearchMovieViewModel>> ProcessMovieSearch(string search)
{ {
var api = new TheMovieDbApi.TheMovieDbApi(); var result = await MovieApi.SearchMovie(search);
var result = await api.SearchMovie(search);
if (result != null) if (result != null)
{ {
return await TransformMovieResultsToResponse(result.results); return await TransformMovieResultsToResponse(result);
} }
return null; return null;
} }
public async Task<IEnumerable<SearchMovieViewModel>> PopularMovies() public async Task<IEnumerable<SearchMovieViewModel>> PopularMovies()
{ {
var api = new TheMovieDbApi.TheMovieDbApi(); var result = await MovieApi.PopularMovies();
var result = await api.PopularMovies();
if (result != null) if (result != null)
{ {
return await TransformMovieResultsToResponse(result.results); return await TransformMovieResultsToResponse(result);
} }
return null; return null;
} }
public async Task<IEnumerable<SearchMovieViewModel>> TopRatedMovies() public async Task<IEnumerable<SearchMovieViewModel>> TopRatedMovies()
{ {
var api = new TheMovieDbApi.TheMovieDbApi(); var result = await MovieApi.TopRated();
var result = await api.TopRated();
if (result != null) if (result != null)
{ {
return await TransformMovieResultsToResponse(result.results); return await TransformMovieResultsToResponse(result);
} }
return null; return null;
} }
public async Task<IEnumerable<SearchMovieViewModel>> UpcomingMovies() public async Task<IEnumerable<SearchMovieViewModel>> UpcomingMovies()
{ {
var api = new TheMovieDbApi.TheMovieDbApi(); var result = await MovieApi.Upcoming();
var result = await api.Upcoming();
if (result != null) if (result != null)
{ {
return await TransformMovieResultsToResponse(result.results); return await TransformMovieResultsToResponse(result);
} }
return null; return null;
} }
public async Task<IEnumerable<SearchMovieViewModel>> NowPlayingMovies() public async Task<IEnumerable<SearchMovieViewModel>> NowPlayingMovies()
{ {
var api = new TheMovieDbApi.TheMovieDbApi(); var result = await MovieApi.NowPlaying();
var result = await api.NowPlaying();
if (result != null) if (result != null)
{ {
return await TransformMovieResultsToResponse(result.results); return await TransformMovieResultsToResponse(result);
} }
return null; return null;
} }
private async Task<List<SearchMovieViewModel>> TransformMovieResultsToResponse(IEnumerable<SearchResult> movies) private async Task<List<SearchMovieViewModel>> TransformMovieResultsToResponse(IEnumerable<MovieSearchResult> movies)
{ {
await Task.Yield(); await Task.Yield();
var viewMovies = new List<SearchMovieViewModel>(); var viewMovies = new List<SearchMovieViewModel>();
@ -136,22 +117,8 @@ namespace Ombi.Core.Engine
Dictionary<int, RequestModel> dbMovies = await RequestedMovies(); Dictionary<int, RequestModel> dbMovies = await RequestedMovies();
foreach (var movie in movies) foreach (var movie in movies)
{ {
var viewMovie = new SearchMovieViewModel var viewMovie = Mapper.Map<SearchMovieViewModel>(movie);
{
Adult = movie.adult,
BackdropPath = movie.backdrop_path,
Id = movie.id,
OriginalLanguage = movie.original_language,
OriginalTitle = movie.original_title,
Overview = movie.overview,
Popularity = movie.popularity,
PosterPath = movie.poster_path,
ReleaseDate = string.IsNullOrEmpty(movie.release_date) ? DateTime.MinValue : DateTime.Parse(movie.release_date),
Title = movie.title,
Video = movie.video,
VoteAverage = movie.vote_average,
VoteCount = movie.vote_count
};
viewMovies.Add(viewMovie); viewMovies.Add(viewMovie);
@ -186,9 +153,9 @@ namespace Ombi.Core.Engine
// viewMovie.Available = true; // viewMovie.Available = true;
// } // }
// } // }
if (dbMovies.ContainsKey(movie.id) /*&& canSee*/) // compare to the requests db if (dbMovies.ContainsKey(movie.Id) /*&& canSee*/) // compare to the requests db
{ {
var dbm = dbMovies[movie.id]; var dbm = dbMovies[movie.Id];
viewMovie.Requested = true; viewMovie.Requested = true;
viewMovie.Approved = dbm.Approved; viewMovie.Approved = dbm.Approved;

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Ombi.Api.TheMovieDb;
using Ombi.Core.Models.Requests; using Ombi.Core.Models.Requests;
using Ombi.Core.Models.Search; using Ombi.Core.Models.Search;
using Ombi.Core.Requests.Models; using Ombi.Core.Requests.Models;
@ -38,7 +39,7 @@ namespace Ombi.Core.Engine
//}); //});
} }
var fullMovieName = var fullMovieName =
$"{movieInfo.title}{(!string.IsNullOrEmpty(movieInfo.release_date) ? $" ({DateTime.Parse(movieInfo.release_date).Year})" : string.Empty)}"; $"{movieInfo.Title}{(!string.IsNullOrEmpty(movieInfo.ReleaseDate) ? $" ({DateTime.Parse(movieInfo.ReleaseDate).Year})" : string.Empty)}";
var existingRequest = await RequestService.CheckRequestAsync(model.Id); var existingRequest = await RequestService.CheckRequestAsync(model.Id);
if (existingRequest != null) if (existingRequest != null)
@ -95,14 +96,14 @@ namespace Ombi.Core.Engine
var requestModel = new RequestModel var requestModel = new RequestModel
{ {
ProviderId = movieInfo.id, ProviderId = movieInfo.Id,
Type = RequestType.Movie, Type = RequestType.Movie,
Overview = movieInfo.overview, Overview = movieInfo.Overview,
ImdbId = movieInfo.imdb_id, ImdbId = movieInfo.ImdbId,
PosterPath = movieInfo.poster_path, PosterPath = movieInfo.PosterPath,
Title = movieInfo.title, Title = movieInfo.Title,
ReleaseDate = !string.IsNullOrEmpty(movieInfo.release_date) ? DateTime.Parse(movieInfo.release_date) : DateTime.MinValue, ReleaseDate = !string.IsNullOrEmpty(movieInfo.ReleaseDate) ? DateTime.Parse(movieInfo.ReleaseDate) : DateTime.MinValue,
Status = movieInfo.status, Status = movieInfo.Status,
RequestedDate = DateTime.UtcNow, RequestedDate = DateTime.UtcNow,
Approved = false, Approved = false,
//RequestedUsers = new List<string> { Username }, //RequestedUsers = new List<string> { Username },

@ -7,12 +7,14 @@ using Microsoft.Extensions.DependencyInjection;
using Ombi.Api.Emby; using Ombi.Api.Emby;
using Ombi.Api.Plex; using Ombi.Api.Plex;
using Ombi.Api.Sonarr; using Ombi.Api.Sonarr;
using Ombi.Api.TheMovieDb;
using Ombi.Core; using Ombi.Core;
using Ombi.Core.Engine; using Ombi.Core.Engine;
using Ombi.Core.IdentityResolver; using Ombi.Core.IdentityResolver;
using Ombi.Core.Models.Requests; using Ombi.Core.Models.Requests;
using Ombi.Core.Requests.Models; using Ombi.Core.Requests.Models;
using Ombi.Core.Settings; using Ombi.Core.Settings;
using Ombi.Schedule;
using Ombi.Store.Context; using Ombi.Store.Context;
using Ombi.Store.Repository; using Ombi.Store.Repository;
using Ombi.TheMovieDbApi; using Ombi.TheMovieDbApi;
@ -29,6 +31,7 @@ namespace Ombi.DependencyInjection
services.RegisterServices(); services.RegisterServices();
services.RegisterStore(); services.RegisterStore();
services.RegisterIdentity(); services.RegisterIdentity();
services.RegisterJobs();
return services; return services;
} }
@ -42,7 +45,7 @@ namespace Ombi.DependencyInjection
public static IServiceCollection RegisterApi(this IServiceCollection services) public static IServiceCollection RegisterApi(this IServiceCollection services)
{ {
services.AddTransient<IMovieDbApi, TheMovieDbApi.TheMovieDbApi>(); services.AddTransient<IMovieDbApi, Api.TheMovieDb.TheMovieDbApi>();
services.AddTransient<IPlexApi, PlexApi>(); services.AddTransient<IPlexApi, PlexApi>();
services.AddTransient<IEmbyApi, EmbyApi>(); services.AddTransient<IEmbyApi, EmbyApi>();
services.AddTransient<ISonarrApi, SonarrApi>(); services.AddTransient<ISonarrApi, SonarrApi>();
@ -68,6 +71,13 @@ namespace Ombi.DependencyInjection
return services; return services;
} }
public static IServiceCollection RegisterJobs(this IServiceCollection services)
{
services.AddTransient<ITestJob, TestJob>();
return services;
}
public static IServiceCollection RegisterIdentity(this IServiceCollection services) public static IServiceCollection RegisterIdentity(this IServiceCollection services)
{ {
services.AddTransient<IUserIdentityManager, UserIdentityManager>(); services.AddTransient<IUserIdentityManager, UserIdentityManager>();

@ -15,6 +15,7 @@
<ProjectReference Include="..\Ombi.Api.Plex\Ombi.Api.Plex.csproj" /> <ProjectReference Include="..\Ombi.Api.Plex\Ombi.Api.Plex.csproj" />
<ProjectReference Include="..\Ombi.Api.Sonarr\Ombi.Api.Sonarr.csproj" /> <ProjectReference Include="..\Ombi.Api.Sonarr\Ombi.Api.Sonarr.csproj" />
<ProjectReference Include="..\Ombi.Core\Ombi.Core.csproj" /> <ProjectReference Include="..\Ombi.Core\Ombi.Core.csproj" />
<ProjectReference Include="..\Ombi.Schedule\Ombi.Schedule.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -0,0 +1,26 @@
using AutoMapper;
using System;
namespace Ombi.Mapping
{
public class StringToDateTimeConverter : ITypeConverter<string, DateTime>
{
public DateTime Convert(string source, DateTime destination, ResolutionContext context)
{
DateTime dateTime;
if (string.IsNullOrEmpty(source))
{
return default(DateTime);
}
if (DateTime.TryParse(source.ToString(), out dateTime))
{
return dateTime;
}
return default(DateTime);
}
}
}

@ -6,6 +6,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="AutoMapper" Version="6.0.2" /> <PackageReference Include="AutoMapper" Version="6.0.2" />
<PackageReference Include="AutoMapper.Collection" Version="3.0.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="2.0.1" /> <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="2.0.1" />
</ItemGroup> </ItemGroup>

@ -1,7 +1,11 @@
using System; using System;
using System.Collections.Generic;
using AutoMapper; using AutoMapper;
using Ombi.Api.TheMovieDb.Models;
using Ombi.Core.Models; using Ombi.Core.Models;
using Ombi.Core.Models.Search;
using Ombi.Store.Entities; using Ombi.Store.Entities;
using Ombi.TheMovieDbApi.Models;
namespace Ombi.Mapping namespace Ombi.Mapping
{ {
@ -9,7 +13,49 @@ namespace Ombi.Mapping
{ {
public OmbiProfile() public OmbiProfile()
{ {
CreateMap<User, UserDto>().ReverseMap(); CreateMap<User, UserDto>().ReverseMap();
CreateMap<string, DateTime>().ConvertUsing<StringToDateTimeConverter>();
CreateMap<SearchResult, MovieSearchResult>()
.ForMember(dest => dest.Adult, opts => opts.MapFrom(src => src.adult))
.ForMember(dest => dest.BackdropPath, opts => opts.MapFrom(src => src.backdrop_path))
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => src.id))
.ForMember(dest => dest.OriginalLanguage, opts => opts.MapFrom(src => src.original_language))
.ForMember(dest => dest.OriginalTitle, opts => opts.MapFrom(src => src.original_title))
.ForMember(dest => dest.Overview, opts => opts.MapFrom(src => src.overview))
.ForMember(dest => dest.Popularity, opts => opts.MapFrom(src => src.popularity))
.ForMember(dest => dest.PosterPath, opts => opts.MapFrom(src => src.poster_path))
.ForMember(dest => dest.ReleaseDate, opts => opts.MapFrom(src => src.release_date))
.ForMember(dest => dest.Title, opts => opts.MapFrom(src => src.title))
.ForMember(dest => dest.Video, opts => opts.MapFrom(src => src.video))
.ForMember(dest => dest.VoteAverage, opts => opts.MapFrom(src => src.vote_average))
.ForMember(dest => dest.VoteCount, opts => opts.MapFrom(src => src.vote_count));
CreateMap<MovieResponse, MovieResponseDto>()
.ForMember(dest => dest.Adult, opts => opts.MapFrom(src => src.adult))
.ForMember(dest => dest.BackdropPath, opts => opts.MapFrom(src => src.backdrop_path))
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => src.id))
.ForMember(dest => dest.OriginalLanguage, opts => opts.MapFrom(src => src.original_language))
.ForMember(dest => dest.OriginalTitle, opts => opts.MapFrom(src => src.original_title))
.ForMember(dest => dest.Overview, opts => opts.MapFrom(src => src.overview))
.ForMember(dest => dest.Popularity, opts => opts.MapFrom(src => src.popularity))
.ForMember(dest => dest.PosterPath, opts => opts.MapFrom(src => src.poster_path))
.ForMember(dest => dest.ReleaseDate, opts => opts.MapFrom(src => src.release_date))
.ForMember(dest => dest.Title, opts => opts.MapFrom(src => src.title))
.ForMember(dest => dest.Video, opts => opts.MapFrom(src => src.video))
.ForMember(dest => dest.VoteAverage, opts => opts.MapFrom(src => src.vote_average))
.ForMember(dest => dest.ImdbId, opts => opts.MapFrom(src => src.imdb_id))
.ForMember(dest => dest.Homepage, opts => opts.MapFrom(src => src.homepage))
.ForMember(dest => dest.Runtime, opts => opts.MapFrom(src => src.runtime))
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => src.status))
.ForMember(dest => dest.Tagline, opts => opts.MapFrom(src => src.tagline))
.ForMember(dest => dest.VoteCount, opts => opts.MapFrom(src => src.vote_count));
CreateMap<Genre, GenreDto>();
CreateMap<MovieSearchResult, SearchMovieViewModel>().ReverseMap();
} }
} }
} }

@ -1,8 +0,0 @@
using System;
namespace Ombi.Schedule
{
public class Class1
{
}
}

@ -0,0 +1,11 @@
using Hangfire.RecurringJobExtensions;
using Hangfire.Server;
namespace Ombi.Schedule
{
public interface ITestJob
{
[RecurringJob("*/1 * * * *")]
void Test(PerformContext context);
}
}

@ -0,0 +1,20 @@
using System;
using Hangfire;
using Microsoft.Extensions.DependencyInjection;
namespace Ombi.Schedule
{
public class IoCJobActivator : JobActivator
{
private readonly IServiceProvider _container;
public IoCJobActivator(IServiceProvider container)
{
_container = container;
}
public override object ActivateJob(Type type)
{
return _container.GetService(type);
}
}
}

@ -8,6 +8,7 @@
<PackageReference Include="Hangfire" Version="1.6.12" /> <PackageReference Include="Hangfire" Version="1.6.12" />
<PackageReference Include="Hangfire.AspNetCore" Version="1.6.12" /> <PackageReference Include="Hangfire.AspNetCore" Version="1.6.12" />
<PackageReference Include="Hangfire.MemoryStorage.Core" Version="1.4.0" /> <PackageReference Include="Hangfire.MemoryStorage.Core" Version="1.4.0" />
<PackageReference Include="Hangfire.RecurringJobExtensions" Version="1.1.6" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -0,0 +1,17 @@
using System;
using System.Diagnostics;
using Hangfire;
using Hangfire.RecurringJobExtensions;
using Hangfire.Server;
namespace Ombi.Schedule
{
public class TestJob : ITestJob
{
[RecurringJob("*/1 * * * *")]
public void Test(PerformContext context)
{
Debug.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} TestJob1 Running ...");
}
}
}

@ -1,17 +1,18 @@
using System.Threading.Tasks; using System.Collections.Generic;
using Ombi.Api; using System.Threading.Tasks;
using Ombi.Api.TheMovieDb.Models;
using Ombi.TheMovieDbApi.Models; using Ombi.TheMovieDbApi.Models;
namespace Ombi.TheMovieDbApi namespace Ombi.Api.TheMovieDb
{ {
public interface IMovieDbApi public interface IMovieDbApi
{ {
Task<MovieResponse> GetMovieInformation(int movieId); Task<MovieResponseDto> GetMovieInformation(int movieId);
Task<MovieResponse> GetMovieInformationWithVideo(int movieId); Task<MovieResponseDto> GetMovieInformationWithVideo(int movieId);
Task<TheMovieDbContainer<SearchResult>> NowPlaying(); Task<List<MovieSearchResult>> NowPlaying();
Task<TheMovieDbContainer<SearchResult>> PopularMovies(); Task<List<MovieSearchResult>> PopularMovies();
Task<TheMovieDbContainer<SearchResult>> SearchMovie(string searchTerm); Task<List<MovieSearchResult>> SearchMovie(string searchTerm);
Task<TheMovieDbContainer<SearchResult>> TopRated(); Task<List<MovieSearchResult>> TopRated();
Task<TheMovieDbContainer<SearchResult>> Upcoming(); Task<List<MovieSearchResult>> Upcoming();
} }
} }

@ -0,0 +1,8 @@
namespace Ombi.Api.TheMovieDb.Models
{
public class GenreDto
{
public int Id { get; set; }
public string Name { get; set; }
}
}

@ -0,0 +1,27 @@
namespace Ombi.Api.TheMovieDb.Models
{
public class MovieResponseDto
{
public bool Adult { get; set; }
public string BackdropPath { get; set; }
public int Budget { get; set; }
public GenreDto[] Genres { get; set; }
public string Homepage { get; set; }
public int Id { get; set; }
public string ImdbId { get; set; }
public string OriginalLanguage { get; set; }
public string OriginalTitle { get; set; }
public string Overview { get; set; }
public float Popularity { get; set; }
public string PosterPath { get; set; }
public string ReleaseDate { get; set; }
public int Revenue { get; set; }
public int Runtime { get; set; }
public string Status { get; set; }
public string Tagline { get; set; }
public string Title { get; set; }
public bool Video { get; set; }
public float VoteAverage { get; set; }
public int VoteCount { get; set; }
}
}

@ -0,0 +1,20 @@
namespace Ombi.Api.TheMovieDb.Models
{
public class MovieSearchResult
{
public string PosterPath { get; set; }
public bool Adult { get; set; }
public string Overview { get; set; }
public string ReleaseDate { get; set; }
public int?[] GenreIds { get; set; }
public int Id { get; set; }
public string OriginalTitle { get; set; }
public string OriginalLanguage { get; set; }
public string Title { get; set; }
public string BackdropPath { get; set; }
public float Popularity { get; set; }
public int VoteCount { get; set; }
public bool Video { get; set; }
public float VoteAverage { get; set; }
}
}

@ -10,4 +10,10 @@
<ProjectReference Include="..\Ombi.Api\Ombi.Api.csproj" /> <ProjectReference Include="..\Ombi.Api\Ombi.Api.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="AutoMapper">
<HintPath>..\..\..\..\..\.nuget\packages\automapper\6.0.2\lib\netstandard1.3\AutoMapper.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

@ -1,72 +1,83 @@
using System.Net.Http; using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using Ombi.Api; using AutoMapper;
using Ombi.Api.TheMovieDb.Models;
using Ombi.TheMovieDbApi.Models; using Ombi.TheMovieDbApi.Models;
namespace Ombi.TheMovieDbApi namespace Ombi.Api.TheMovieDb
{ {
public class TheMovieDbApi : IMovieDbApi public class TheMovieDbApi : IMovieDbApi
{ {
public TheMovieDbApi() public TheMovieDbApi(IMapper mapper)
{ {
Api = new Api.Api(); Api = new Ombi.Api.Api();
Mapper = mapper;
} }
private IMapper Mapper { get; }
private const string ApiToken = "b8eabaf5608b88d0298aa189dd90bf00"; private const string ApiToken = "b8eabaf5608b88d0298aa189dd90bf00";
private static readonly string BaseUri ="http://api.themoviedb.org/3/"; private static readonly string BaseUri ="http://api.themoviedb.org/3/";
private Api.Api Api { get; } private Ombi.Api.Api Api { get; }
public async Task<MovieResponse> GetMovieInformation(int movieId) public async Task<MovieResponseDto> GetMovieInformation(int movieId)
{ {
var request = new Request($"movie/{movieId}", BaseUri, HttpMethod.Get); var request = new Request($"movie/{movieId}", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken); request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
return await Api.Request<MovieResponse>(request); var result = await Api.Request<MovieResponse>(request);
return Mapper.Map<MovieResponseDto>(result);
} }
public async Task<MovieResponse> GetMovieInformationWithVideo(int movieId) public async Task<MovieResponseDto> GetMovieInformationWithVideo(int movieId)
{ {
var request = new Request($"movie/{movieId}", BaseUri, HttpMethod.Get); var request = new Request($"movie/{movieId}", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken); request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
request.FullUri = request.FullUri.AddQueryParameter("append_to_response", "videos"); request.FullUri = request.FullUri.AddQueryParameter("append_to_response", "videos");
return await Api.Request<MovieResponse>(request); var result = await Api.Request<MovieResponse>(request);
return Mapper.Map<MovieResponseDto>(result);
} }
public async Task<TheMovieDbContainer<SearchResult>> SearchMovie(string searchTerm) public async Task<List<MovieSearchResult>> SearchMovie(string searchTerm)
{ {
var request = new Request($"search/movie", BaseUri, HttpMethod.Get); var request = new Request($"search/movie", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken); request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
request.FullUri = request.FullUri.AddQueryParameter("query", searchTerm); request.FullUri = request.FullUri.AddQueryParameter("query", searchTerm);
return await Api.Request<TheMovieDbContainer<SearchResult>>(request); var result = await Api.Request<TheMovieDbContainer<SearchResult>>(request);
return Mapper.Map<List<MovieSearchResult>>(result.results);
} }
public async Task<TheMovieDbContainer<SearchResult>> PopularMovies() public async Task<List<MovieSearchResult>> PopularMovies()
{ {
var request = new Request($"movie/popular", BaseUri, HttpMethod.Get); var request = new Request($"movie/popular", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken); request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
var result = await Api.Request<TheMovieDbContainer<SearchResult>>(request);
return await Api.Request<TheMovieDbContainer<SearchResult>>(request); return Mapper.Map<List<MovieSearchResult>>(result.results);
} }
public async Task<TheMovieDbContainer<SearchResult>> TopRated() public async Task<List<MovieSearchResult>> TopRated()
{ {
var request = new Request($"movie/top_rated", BaseUri, HttpMethod.Get); var request = new Request($"movie/top_rated", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken); request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
return await Api.Request<TheMovieDbContainer<SearchResult>>(request); var result = await Api.Request<TheMovieDbContainer<SearchResult>>(request);
return Mapper.Map<List<MovieSearchResult>>(result.results);
} }
public async Task<TheMovieDbContainer<SearchResult>> Upcoming() public async Task<List<MovieSearchResult>> Upcoming()
{ {
var request = new Request($"movie/upcoming", BaseUri, HttpMethod.Get); var request = new Request($"movie/upcoming", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken); request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
return await Api.Request<TheMovieDbContainer<SearchResult>>(request); var result = await Api.Request<TheMovieDbContainer<SearchResult>>(request);
return Mapper.Map<List<MovieSearchResult>>(result.results);
} }
public async Task<TheMovieDbContainer<SearchResult>> NowPlaying() public async Task<List<MovieSearchResult>> NowPlaying()
{ {
var request = new Request($"movie/now_playing", BaseUri, HttpMethod.Get); var request = new Request($"movie/now_playing", BaseUri, HttpMethod.Get);
request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken); request.FullUri = request.FullUri.AddQueryParameter("api_key", ApiToken);
return await Api.Request<TheMovieDbContainer<SearchResult>>(request); var result = await Api.Request<TheMovieDbContainer<SearchResult>>(request);
return Mapper.Map<List<MovieSearchResult>>(result.results);
} }
} }

@ -20,6 +20,7 @@
<PackageReference Include="AutoMapper" Version="6.0.2" /> <PackageReference Include="AutoMapper" Version="6.0.2" />
<PackageReference Include="Hangfire.AspNetCore" Version="1.6.12" /> <PackageReference Include="Hangfire.AspNetCore" Version="1.6.12" />
<PackageReference Include="Hangfire.MemoryStorage.Core" Version="1.4.0" /> <PackageReference Include="Hangfire.MemoryStorage.Core" Version="1.4.0" />
<PackageReference Include="Hangfire.RecurringJobExtensions" Version="1.1.6" />
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" /> <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="1.1.1" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" /> <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
@ -40,6 +41,7 @@
<ProjectReference Include="..\Ombi.Core\Ombi.Core.csproj" /> <ProjectReference Include="..\Ombi.Core\Ombi.Core.csproj" />
<ProjectReference Include="..\Ombi.DependencyInjection\Ombi.DependencyInjection.csproj" /> <ProjectReference Include="..\Ombi.DependencyInjection\Ombi.DependencyInjection.csproj" />
<ProjectReference Include="..\Ombi.Mapping\Ombi.Mapping.csproj" /> <ProjectReference Include="..\Ombi.Mapping\Ombi.Mapping.csproj" />
<ProjectReference Include="..\Ombi.Schedule\Ombi.Schedule.csproj" />
<ProjectReference Include="..\Ombi.TheMovieDbApi\Ombi.Api.TheMovieDb.csproj" /> <ProjectReference Include="..\Ombi.TheMovieDbApi\Ombi.Api.TheMovieDb.csproj" />
</ItemGroup> </ItemGroup>

@ -1,6 +1,8 @@
using AutoMapper; using AutoMapper;
using AutoMapper.EquivalencyExpression;
using Hangfire; using Hangfire;
using Hangfire.MemoryStorage; using Hangfire.MemoryStorage;
using Hangfire.RecurringJobExtensions;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.StaticFiles; using Microsoft.AspNetCore.StaticFiles;
@ -9,6 +11,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Ombi.DependencyInjection; using Ombi.DependencyInjection;
using Ombi.Mapping; using Ombi.Mapping;
using Ombi.Schedule;
namespace Ombi namespace Ombi
{ {
@ -33,10 +36,20 @@ namespace Ombi
// Add framework services. // Add framework services.
services.AddMvc(); services.AddMvc();
services.AddOmbiMappingProfile(); services.AddOmbiMappingProfile();
services.AddAutoMapper(); services.AddAutoMapper(expression =>
{
expression.AddCollectionMappers();
});
services.RegisterDependencies(); // Ioc and EF services.RegisterDependencies(); // Ioc and EF
services.AddHangfire(x => x.UseMemoryStorage(new MemoryStorageOptions()));
services.AddHangfire(x =>
{
x.UseMemoryStorage(new MemoryStorageOptions());
//using RecurringJobAttribute to build RecurringJob automatically.
x.UseRecurringJob(typeof(ITestJob));
//x.UseActivator(new IoCJobActivator(services.BuildServiceProvider()));
});
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
@ -54,6 +67,7 @@ namespace Ombi
app.UseExceptionHandler("/Home/Error"); app.UseExceptionHandler("/Home/Error");
} }
app.UseHangfireServer(); app.UseHangfireServer();
app.UseHangfireDashboard(); app.UseHangfireDashboard();

Loading…
Cancel
Save