예제 #1
0
        public async Task <HttpResponseMessage> TranslateToUseCaseScenario()
        {
            if (Request.Content.IsMimeMultipartContent() == false)
            {
                return(new HttpResponseMessage(HttpStatusCode.UnsupportedMediaType));
            }

            var workingPath = string.Empty;

            try {
                workingPath = CreateWorkingDirectory();

                var provider = new MultipartFormDataStreamProvider(workingPath);
                await Request.Content.ReadAsMultipartAsync(provider);

                var attachmentsProvider = new AttachmentsProvider(provider);
                var phrases             = attachmentsProvider.Validate();
                if (phrases.Any())
                {
                    return(new HttpResponseMessage(HttpStatusCode.BadRequest)
                    {
                        ReasonPhrase = string.Join(Environment.NewLine, phrases)
                    });
                }

                UseCaseCatalog catalog;
                using (var reader = new StreamReader(attachmentsProvider.CatalogFileName)) {
                    catalog = new UseCaseReader(workingPath).ReadFrom(reader, attachmentsProvider.CatalogFileName, DateTime.Now);
                    MarkdownConverter.CreateConvertedMarkdownTo(catalog, workingPath);
                }

                return(new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = CreateUseCaseScenarioResponseContent(workingPath, provider.Contents[0].Headers.ContentDisposition.FileName, catalog),
                });
            }
            catch (ApplicationException e) {
                return(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    ReasonPhrase = e.Message
                });
            }
            finally {
                try {
                    if (Directory.Exists(workingPath))
                    {
                        Directory.Delete(workingPath);
                    }
                }
                catch {
                    // Do nothing.
                }
            }
        }