public DeviceModule(ILogger logger, IDeviceRepository deviceRepository, IDocumentSession documentSession) : base("/devices") { Get["/"] = p => { var registeredDevices = deviceRepository.GetAll(); var registeredDeviceDtos = Mapper.Map<IEnumerable<RegisteredDeviceDto>>(registeredDevices); return Response.AsJson(registeredDeviceDtos); }; Post["/"] = p => { var newDeviceRequest = this.Bind<DeviceSetupRequest>(); var registeredDevice = new RegisteredDevice(newDeviceRequest.DeviceName, newDeviceRequest.DeviceType, newDeviceRequest.IpAddress); deviceRepository.Add(registeredDevice); documentSession.SaveChanges(); documentSession.Dispose(); return HttpStatusCode.OK; }; Post["/{name}/{commandRoute}"] = p => { Response response = HttpStatusCode.NotFound; //Lookup IP address and device type from device //TODO: Implement singleton DeviceMap object to cache and return this data var device = deviceRepository.FindByName(p.name); if (device != null) { var commandRoute = String.Format("/{0}/{1}", device.Type, p.commandRoute); response = new Response(); response.Headers.Add("cmd-route", commandRoute); response.Headers.Add("cmd-ip", device.IpAddress); response.StatusCode = HttpStatusCode.OK; logger.Info(String.Format("Recievied the {0} command for the {1}. Routing it to {2}", p.commandRoute, p.device, commandRoute)); } return response; }; Delete["/{name}"] = p => { Response response = HttpStatusCode.NotFound; return response; }; }