public IEnumerable<PostModel> GetPosts(int tagID,
[ValueProvider(typeof(HeaderValueProviderFactory<string>))]string sessionKey)
{
var tagPosts = this.PerformOperation(() =>
{
UserValidator.ValidateSessionKey(sessionKey);
var context = new BloggingSystemContext();
using (context)
{
var loggedUserEntity = context.Users.FirstOrDefault<User>(u => u.SessionKey == sessionKey);
if (loggedUserEntity == null)
{
throw new InvalidOperationException("Invalid user or pasword!");
}
var tagEntity = context.Tags.Find(tagID);
if (tagEntity == null)
{
var errorResponse = this.Request.CreateErrorResponse(
HttpStatusCode.NotFound, "Tag with provided ID not found!");
throw new HttpResponseException(errorResponse);
}
var tagPostModels = new List<PostModel>();
var tagPostEntities = tagEntity.Posts.OrderByDescending(p => p.PostDate);
foreach (var tagPostEntity in tagPostEntities)
{
tagPostModels.Add(PostsMapper.ToModel(tagPostEntity));
}
return tagPostModels;
}
});
return tagPosts;
}
}