Created
May 23, 2012 16:28
-
-
Save danbarua/2776222 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections.Generic; | |
using System.Linq; | |
using NHibernate.Criterion; | |
using ServiceStack.Common; | |
using ServiceStack.NH.Core.Domain; | |
using ServiceStack.ServiceInterface; | |
using ServiceStack.ServiceInterface.ServiceModel; | |
namespace ServiceStack.NH.Web.App_Start | |
{ | |
public class MovieDto | |
{ | |
public int? Id { get; set; } | |
public string Title { get; set; } | |
public int? DirectorId { get; set; } | |
public string DirectorName { get; set; } | |
public string Genre { get; set; } | |
} | |
public class Movies | |
{ | |
public string Genre { get; set; } | |
public MovieDto Movie { get; set; } | |
} | |
public class MoviesResponse : IHasResponseStatus | |
{ | |
public MoviesResponse() | |
{ | |
Movies = new List<MovieDto>(); | |
ResponseStatus = new ResponseStatus(); | |
} | |
public IList<MovieDto> Movies { get; set; } | |
public MovieDto Movie { get; set; } | |
public ResponseStatus ResponseStatus { get; set; } | |
} | |
public class MoviesService : RestServiceBase<Movies> | |
{ | |
public NHibernate.ISession NhSession { get; set; } | |
/// <summary> | |
/// GET /movies | |
/// GET /movies/genres/{Genre} | |
/// </summary> | |
public override object OnGet(Movies request) | |
{ | |
IList<MovieDto> movies = new List<MovieDto>(); | |
if (!request.Genre.IsNullOrEmpty()) | |
{ | |
movies = NhSession.QueryOver<Movie>() | |
.WhereRestrictionOn(x => x.Genre) | |
.IsInsensitiveLike(request.Genre, MatchMode.Start).List().Select( | |
AutoMapper.Mapper.Map<Movie, MovieDto>).ToList(); | |
} | |
else | |
{ | |
movies = NhSession.QueryOver<Movie>().List() | |
.Select(AutoMapper.Mapper.Map<Movie, MovieDto>).ToList(); | |
} | |
var response = new MoviesResponse | |
{ | |
Movies = movies | |
}; | |
return response; | |
} | |
public override object OnPut(Movies request) | |
{ | |
var movie = request.Movie.TranslateTo<Movie>(); | |
if (request.Movie.DirectorId.HasValue) | |
{ | |
var director = NhSession.Get<Director>(request.Movie.DirectorId); | |
if (director != null) | |
movie.Director = director; | |
} | |
NhSession.Save(movie); | |
var response = new MoviesResponse | |
{ | |
Movie = AutoMapper.Mapper.Map<Movie,MovieDto>(movie) //movie.TranslateTo<MovieDto>() | |
}; | |
return response; | |
} | |
public override object OnPost(Movies request) | |
{ | |
var movie = NhSession.Get<Movie>(request.Movie.Id); | |
movie.PopulateWith(request.Movie); | |
if (request.Movie.DirectorId.HasValue) | |
{ | |
var director = NhSession.Get<Director>(request.Movie.DirectorId); | |
if (director != null) | |
movie.Director = director; | |
} | |
NhSession.Update(movie); | |
NhSession.Flush(); | |
var response = new MoviesResponse | |
{ | |
Movie = AutoMapper.Mapper.Map<Movie, MovieDto>(movie) //movie.TranslateTo<MovieDto>() | |
}; | |
return response; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment