Skip to content

Instantly share code, notes, and snippets.

@danbarua
Created May 23, 2012 16:28
Show Gist options
  • Save danbarua/2776222 to your computer and use it in GitHub Desktop.
Save danbarua/2776222 to your computer and use it in GitHub Desktop.
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