Refactored Archive controller.

Those chained `.orElse{}` statements have been annoying me for a while, hopefully this is easier to read/ understand.

 Also changed most of the tests to actually invoke the controller and test the output instead of hitting the implementation methods.