Added more magic to fancy. it now automatically figures our response for PUT and POST based on request ID.

file name sample uses HTTP GET instead of post
This commit is contained in:
kay.one 2013-08-25 22:14:55 -07:00
commit 4188946395
20 changed files with 135 additions and 198 deletions

View file

@ -19,8 +19,8 @@ namespace NzbDrone.Api.REST
private Func<List<TResource>> _getResourceAll;
private Func<PagingResource<TResource>, PagingResource<TResource>> _getResourcePaged;
private Func<TResource> _getResourceSingle;
private Func<TResource, TResource> _createResource;
private Func<TResource, TResource> _updateResource;
private Func<TResource, int> _createResource;
private Action<TResource> _updateResource;
protected ResourceValidator<TResource> PostValidator { get; private set; }
protected ResourceValidator<TResource> PutValidator { get; private set; }
@ -132,7 +132,7 @@ namespace NzbDrone.Api.REST
}
}
protected Func<TResource, TResource> CreateResource
protected Func<TResource, int> CreateResource
{
private get { return _createResource; }
set
@ -140,36 +140,37 @@ namespace NzbDrone.Api.REST
_createResource = value;
Post[ROOT_ROUTE] = options =>
{
var resource = CreateResource(ReadFromRequest());
return resource.AsResponse(HttpStatusCode.Created);
var id = CreateResource(ReadResourceFromRequest());
return GetResourceById(id).AsResponse(HttpStatusCode.Created);
};
}
}
protected Func<TResource, TResource> UpdateResource
protected Action<TResource> UpdateResource
{
private get { return _updateResource; }
set
{
_updateResource = value;
Put[ROOT_ROUTE] = options =>
{
var resource = UpdateResource(ReadFromRequest());
return resource.AsResponse(HttpStatusCode.Accepted);
};
{
var resource = ReadResourceFromRequest();
UpdateResource(resource);
return GetResourceById(resource.Id).AsResponse(HttpStatusCode.Accepted);
};
Put[ID_ROUTE] = options =>
{
var model = ReadFromRequest();
model.Id = options.Id;
var resource = UpdateResource(model);
return resource.AsResponse(HttpStatusCode.Accepted);
var resource = ReadResourceFromRequest();
resource.Id = options.Id;
UpdateResource(resource);
return GetResourceById(resource.Id).AsResponse(HttpStatusCode.Accepted);
};
}
}
private TResource ReadFromRequest()
protected TResource ReadResourceFromRequest()
{
//TODO: handle when request is null
var resource = Request.Body.FromJson<TResource>();