gitextract_z_phpssj/ ├── .gitignore ├── .hgignore ├── All_Chapters.sln ├── Chapter_01/ │ └── HealthCheck/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── counter/ │ │ │ │ │ ├── counter.component.html │ │ │ │ │ ├── counter.component.spec.ts │ │ │ │ │ └── counter.component.ts │ │ │ │ ├── fetch-data/ │ │ │ │ │ ├── fetch-data.component.html │ │ │ │ │ └── fetch-data.component.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── Controllers/ │ │ └── WeatherForecastController.cs │ ├── HealthCheck.csproj │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── WeatherForecast.cs │ ├── appsettings.Development.json │ └── appsettings.json ├── Chapter_01.sln ├── Chapter_02/ │ └── HealthCheck/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── HealthCheck.csproj │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── appsettings.Development.json │ ├── appsettings.json │ ├── libman.json │ └── wwwroot/ │ └── test.html ├── Chapter_02.sln ├── Chapter_03/ │ └── HealthCheck/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── health-check/ │ │ │ │ │ ├── health-check.component.css │ │ │ │ │ ├── health-check.component.html │ │ │ │ │ └── health-check.component.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── CustomHealthCheckOptions.cs │ ├── HealthCheck.csproj │ ├── ICMPHealthCheck.cs │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── appsettings.Development.json │ ├── appsettings.json │ ├── libman.json │ └── wwwroot/ │ └── test.html ├── Chapter_03.sln ├── Chapter_04/ │ └── WorldCities/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── Controllers/ │ │ ├── CitiesController.cs │ │ ├── CountriesController.cs │ │ └── SeedController.cs │ ├── Data/ │ │ ├── ApplicationDbContext.cs │ │ ├── Migrations/ │ │ │ ├── 20191123030140_Initial.Designer.cs │ │ │ ├── 20191123030140_Initial.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ ├── City.cs │ │ │ └── Country.cs │ │ └── Source/ │ │ └── worldcities.xlsx │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── WorldCities.csproj │ ├── appsettings.Development.json │ └── appsettings.json ├── Chapter_04.sln ├── Chapter_05/ │ └── WorldCities/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── angular-material.module.ts │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── cities/ │ │ │ │ │ ├── _clientSidePagination/ │ │ │ │ │ │ ├── _README.txt │ │ │ │ │ │ ├── cities.component.html │ │ │ │ │ │ └── cities.component.ts_sample │ │ │ │ │ ├── cities.component.css │ │ │ │ │ ├── cities.component.html │ │ │ │ │ ├── cities.component.ts │ │ │ │ │ └── city.ts │ │ │ │ ├── countries/ │ │ │ │ │ ├── countries.component.css │ │ │ │ │ ├── countries.component.html │ │ │ │ │ ├── countries.component.ts │ │ │ │ │ └── country.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── Controllers/ │ │ ├── CitiesController.cs │ │ ├── CountriesController.cs │ │ └── SeedController.cs │ ├── Data/ │ │ ├── ApiResult.cs │ │ ├── ApplicationDbContext.cs │ │ ├── Migrations/ │ │ │ ├── 20191123030140_Initial.Designer.cs │ │ │ ├── 20191123030140_Initial.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ ├── City.cs │ │ │ └── Country.cs │ │ └── Source/ │ │ └── worldcities.xlsx │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── WorldCities.csproj │ ├── appsettings.Development.json │ └── appsettings.json ├── Chapter_05.sln ├── Chapter_06/ │ └── WorldCities/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── angular-material.module.ts │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── cities/ │ │ │ │ │ ├── cities.component.css │ │ │ │ │ ├── cities.component.html │ │ │ │ │ ├── cities.component.ts │ │ │ │ │ ├── city-edit.component.css │ │ │ │ │ ├── city-edit.component.html │ │ │ │ │ ├── city-edit.component.ts │ │ │ │ │ └── city.ts │ │ │ │ ├── countries/ │ │ │ │ │ ├── countries.component.css │ │ │ │ │ ├── countries.component.html │ │ │ │ │ ├── countries.component.ts │ │ │ │ │ ├── country-edit.component.css │ │ │ │ │ ├── country-edit.component.html │ │ │ │ │ ├── country-edit.component.ts │ │ │ │ │ └── country.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── Controllers/ │ │ ├── CitiesController.cs │ │ ├── CountriesController.cs │ │ └── SeedController.cs │ ├── Data/ │ │ ├── ApiResult.cs │ │ ├── ApplicationDbContext.cs │ │ ├── Migrations/ │ │ │ ├── 20191123030140_Initial.Designer.cs │ │ │ ├── 20191123030140_Initial.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ ├── City.cs │ │ │ └── Country.cs │ │ └── Source/ │ │ └── worldcities.xlsx │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── WorldCities.csproj │ ├── appsettings.Development.json │ └── appsettings.json ├── Chapter_06.sln ├── Chapter_07/ │ └── WorldCities/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── angular-material.module.ts │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── base.form.component.ts │ │ │ │ ├── base.service.ts │ │ │ │ ├── cities/ │ │ │ │ │ ├── cities.component.css │ │ │ │ │ ├── cities.component.html │ │ │ │ │ ├── cities.component.ts │ │ │ │ │ ├── city-edit.component.css │ │ │ │ │ ├── city-edit.component.html │ │ │ │ │ ├── city-edit.component.ts │ │ │ │ │ ├── city.service.ts │ │ │ │ │ └── city.ts │ │ │ │ ├── countries/ │ │ │ │ │ ├── countries.component.css │ │ │ │ │ ├── countries.component.html │ │ │ │ │ ├── countries.component.ts │ │ │ │ │ ├── country-edit.component.css │ │ │ │ │ ├── country-edit.component.html │ │ │ │ │ ├── country-edit.component.ts │ │ │ │ │ ├── country.service.ts │ │ │ │ │ └── country.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── Controllers/ │ │ ├── CitiesController.cs │ │ ├── CountriesController.cs │ │ └── SeedController.cs │ ├── Data/ │ │ ├── ApiResult.cs │ │ ├── ApplicationDbContext.cs │ │ ├── CityDTO.cs │ │ ├── CountryDTO.cs │ │ ├── Migrations/ │ │ │ ├── 20191123030140_Initial.Designer.cs │ │ │ ├── 20191123030140_Initial.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ ├── City.cs │ │ │ └── Country.cs │ │ └── Source/ │ │ └── worldcities.xlsx │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── WorldCities.csproj │ ├── appsettings.Development.json │ └── appsettings.json ├── Chapter_07.sln ├── Chapter_08/ │ └── WorldCities/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── angular-material.module.ts │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── base.form.component.ts │ │ │ │ ├── base.service.ts │ │ │ │ ├── cities/ │ │ │ │ │ ├── cities.component.css │ │ │ │ │ ├── cities.component.html │ │ │ │ │ ├── cities.component.ts │ │ │ │ │ ├── city-edit.component.css │ │ │ │ │ ├── city-edit.component.html │ │ │ │ │ ├── city-edit.component.ts │ │ │ │ │ ├── city.service.ts │ │ │ │ │ └── city.ts │ │ │ │ ├── countries/ │ │ │ │ │ ├── countries.component.css │ │ │ │ │ ├── countries.component.html │ │ │ │ │ ├── countries.component.ts │ │ │ │ │ ├── country-edit.component.css │ │ │ │ │ ├── country-edit.component.html │ │ │ │ │ ├── country-edit.component.ts │ │ │ │ │ ├── country.service.ts │ │ │ │ │ └── country.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── Controllers/ │ │ ├── CitiesController.cs │ │ ├── CountriesController.cs │ │ └── SeedController.cs │ ├── Data/ │ │ ├── ApiResult.cs │ │ ├── ApplicationDbContext.cs │ │ ├── CityDTO.cs │ │ ├── CountryDTO.cs │ │ ├── IQueryableExtensions.cs │ │ ├── Migrations/ │ │ │ ├── 20191123030140_Initial.Designer.cs │ │ │ ├── 20191123030140_Initial.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ ├── City.cs │ │ │ └── Country.cs │ │ └── Source/ │ │ └── worldcities.xlsx │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── WorldCities.csproj │ ├── appsettings.Development.json │ └── appsettings.json ├── Chapter_08.sln ├── Chapter_09/ │ ├── WorldCities/ │ │ ├── .gitignore │ │ ├── ClientApp/ │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── browserslist │ │ │ ├── e2e/ │ │ │ │ ├── protractor.conf.js │ │ │ │ ├── src/ │ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ │ └── app.po.ts │ │ │ │ └── tsconfig.e2e.json │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── angular-material.module.ts │ │ │ │ │ ├── app.component.html │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── app.server.module.ts │ │ │ │ │ ├── base.form.component.ts │ │ │ │ │ ├── base.service.ts │ │ │ │ │ ├── cities/ │ │ │ │ │ │ ├── cities.component.css │ │ │ │ │ │ ├── cities.component.html │ │ │ │ │ │ ├── cities.component.spec.ts │ │ │ │ │ │ ├── cities.component.ts │ │ │ │ │ │ ├── city-edit.component.css │ │ │ │ │ │ ├── city-edit.component.html │ │ │ │ │ │ ├── city-edit.component.ts │ │ │ │ │ │ ├── city.service.ts │ │ │ │ │ │ └── city.ts │ │ │ │ │ ├── countries/ │ │ │ │ │ │ ├── countries.component.css │ │ │ │ │ │ ├── countries.component.html │ │ │ │ │ │ ├── countries.component.ts │ │ │ │ │ │ ├── country-edit.component.css │ │ │ │ │ │ ├── country-edit.component.html │ │ │ │ │ │ ├── country-edit.component.ts │ │ │ │ │ │ ├── country.service.ts │ │ │ │ │ │ └── country.ts │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home.component.html │ │ │ │ │ │ └── home.component.ts │ │ │ │ │ └── nav-menu/ │ │ │ │ │ ├── nav-menu.component.css │ │ │ │ │ ├── nav-menu.component.html │ │ │ │ │ └── nav-menu.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── karma.conf.js │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles.css │ │ │ │ ├── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.server.json │ │ │ │ ├── tsconfig.spec.json │ │ │ │ └── tslint.json │ │ │ ├── tsconfig.json │ │ │ ├── tslint.json │ │ │ └── update-npm.bat │ │ ├── Controllers/ │ │ │ ├── CitiesController.cs │ │ │ ├── CountriesController.cs │ │ │ └── SeedController.cs │ │ ├── Data/ │ │ │ ├── ApiResult.cs │ │ │ ├── ApplicationDbContext.cs │ │ │ ├── CityDTO.cs │ │ │ ├── CountryDTO.cs │ │ │ ├── IQueryableExtensions.cs │ │ │ ├── Migrations/ │ │ │ │ ├── 20191123030140_Initial.Designer.cs │ │ │ │ ├── 20191123030140_Initial.cs │ │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ │ ├── Models/ │ │ │ │ ├── City.cs │ │ │ │ └── Country.cs │ │ │ └── Source/ │ │ │ └── worldcities.xlsx │ │ ├── Pages/ │ │ │ ├── Error.cshtml │ │ │ ├── Error.cshtml.cs │ │ │ └── _ViewImports.cshtml │ │ ├── Program.cs │ │ ├── Startup.cs │ │ ├── WorldCities.csproj │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ └── WorldCities.Tests/ │ ├── CitiesController_Tests.cs │ └── WorldCities.Tests.csproj ├── Chapter_09.sln ├── Chapter_10/ │ ├── AuthSample/ │ │ ├── .gitignore │ │ ├── AuthSample.csproj │ │ ├── ClientApp/ │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── browserslist │ │ │ ├── e2e/ │ │ │ │ ├── protractor.conf.js │ │ │ │ ├── src/ │ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ │ └── app.po.ts │ │ │ │ └── tsconfig.e2e.json │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── api-authorization/ │ │ │ │ │ ├── api-authorization.constants.ts │ │ │ │ │ ├── api-authorization.module.spec.ts │ │ │ │ │ ├── api-authorization.module.ts │ │ │ │ │ ├── authorize.guard.spec.ts │ │ │ │ │ ├── authorize.guard.ts │ │ │ │ │ ├── authorize.interceptor.spec.ts │ │ │ │ │ ├── authorize.interceptor.ts │ │ │ │ │ ├── authorize.service.spec.ts │ │ │ │ │ ├── authorize.service.ts │ │ │ │ │ ├── login/ │ │ │ │ │ │ ├── login.component.css │ │ │ │ │ │ ├── login.component.html │ │ │ │ │ │ ├── login.component.spec.ts │ │ │ │ │ │ └── login.component.ts │ │ │ │ │ ├── login-menu/ │ │ │ │ │ │ ├── login-menu.component.css │ │ │ │ │ │ ├── login-menu.component.html │ │ │ │ │ │ ├── login-menu.component.spec.ts │ │ │ │ │ │ └── login-menu.component.ts │ │ │ │ │ └── logout/ │ │ │ │ │ ├── logout.component.css │ │ │ │ │ ├── logout.component.html │ │ │ │ │ ├── logout.component.spec.ts │ │ │ │ │ └── logout.component.ts │ │ │ │ ├── app/ │ │ │ │ │ ├── app.component.html │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── app.server.module.ts │ │ │ │ │ ├── counter/ │ │ │ │ │ │ ├── counter.component.html │ │ │ │ │ │ ├── counter.component.spec.ts │ │ │ │ │ │ └── counter.component.ts │ │ │ │ │ ├── fetch-data/ │ │ │ │ │ │ ├── fetch-data.component.html │ │ │ │ │ │ └── fetch-data.component.ts │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home.component.html │ │ │ │ │ │ └── home.component.ts │ │ │ │ │ └── nav-menu/ │ │ │ │ │ ├── nav-menu.component.css │ │ │ │ │ ├── nav-menu.component.html │ │ │ │ │ └── nav-menu.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── karma.conf.js │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles.css │ │ │ │ ├── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.server.json │ │ │ │ ├── tsconfig.spec.json │ │ │ │ └── tslint.json │ │ │ ├── tsconfig.json │ │ │ └── tslint.json │ │ ├── Controllers/ │ │ │ ├── OidcConfigurationController.cs │ │ │ └── WeatherForecastController.cs │ │ ├── Data/ │ │ │ ├── ApplicationDbContext.cs │ │ │ └── Migrations/ │ │ │ ├── 00000000000000_CreateIdentitySchema.Designer.cs │ │ │ ├── 00000000000000_CreateIdentitySchema.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ └── ApplicationUser.cs │ │ ├── Pages/ │ │ │ ├── Error.cshtml │ │ │ ├── Error.cshtml.cs │ │ │ ├── Shared/ │ │ │ │ └── _LoginPartial.cshtml │ │ │ └── _ViewImports.cshtml │ │ ├── Program.cs │ │ ├── Startup.cs │ │ ├── WeatherForecast.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── WorldCities/ │ │ ├── .gitignore │ │ ├── ClientApp/ │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── browserslist │ │ │ ├── e2e/ │ │ │ │ ├── protractor.conf.js │ │ │ │ ├── src/ │ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ │ └── app.po.ts │ │ │ │ └── tsconfig.e2e.json │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── api-authorization/ │ │ │ │ │ ├── api-authorization.constants.ts │ │ │ │ │ ├── api-authorization.module.spec.ts │ │ │ │ │ ├── api-authorization.module.ts │ │ │ │ │ ├── authorize.guard.spec.ts │ │ │ │ │ ├── authorize.guard.ts │ │ │ │ │ ├── authorize.interceptor.spec.ts │ │ │ │ │ ├── authorize.interceptor.ts │ │ │ │ │ ├── authorize.service.spec.ts │ │ │ │ │ ├── authorize.service.ts │ │ │ │ │ ├── login/ │ │ │ │ │ │ ├── login.component.css │ │ │ │ │ │ ├── login.component.html │ │ │ │ │ │ ├── login.component.spec.ts │ │ │ │ │ │ └── login.component.ts │ │ │ │ │ ├── login-menu/ │ │ │ │ │ │ ├── login-menu.component.css │ │ │ │ │ │ ├── login-menu.component.html │ │ │ │ │ │ ├── login-menu.component.spec.ts │ │ │ │ │ │ └── login-menu.component.ts │ │ │ │ │ └── logout/ │ │ │ │ │ ├── logout.component.css │ │ │ │ │ ├── logout.component.html │ │ │ │ │ ├── logout.component.spec.ts │ │ │ │ │ └── logout.component.ts │ │ │ │ ├── app/ │ │ │ │ │ ├── angular-material.module.ts │ │ │ │ │ ├── app.component.html │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── app.server.module.ts │ │ │ │ │ ├── base.form.component.ts │ │ │ │ │ ├── base.service.ts │ │ │ │ │ ├── cities/ │ │ │ │ │ │ ├── cities.component.css │ │ │ │ │ │ ├── cities.component.html │ │ │ │ │ │ ├── cities.component.spec.ts │ │ │ │ │ │ ├── cities.component.ts │ │ │ │ │ │ ├── city-edit.component.css │ │ │ │ │ │ ├── city-edit.component.html │ │ │ │ │ │ ├── city-edit.component.ts │ │ │ │ │ │ ├── city.service.ts │ │ │ │ │ │ └── city.ts │ │ │ │ │ ├── countries/ │ │ │ │ │ │ ├── countries.component.css │ │ │ │ │ │ ├── countries.component.html │ │ │ │ │ │ ├── countries.component.ts │ │ │ │ │ │ ├── country-edit.component.css │ │ │ │ │ │ ├── country-edit.component.html │ │ │ │ │ │ ├── country-edit.component.ts │ │ │ │ │ │ ├── country.service.ts │ │ │ │ │ │ └── country.ts │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home.component.html │ │ │ │ │ │ └── home.component.ts │ │ │ │ │ └── nav-menu/ │ │ │ │ │ ├── nav-menu.component.css │ │ │ │ │ ├── nav-menu.component.html │ │ │ │ │ └── nav-menu.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── karma.conf.js │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles.css │ │ │ │ ├── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.server.json │ │ │ │ ├── tsconfig.spec.json │ │ │ │ └── tslint.json │ │ │ ├── tsconfig.json │ │ │ ├── tslint.json │ │ │ └── update-npm.bat │ │ ├── Controllers/ │ │ │ ├── CitiesController.cs │ │ │ ├── CountriesController.cs │ │ │ ├── OidcConfigurationController.cs │ │ │ └── SeedController.cs │ │ ├── Data/ │ │ │ ├── ApiResult.cs │ │ │ ├── ApplicationDbContext.cs │ │ │ ├── CityDTO.cs │ │ │ ├── CountryDTO.cs │ │ │ ├── IQueryableExtensions.cs │ │ │ ├── Migrations/ │ │ │ │ ├── 20191230002753_Identity.Designer.cs │ │ │ │ ├── 20191230002753_Identity.cs │ │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ │ ├── Models/ │ │ │ │ ├── ApplicationUser.cs │ │ │ │ ├── City.cs │ │ │ │ └── Country.cs │ │ │ └── Source/ │ │ │ └── worldcities.xlsx │ │ ├── Pages/ │ │ │ ├── Error.cshtml │ │ │ ├── Error.cshtml.cs │ │ │ ├── Shared/ │ │ │ │ └── _LoginPartial.cshtml │ │ │ └── _ViewImports.cshtml │ │ ├── Program.cs │ │ ├── Startup.cs │ │ ├── WorldCities.csproj │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ └── WorldCities.Tests/ │ ├── CitiesController_Tests.cs │ ├── IdentityHelper.cs │ ├── SeedController_Tests.cs │ └── WorldCities.Tests.csproj ├── Chapter_10.sln ├── Chapter_11/ │ ├── HealthCheck/ │ │ ├── .config/ │ │ │ └── dotnet-tools.json │ │ ├── .gitignore │ │ ├── ClientApp/ │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── browserslist │ │ │ ├── e2e/ │ │ │ │ ├── protractor.conf.js │ │ │ │ ├── src/ │ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ │ └── app.po.ts │ │ │ │ └── tsconfig.e2e.json │ │ │ ├── ngsw-config.json │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app.component.html │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── app.server.module.ts │ │ │ │ │ ├── health-check/ │ │ │ │ │ │ ├── health-check.component.css │ │ │ │ │ │ ├── health-check.component.html │ │ │ │ │ │ └── health-check.component.ts │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home.component.html │ │ │ │ │ │ └── home.component.ts │ │ │ │ │ └── nav-menu/ │ │ │ │ │ ├── nav-menu.component.css │ │ │ │ │ ├── nav-menu.component.html │ │ │ │ │ └── nav-menu.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── karma.conf.js │ │ │ │ ├── main.ts │ │ │ │ ├── manifest.webmanifest │ │ │ │ ├── ng-connection-service/ │ │ │ │ │ ├── connection-service.module.ts │ │ │ │ │ ├── connection-service.service.spec.ts │ │ │ │ │ └── connection-service.service.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles.css │ │ │ │ ├── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.server.json │ │ │ │ ├── tsconfig.spec.json │ │ │ │ └── tslint.json │ │ │ ├── tsconfig.json │ │ │ ├── tslint.json │ │ │ └── update-npm.bat │ │ ├── CustomHealthCheckOptions.cs │ │ ├── HealthCheck.csproj │ │ ├── ICMPHealthCheck.cs │ │ ├── Pages/ │ │ │ ├── Error.cshtml │ │ │ ├── Error.cshtml.cs │ │ │ └── _ViewImports.cshtml │ │ ├── Program.cs │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── libman.json │ │ └── wwwroot/ │ │ ├── isOnline.txt │ │ ├── manifest.webmanifest │ │ ├── ngsw-worker.js │ │ ├── ngsw.json │ │ ├── safety-worker.js │ │ └── test.html │ └── WorldCities/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── ngsw-config.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── api-authorization/ │ │ │ │ ├── api-authorization.constants.ts │ │ │ │ ├── api-authorization.module.spec.ts │ │ │ │ ├── api-authorization.module.ts │ │ │ │ ├── authorize.guard.spec.ts │ │ │ │ ├── authorize.guard.ts │ │ │ │ ├── authorize.interceptor.spec.ts │ │ │ │ ├── authorize.interceptor.ts │ │ │ │ ├── authorize.service.spec.ts │ │ │ │ ├── authorize.service.ts │ │ │ │ ├── login/ │ │ │ │ │ ├── login.component.css │ │ │ │ │ ├── login.component.html │ │ │ │ │ ├── login.component.spec.ts │ │ │ │ │ └── login.component.ts │ │ │ │ ├── login-menu/ │ │ │ │ │ ├── login-menu.component.css │ │ │ │ │ ├── login-menu.component.html │ │ │ │ │ ├── login-menu.component.spec.ts │ │ │ │ │ └── login-menu.component.ts │ │ │ │ └── logout/ │ │ │ │ ├── logout.component.css │ │ │ │ ├── logout.component.html │ │ │ │ ├── logout.component.spec.ts │ │ │ │ └── logout.component.ts │ │ │ ├── app/ │ │ │ │ ├── angular-material.module.ts │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── base.form.component.ts │ │ │ │ ├── base.service.ts │ │ │ │ ├── cities/ │ │ │ │ │ ├── cities.component.css │ │ │ │ │ ├── cities.component.html │ │ │ │ │ ├── cities.component.spec.ts │ │ │ │ │ ├── cities.component.ts │ │ │ │ │ ├── city-edit.component.css │ │ │ │ │ ├── city-edit.component.html │ │ │ │ │ ├── city-edit.component.ts │ │ │ │ │ ├── city.service.ts │ │ │ │ │ └── city.ts │ │ │ │ ├── countries/ │ │ │ │ │ ├── countries.component.css │ │ │ │ │ ├── countries.component.html │ │ │ │ │ ├── countries.component.ts │ │ │ │ │ ├── country-edit.component.css │ │ │ │ │ ├── country-edit.component.html │ │ │ │ │ ├── country-edit.component.ts │ │ │ │ │ ├── country.service.ts │ │ │ │ │ └── country.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── manifest.webmanifest │ │ │ ├── ng-connection-service/ │ │ │ │ ├── connection-service.module.ts │ │ │ │ ├── connection-service.service.spec.ts │ │ │ │ └── connection-service.service.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── Controllers/ │ │ ├── CitiesController.cs │ │ ├── CountriesController.cs │ │ ├── OidcConfigurationController.cs │ │ └── SeedController.cs │ ├── Data/ │ │ ├── ApiResult.cs │ │ ├── ApplicationDbContext.cs │ │ ├── CityDTO.cs │ │ ├── CountryDTO.cs │ │ ├── IQueryableExtensions.cs │ │ ├── Migrations/ │ │ │ ├── 20191230002753_Identity.Designer.cs │ │ │ ├── 20191230002753_Identity.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ ├── ApplicationUser.cs │ │ │ ├── City.cs │ │ │ └── Country.cs │ │ └── Source/ │ │ └── worldcities.xlsx │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ ├── Shared/ │ │ │ └── _LoginPartial.cshtml │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── WorldCities.csproj │ ├── appsettings.Development.json │ ├── appsettings.json │ └── wwwroot/ │ ├── isOnline.txt │ ├── manifest.webmanifest │ ├── ngsw-worker.js │ ├── ngsw.json │ └── safety-worker.js ├── Chapter_11.sln ├── Chapter_12/ │ ├── HealthCheck/ │ │ ├── .config/ │ │ │ └── dotnet-tools.json │ │ ├── .gitignore │ │ ├── ClientApp/ │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── browserslist │ │ │ ├── e2e/ │ │ │ │ ├── protractor.conf.js │ │ │ │ ├── src/ │ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ │ └── app.po.ts │ │ │ │ └── tsconfig.e2e.json │ │ │ ├── ngsw-config.json │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app.component.html │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── app.server.module.ts │ │ │ │ │ ├── health-check/ │ │ │ │ │ │ ├── health-check.component.css │ │ │ │ │ │ ├── health-check.component.html │ │ │ │ │ │ └── health-check.component.ts │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home.component.html │ │ │ │ │ │ └── home.component.ts │ │ │ │ │ └── nav-menu/ │ │ │ │ │ ├── nav-menu.component.css │ │ │ │ │ ├── nav-menu.component.html │ │ │ │ │ └── nav-menu.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── karma.conf.js │ │ │ │ ├── main.ts │ │ │ │ ├── manifest.webmanifest │ │ │ │ ├── ng-connection-service/ │ │ │ │ │ ├── connection-service.module.ts │ │ │ │ │ ├── connection-service.service.spec.ts │ │ │ │ │ └── connection-service.service.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles.css │ │ │ │ ├── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.server.json │ │ │ │ ├── tsconfig.spec.json │ │ │ │ └── tslint.json │ │ │ ├── tsconfig.json │ │ │ ├── tslint.json │ │ │ └── update-npm.bat │ │ ├── CustomHealthCheckOptions.cs │ │ ├── HealthCheck.csproj │ │ ├── ICMPHealthCheck.cs │ │ ├── Pages/ │ │ │ ├── Error.cshtml │ │ │ ├── Error.cshtml.cs │ │ │ └── _ViewImports.cshtml │ │ ├── Program.cs │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── libman.json │ │ └── wwwroot/ │ │ ├── isOnline.txt │ │ ├── manifest.webmanifest │ │ ├── ngsw-worker.js │ │ ├── ngsw.json │ │ ├── safety-worker.js │ │ └── test.html │ └── WorldCities/ │ ├── .gitignore │ ├── ClientApp/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── browserslist │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.e2e.json │ │ ├── ngsw-config.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── api-authorization/ │ │ │ │ ├── api-authorization.constants.ts │ │ │ │ ├── api-authorization.module.spec.ts │ │ │ │ ├── api-authorization.module.ts │ │ │ │ ├── authorize.guard.spec.ts │ │ │ │ ├── authorize.guard.ts │ │ │ │ ├── authorize.interceptor.spec.ts │ │ │ │ ├── authorize.interceptor.ts │ │ │ │ ├── authorize.service.spec.ts │ │ │ │ ├── authorize.service.ts │ │ │ │ ├── login/ │ │ │ │ │ ├── login.component.css │ │ │ │ │ ├── login.component.html │ │ │ │ │ ├── login.component.spec.ts │ │ │ │ │ └── login.component.ts │ │ │ │ ├── login-menu/ │ │ │ │ │ ├── login-menu.component.css │ │ │ │ │ ├── login-menu.component.html │ │ │ │ │ ├── login-menu.component.spec.ts │ │ │ │ │ └── login-menu.component.ts │ │ │ │ └── logout/ │ │ │ │ ├── logout.component.css │ │ │ │ ├── logout.component.html │ │ │ │ ├── logout.component.spec.ts │ │ │ │ └── logout.component.ts │ │ │ ├── app/ │ │ │ │ ├── angular-material.module.ts │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── app.server.module.ts │ │ │ │ ├── base.form.component.ts │ │ │ │ ├── base.service.ts │ │ │ │ ├── cities/ │ │ │ │ │ ├── cities.component.css │ │ │ │ │ ├── cities.component.html │ │ │ │ │ ├── cities.component.spec.ts │ │ │ │ │ ├── cities.component.ts │ │ │ │ │ ├── city-edit.component.css │ │ │ │ │ ├── city-edit.component.html │ │ │ │ │ ├── city-edit.component.ts │ │ │ │ │ ├── city.service.ts │ │ │ │ │ └── city.ts │ │ │ │ ├── countries/ │ │ │ │ │ ├── countries.component.css │ │ │ │ │ ├── countries.component.html │ │ │ │ │ ├── countries.component.ts │ │ │ │ │ ├── country-edit.component.css │ │ │ │ │ ├── country-edit.component.html │ │ │ │ │ ├── country-edit.component.ts │ │ │ │ │ ├── country.service.ts │ │ │ │ │ └── country.ts │ │ │ │ ├── home/ │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ └── nav-menu/ │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.html │ │ │ │ └── nav-menu.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── karma.conf.js │ │ │ ├── main.ts │ │ │ ├── manifest.webmanifest │ │ │ ├── ng-connection-service/ │ │ │ │ ├── connection-service.module.ts │ │ │ │ ├── connection-service.service.spec.ts │ │ │ │ └── connection-service.service.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.server.json │ │ │ ├── tsconfig.spec.json │ │ │ └── tslint.json │ │ ├── tsconfig.json │ │ ├── tslint.json │ │ └── update-npm.bat │ ├── Controllers/ │ │ ├── CitiesController.cs │ │ ├── CountriesController.cs │ │ ├── OidcConfigurationController.cs │ │ └── SeedController.cs │ ├── Data/ │ │ ├── ApiResult.cs │ │ ├── ApplicationDbContext.cs │ │ ├── CityDTO.cs │ │ ├── CountryDTO.cs │ │ ├── IQueryableExtensions.cs │ │ ├── Migrations/ │ │ │ ├── 20191230002753_Identity.Designer.cs │ │ │ ├── 20191230002753_Identity.cs │ │ │ └── ApplicationDbContextModelSnapshot.cs │ │ ├── Models/ │ │ │ ├── ApplicationUser.cs │ │ │ ├── City.cs │ │ │ └── Country.cs │ │ └── Source/ │ │ └── worldcities.xlsx │ ├── Pages/ │ │ ├── Error.cshtml │ │ ├── Error.cshtml.cs │ │ ├── Shared/ │ │ │ └── _LoginPartial.cshtml │ │ └── _ViewImports.cshtml │ ├── Program.cs │ ├── Startup.cs │ ├── WorldCities.csproj │ ├── _LinuxVM_ConfigFiles/ │ │ ├── kestrel-worldcities.service │ │ ├── nginx-worldcities.conf │ │ └── nginx.conf │ ├── appsettings.Development.json │ ├── appsettings.json │ └── wwwroot/ │ ├── isOnline.txt │ ├── manifest.webmanifest │ ├── ngsw-worker.js │ ├── ngsw.json │ └── safety-worker.js ├── Chapter_12.sln ├── LICENSE └── README.md