Person resource

This resource introduces two new features: the use of the HTTP delete method and a namespace.

To use the HTTP delete method, just implement the DeleteResource trait:

object PersonController extends RestReadController[Color]
                           with ResourceCreate
                           with ResourceWrite
                           with ResourceDelete
...

As writing controllers with create, read, write and delete is really common, there is a shortcut trait: RestCrudController.

So, the PersonController definition can be rewritten as:

object PersonController extends RestCrudController[Person] {

...

  def delete(person: Person) = Action {
    PersonContainer.delete(person)
    NoContent
  }
...

Note that the delete method should return HTTP code 201: NoContent

This controller should now be added to our application api in controllers/Application.scala .

Instead of adding it directly to the api router as was the case with the ColorController, we will group all crm controllers under the same namespace /api/crm .

This is done by creating a new RestApiRouter instance and adding this one to the api under the crm route:

...

val crmApi = RestApiRouter()
  .add(PersonController)

val api = RestApiRouter()
  .add(new RestResourceRouter(ColorController))
  .add("crm" -> crmApi)

More controllers will now be added in the crm namespace.