public HttpResponseMessage All([FromUri] string versionNumber)
        {
            long version;
            if (!long.TryParse(versionNumber, out version))
            {
                return Request.CreateBadRequestResponse();
            }

            using (IDatabaseService database = new DatabaseService())
            {
                Device device = RequestContext.GetDevice();
                if (database.HasIndiagramVersion(device.UserId, version) && !database.IsVersionOpen(device.UserId, version))
                {
                    List<IndiagramForDevice> collection = database.GetIndiagrams(device, version);
                    List<IndiagramResponse> indiagrams = GetCollectionTree(collection);

                    return Request.CreateGoodReponse(indiagrams);
                }

                return Request.CreateErrorResponse(HttpStatusCode.NotFound, "indiagram version not found");
            }
        }
        public HttpResponseMessage Sound([FromUri] string id, [FromUri] string versionNumber)
        {
            long indiagramId;
            long version;
            if (!long.TryParse(id, out indiagramId) || !long.TryParse(versionNumber, out version))
            {
                return Request.CreateBadRequestResponse();
            }

            Device device = RequestContext.GetDevice();
            using (IDatabaseService database = new DatabaseService())
            {
                if (!database.HasIndiagramVersion(device.UserId, version) || database.IsVersionOpen(device.UserId, version))
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Version not found");
                }

                IndiagramForDevice resultIndiagram = database.GetIndiagram(device, indiagramId, version);

                if (resultIndiagram == null)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Indiagram not found");
                }

                if (string.IsNullOrWhiteSpace(resultIndiagram.SoundHash))
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "No sound file");
                }

                IStorageService storageService = new StorageService();
                byte[] content = storageService.DownloadSound(resultIndiagram.Id, resultIndiagram.Version);

                if (content == null)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Error while downloading file");
                }

                return Request.CreateGoodReponse(new FileDownloadResponse
                {
                    FileName = resultIndiagram.ImageFile,
                    Content = content
                });
            }
        }
        public HttpResponseMessage Indiagram([FromUri] string id, [FromUri] string versionNumber)
        {
            long indiagramId;
            long version;
            Device device = RequestContext.GetDevice();
            if (!long.TryParse(id, out indiagramId) || !long.TryParse(versionNumber, out version))
            {
                return Request.CreateBadRequestResponse();
            }

            using (IDatabaseService database = new DatabaseService())
            {
                if (!database.HasIndiagramVersion(device.UserId, version) || database.IsVersionOpen(device.UserId, version))
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Version not found");
                }

                IndiagramForDevice resultIndiagram = database.GetIndiagram(device, indiagramId, version);

                if (resultIndiagram == null)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Indiagram not found");
                }

                return Request.CreateGoodReponse(ToResponse(resultIndiagram));
            }
        }