public HttpResponseMessage CloseVersion([FromUri] string versionNumber) { long version; if (!long.TryParse(versionNumber, out version)) { return Request.CreateBadRequestResponse(); } User user = RequestContext.GetAuthenticatedUser(); Device device = RequestContext.GetDevice(); using (IDatabaseService database = new DatabaseService()) { if (!database.HasIndiagramVersion(user.Id, version)) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Version not found"); } Version v = database.CloseVersion(user.Id, device.Id, version); if (v == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Version not found"); } return Request.CreateGoodReponse(ToResponse(v)); } }
public HttpResponseMessage PostImage([FromUri] string id, [FromUri] string versionNumber, [FromBody] FileUploadRequest fileRequest) { using (IDatabaseService database = new DatabaseService()) { User user = RequestContext.GetAuthenticatedUser(); Device device = RequestContext.GetDevice(); long indiagramId; long version; if (!long.TryParse(id, out indiagramId) || !long.TryParse(versionNumber, out version)) { return Request.CreateBadRequestResponse(); } if (!database.HasIndiagramVersion(user.Id, version)) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Version not found"); } if (!database.CanPushInVersion(device.UserId, device.Id, version)) { return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Can not update in this version, version is closed or didn't created by this device"); } IndiagramInfo indiagramInfo = database.GetLastIndiagramInfo(user.Id, indiagramId); if (indiagramInfo == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Indiagram not found"); } if (indiagramInfo.Version != version) { return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Can not modify old indiagram version"); } string filename = fileRequest.Filename; byte[] buffer = fileRequest.Content; IStorageService storageService = new StorageService(); if (!storageService.UploadImage(indiagramInfo, buffer)) { return Request.CreateErrorResponse(HttpStatusCode.Conflict, "Indiagram image already exists and can't be replaced"); } database.SetIndiagramImage(indiagramInfo, filename, buffer); return Request.CreateEmptyGoodReponse(); } }
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 UpdateIndiagrams([FromBody] List<IndiagramRequest> request) { if (request == null || request.Any(x => string.IsNullOrEmpty(x.Text))) { return Request.CreateBadRequestResponse(); } if (request.Count == 0) { return Request.CreateGoodReponse(new List<MappedIndiagramResponse>()); } long version = request.First().Version; if (request.Any(x => x.Version != version)) { return Request.CreateBadRequestResponse(); } using (IDatabaseService database = new DatabaseService()) { Device device = RequestContext.GetDevice(); if (!database.HasIndiagramVersion(device.UserId, version)) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "version not found"); } if (!database.CanPushInVersion(device.UserId, device.Id, version)) { return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Can not update in this version, version is closed or didn't created by this device"); } bool hasError = false; Queue<IndiagramRequest> input = new Queue<IndiagramRequest>(request); List<IndiagramRequest> orderedRequests = new List<IndiagramRequest>(); int noChangeCount = 0; Dictionary<long, long> mappedIds = new Dictionary<long, long>(); while (input.Count > 0) { IndiagramRequest item = input.Dequeue(); if (item.ParentId >= -1 || mappedIds.ContainsKey(item.ParentId)) { noChangeCount = 0; if (item.Id < -1) { mappedIds.Add(item.Id, 0); } orderedRequests.Add(item); } else { noChangeCount++; if (noChangeCount == input.Count) { return Request.CreateBadRequestResponse("Cycle/missing indiagrams detected in collection"); } input.Enqueue(item); } } List<MappedIndiagramResponse> result = orderedRequests.Select(x => { IndiagramForDevice indiagram; if (x.ParentId < 0) { x.ParentId = mappedIds[x.ParentId]; } if (x.Id < 0) { indiagram = database.CreateIndiagram(device.UserId, device.Id, x); mappedIds[x.Id] = indiagram.Id; } else { indiagram = database.UpdateIndiagram(device.UserId, device.Id, x); } if (indiagram == null) { hasError = true; return null; } return new MappedIndiagramResponse { SentId = x.Id, DatabaseId = indiagram.Id, ParentId = indiagram.ParentId }; }).ToList(); if (hasError) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "indiagram not found"); } return Request.CreateGoodReponse(result); } }
public HttpResponseMessage UpdateIndiagram([FromBody] IndiagramRequest request) { if (request == null || string.IsNullOrWhiteSpace(request.Text)) { return Request.CreateBadRequestResponse(); } using (IDatabaseService database = new DatabaseService()) { Device device = RequestContext.GetDevice(); if (!database.HasIndiagramVersion(device.UserId, request.Version)) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "version not found"); } if (!database.CanPushInVersion(device.UserId, device.Id, request.Version)) { return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Can not update in this version, version is closed or didn't created by this device"); } if (request.Id < 0) { IndiagramForDevice indiagram = database.CreateIndiagram(device.UserId, device.Id, request); return Request.CreateGoodReponse(ToResponse(indiagram)); } else { //update IndiagramForDevice indiagram = database.UpdateIndiagram(device.UserId, device.Id, request); if (indiagram == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "indiagram not found"); } return Request.CreateGoodReponse(ToResponse(indiagram)); } } }
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)); } }