public async Task SaveLanguageToFile(SaveLanguageModel language)
        {
            // Save to:
            // {path-to-project}/data/Language/{language.Name}/{language.YearStart}-{language.YearEnd}
            //      - area.geojson: language.Area
            //      - features.json: language.Features
            //      - additionalDetails.json: language.AdditionalDetails
            var years = YearsToFolderName(language.YearStart.Value, language.YearEnd.Value);
            var path  = $"{LanguagePathFolder}/{language.Name}/{years}/";

            Directory.CreateDirectory(path);

            if (File.Exists($"{path}/area.geojson"))
            {
                throw new InvalidOperationException($"Save cannot be done, because the geojson already exists in the given name / year range '{language.Name}/{years}/'");
            }

            var geojson = EnsureDataIsFeatureCollectiion(language.GeoJson.ToString());

            await DirectoryHelper.WriteAllTextIfDataAsync($"{path}/area.geojson", geojson);

            await DirectoryHelper.WriteAllTextIfDataAsync($"{path}/features.json", language.Features);

            await DirectoryHelper.WriteAllTextIfDataAsync($"{path}/additionalDetails", language.AdditionalDetails);
        }
Exemple #2
0
        private static SaveLanguageModel MapModel(GetLanguageResponse response)
        {
            var model = new SaveLanguageModel
            {
                Version = response.Data.Version,
                Name    = response.Data.Name,
                Code    = response.Data.Code
            };

            return(model);
        }
        public async Task <ActionResult> SaveToFile(SaveLanguageModel language)
        {
            try
            {
                this.logger.LogDebug("POST api/administrator/save/file");

                await this.languageHelper.SaveLanguageToFile(language);

                return(Ok());
            }
            catch (Exception exception)
            {
                this.logger.LogError($"PUT api/administrator/save/file - Error - The exception: {exception}");
                return(StatusCode(StatusCodes.Status500InternalServerError, exception));
            }
        }
        public async Task Test_Post_SaveToFile(string filename, int?yearStart, int?yearEnd, string name)
        {
            // Arrange
            var language = new SaveLanguageModel
            {
                GeoJson   = System.IO.File.ReadAllText($"{polygonPath}/{filename}"),
                YearStart = yearStart,
                YearEnd   = yearEnd,
                Name      = name
            };

            var controller = new AdministratorController(this.loggerMock.Object, this.contextFactory, this.helperMock.Object);

            // Act
            var result = await controller.SaveToFile(language);

            // Assert
            var viewResult = Assert.IsType <OkResult>(result);
        }
        public async Task <ActionResult> SaveToDatabase(SaveLanguageModel language)
        {
            try
            {
                this.logger.LogDebug("POST api/administrator/save/db");

                using var db = this.contextFactory.CreateDbContext();

                await db.Languages.AddModelAsync(language);

                await db.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception exception)
            {
                this.logger.LogError($"PUT api/administrator/save/database - Error - The exception: {exception}");
                return(StatusCode(StatusCodes.Status500InternalServerError, exception));
            }
        }