├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── challenge-solution-submission.md
│ └── feature_request.md
├── BackStory.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── assets
├── 2007_Snow-Hill-Island_Luyten-De-Hauwere-Emperor-Penguin-56.jpg
├── COLDSTART-INSIDE-FACTORY2-500x275.png
├── COLDSTART-STAMP-CARD-BOTH-400x267.png
├── COLDSTART-TRUCK-400x300.png
└── RaspberryPi.jpg
└── challenges
├── challenge1
├── README.md
├── finished
│ └── coldstartapp
│ │ ├── .vscode
│ │ ├── extensions.json
│ │ ├── launch.json
│ │ ├── settings.json
│ │ └── tasks.json
│ │ ├── README.md
│ │ ├── api
│ │ ├── .funcignore
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── extensions.json
│ │ │ ├── launch.json
│ │ │ ├── settings.json
│ │ │ └── tasks.json
│ │ ├── catalog-get
│ │ │ ├── function.json
│ │ │ └── index.js
│ │ ├── host.json
│ │ ├── orders-post
│ │ │ ├── function.json
│ │ │ └── index.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── proxies.json
│ │ └── shared
│ │ │ ├── catalog-data.js
│ │ │ ├── catalog.json
│ │ │ └── user-utils.js
│ │ └── vue-app
│ │ ├── .browserslistrc
│ │ ├── .eslintrc.js
│ │ ├── .gitignore
│ │ ├── .prettierrc
│ │ ├── babel.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── postcss.config.js
│ │ ├── public
│ │ ├── 404.html
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ └── routes.json
│ │ ├── src
│ │ ├── app.vue
│ │ ├── assets
│ │ │ ├── COLDSTART-LOGO-black.png
│ │ │ ├── COLDSTART-LOGO-white.png
│ │ │ ├── js
│ │ │ │ └── userInfo.js
│ │ │ └── logo.png
│ │ ├── components
│ │ │ ├── auth-login.vue
│ │ │ ├── auth-logout.vue
│ │ │ ├── button-footer.vue
│ │ │ ├── card-content.vue
│ │ │ ├── header-bar-brand.vue
│ │ │ ├── header-bar.vue
│ │ │ ├── list-header.vue
│ │ │ ├── modal.vue
│ │ │ └── page-not-found.vue
│ │ ├── main.js
│ │ ├── router.js
│ │ ├── store
│ │ │ ├── config.js
│ │ │ ├── index.js
│ │ │ └── modules
│ │ │ │ ├── action-utils.js
│ │ │ │ ├── catalog.js
│ │ │ │ ├── icecreams.js
│ │ │ │ └── mutation-types.js
│ │ ├── styles.scss
│ │ └── views
│ │ │ └── catalog
│ │ │ ├── catalog-list.vue
│ │ │ └── catalog.vue
│ │ └── vue.config.js
└── starter
│ └── coldstartapp
│ ├── README.md
│ ├── api
│ ├── .funcignore
│ ├── .gitignore
│ ├── .vscode
│ │ ├── extensions.json
│ │ ├── launch.json
│ │ ├── settings.json
│ │ └── tasks.json
│ ├── catalog-get
│ │ ├── function.json
│ │ └── index.js
│ ├── host.json
│ ├── local.setting.json
│ ├── orders-post
│ │ ├── function.json
│ │ └── index.js
│ ├── package-lock.json
│ ├── package.json
│ ├── proxies.json
│ └── shared
│ │ ├── catalog-data.js
│ │ ├── catalog.json
│ │ ├── config.js
│ │ └── user-utils.js
│ └── vue-app
│ ├── .browserslistrc
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .prettierrc
│ ├── babel.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── postcss.config.js
│ ├── public
│ ├── 404.html
│ ├── favicon.ico
│ ├── index.html
│ └── routes.json
│ ├── src
│ ├── app.vue
│ ├── assets
│ │ ├── COLDSTART-LOGO-black.png
│ │ ├── COLDSTART-LOGO-white.png
│ │ ├── js
│ │ │ └── userInfo.js
│ │ └── logo.png
│ ├── components
│ │ ├── auth-login.vue
│ │ ├── auth-logout.vue
│ │ ├── button-footer.vue
│ │ ├── card-content.vue
│ │ ├── header-bar-brand.vue
│ │ ├── header-bar.vue
│ │ ├── list-header.vue
│ │ └── page-not-found.vue
│ ├── main.js
│ ├── router.js
│ ├── store
│ │ ├── config.js
│ │ ├── index.js
│ │ └── modules
│ │ │ ├── action-utils.js
│ │ │ ├── catalog.js
│ │ │ └── mutation-types.js
│ ├── styles.scss
│ └── views
│ │ └── catalog
│ │ ├── catalog-list.vue
│ │ └── catalog.vue
│ └── vue.config.js
├── challenge2
├── README.md
├── finished
│ ├── Data Factory
│ │ └── arm_template.zip
│ └── coldstartapp
│ │ ├── .vscode
│ │ ├── extensions.json
│ │ ├── launch.json
│ │ ├── settings.json
│ │ └── tasks.json
│ │ ├── README.md
│ │ ├── api
│ │ ├── .funcignore
│ │ ├── .gitignore
│ │ ├── .vscode
│ │ │ ├── extensions.json
│ │ │ ├── launch.json
│ │ │ ├── settings.json
│ │ │ └── tasks.json
│ │ ├── catalog-get
│ │ │ ├── function.json
│ │ │ └── index.js
│ │ ├── host.json
│ │ ├── local.setting.json
│ │ ├── orders-post
│ │ │ ├── function.json
│ │ │ └── index.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── proxies.json
│ │ ├── recommendations-get
│ │ │ ├── function.json
│ │ │ └── index.js
│ │ ├── recommendations-post
│ │ │ ├── function.json
│ │ │ └── index.js
│ │ └── shared
│ │ │ ├── catalog-data.js
│ │ │ ├── catalog.json
│ │ │ ├── config.js
│ │ │ ├── order-data.js
│ │ │ ├── recommendation-data.js
│ │ │ └── user-utils.js
│ │ └── vue-app
│ │ ├── .browserslistrc
│ │ ├── .eslintrc.js
│ │ ├── .gitignore
│ │ ├── .prettierrc
│ │ ├── babel.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── postcss.config.js
│ │ ├── public
│ │ ├── 404.html
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ └── routes.json
│ │ ├── src
│ │ ├── app.vue
│ │ ├── assets
│ │ │ ├── COLDSTART-LOGO-black.png
│ │ │ ├── COLDSTART-LOGO-white.png
│ │ │ ├── js
│ │ │ │ └── userInfo.js
│ │ │ └── logo.png
│ │ ├── components
│ │ │ ├── auth-login.vue
│ │ │ ├── auth-logout.vue
│ │ │ ├── button-footer.vue
│ │ │ ├── card-content.vue
│ │ │ ├── header-bar-brand.vue
│ │ │ ├── header-bar.vue
│ │ │ ├── list-header.vue
│ │ │ ├── modal.vue
│ │ │ └── page-not-found.vue
│ │ ├── main.js
│ │ ├── router.js
│ │ ├── store
│ │ │ ├── config.js
│ │ │ ├── index.js
│ │ │ └── modules
│ │ │ │ ├── action-utils.js
│ │ │ │ ├── catalog.js
│ │ │ │ ├── icecreams.js
│ │ │ │ ├── mutation-types.js
│ │ │ │ └── recommendations.js
│ │ ├── styles.scss
│ │ └── views
│ │ │ └── catalog
│ │ │ ├── catalog-list.vue
│ │ │ └── catalog.vue
│ │ └── vue.config.js
└── starter
│ ├── data
│ └── coldstart-orders-historical.csv
│ └── scripts
│ └── sql
│ ├── create_table_drivers.sql
│ ├── create_table_icecreams.sql
│ └── create_table_orders.sql
├── challenge3
├── README.md
└── finished
│ └── coldstartapi
│ ├── .funcignore
│ ├── .gitignore
│ ├── .vscode
│ ├── extensions.json
│ ├── launch.json
│ ├── settings.json
│ └── tasks.json
│ ├── host.json
│ ├── orders-queued
│ ├── function.json
│ └── index.js
│ ├── orders-timer
│ ├── function.json
│ └── index.js
│ ├── package-lock.json
│ ├── package.json
│ ├── proxies.json
│ └── shared
│ ├── catalog-data.js
│ ├── config.js
│ ├── cosmosdb-utils.js
│ ├── driver-data.js
│ ├── order-cosmos-data.js
│ ├── sql-utils.js
│ └── user-utils.js
├── challenge4
├── README.md
└── starter
│ ├── ColdStartCustomerSWA
│ ├── .gitignore
│ ├── ColdStartCustomer.ComponentsLibrary
│ │ ├── ColdStartCustomerSWA.ComponentsLibrary.csproj
│ │ ├── LocalStorage.cs
│ │ ├── Map
│ │ │ ├── Map.razor
│ │ │ ├── Marker.cs
│ │ │ └── Point.cs
│ │ └── wwwroot
│ │ │ ├── background.png
│ │ │ ├── deliveryMap.js
│ │ │ ├── exampleJsInterop.js
│ │ │ ├── leaflet
│ │ │ ├── images
│ │ │ │ ├── layers-2x.png
│ │ │ │ ├── layers.png
│ │ │ │ ├── marker-icon-2x.png
│ │ │ │ ├── marker-icon.png
│ │ │ │ └── marker-shadow.png
│ │ │ ├── leaflet.css
│ │ │ └── leaflet.js
│ │ │ ├── localStorage.js
│ │ │ └── pushNotifications.js
│ ├── ColdStartCustomerSWA.Shared
│ │ ├── ColdStartCustomerSWA.Shared.csproj
│ │ ├── Driver.cs
│ │ ├── IceCream.cs
│ │ └── Order.cs
│ ├── ColdStartCustomerSWA.sln
│ └── ColdStartCustomerSWA
│ │ ├── App.razor
│ │ ├── ColdStartCustomerSWA.csproj
│ │ ├── OrdersClient.cs
│ │ ├── Pages
│ │ ├── Index.razor
│ │ └── LoginProviders.razor
│ │ ├── Program.cs
│ │ ├── Properties
│ │ └── launchSettings.json
│ │ ├── Shared
│ │ ├── LoginDisplay.razor
│ │ ├── MainLayout.razor
│ │ └── MainLayout.razor.css
│ │ ├── _Imports.razor
│ │ └── wwwroot
│ │ ├── appsettings.Development.json
│ │ ├── appsettings.json
│ │ ├── css
│ │ ├── app.css
│ │ ├── bootstrap
│ │ │ ├── bootstrap.min.css
│ │ │ └── bootstrap.min.css.map
│ │ ├── font
│ │ │ ├── quicksand-v8-latin-300.woff
│ │ │ ├── quicksand-v8-latin-300.woff2
│ │ │ ├── quicksand-v8-latin-500.woff
│ │ │ ├── quicksand-v8-latin-500.woff2
│ │ │ ├── quicksand-v8-latin-700.woff
│ │ │ ├── quicksand-v8-latin-700.woff2
│ │ │ ├── quicksand-v8-latin-regular.woff
│ │ │ ├── quicksand-v8-latin-regular.woff2
│ │ │ └── quicksand.css
│ │ └── open-iconic
│ │ │ ├── FONT-LICENSE
│ │ │ ├── ICON-LICENSE
│ │ │ ├── README.md
│ │ │ └── font
│ │ │ ├── css
│ │ │ └── open-iconic-bootstrap.min.css
│ │ │ └── fonts
│ │ │ ├── open-iconic.eot
│ │ │ ├── open-iconic.otf
│ │ │ ├── open-iconic.svg
│ │ │ ├── open-iconic.ttf
│ │ │ └── open-iconic.woff
│ │ ├── img
│ │ ├── logo.png
│ │ └── orders.png
│ │ ├── index.html
│ │ ├── manifest.json
│ │ ├── sample-data
│ │ └── me.json
│ │ ├── service-worker.js
│ │ └── service-worker.published.js
│ ├── DriverApp
│ ├── .gitignore
│ ├── ColdStartChallenge.DriverApp.sln
│ └── ColdStartChallenge.DriverApp
│ │ ├── ColdStartChallenge.DriverApp.Android
│ │ ├── Assets
│ │ │ └── AboutAssets.txt
│ │ ├── ColdStartChallenge.DriverApp.Android.csproj
│ │ ├── MainActivity.cs
│ │ ├── Properties
│ │ │ ├── AndroidManifest.xml
│ │ │ └── AssemblyInfo.cs
│ │ └── Resources
│ │ │ ├── AboutResources.txt
│ │ │ ├── Resource.designer.cs
│ │ │ ├── drawable
│ │ │ ├── COLDSTART_LOGO_black.png
│ │ │ └── Truck.png
│ │ │ ├── layout
│ │ │ ├── Tabbar.xml
│ │ │ └── Toolbar.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ ├── ColdStartChallenge.DriverApp.UWP
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── Assets
│ │ │ ├── LargeTile.scale-100.png
│ │ │ ├── LargeTile.scale-125.png
│ │ │ ├── LargeTile.scale-150.png
│ │ │ ├── LargeTile.scale-200.png
│ │ │ ├── LargeTile.scale-400.png
│ │ │ ├── SmallTile.scale-100.png
│ │ │ ├── SmallTile.scale-125.png
│ │ │ ├── SmallTile.scale-150.png
│ │ │ ├── SmallTile.scale-200.png
│ │ │ ├── SmallTile.scale-400.png
│ │ │ ├── SplashScreen.scale-100.png
│ │ │ ├── SplashScreen.scale-125.png
│ │ │ ├── SplashScreen.scale-150.png
│ │ │ ├── SplashScreen.scale-200.png
│ │ │ ├── SplashScreen.scale-400.png
│ │ │ ├── Square150x150Logo.scale-100.png
│ │ │ ├── Square150x150Logo.scale-125.png
│ │ │ ├── Square150x150Logo.scale-150.png
│ │ │ ├── Square150x150Logo.scale-200.png
│ │ │ ├── Square150x150Logo.scale-400.png
│ │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png
│ │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png
│ │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png
│ │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png
│ │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png
│ │ │ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ │ │ ├── Square44x44Logo.altform-unplated_targetsize-24.png
│ │ │ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ │ │ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ │ │ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ │ │ ├── Square44x44Logo.scale-100.png
│ │ │ ├── Square44x44Logo.scale-125.png
│ │ │ ├── Square44x44Logo.scale-150.png
│ │ │ ├── Square44x44Logo.scale-200.png
│ │ │ ├── Square44x44Logo.scale-400.png
│ │ │ ├── Square44x44Logo.targetsize-16.png
│ │ │ ├── Square44x44Logo.targetsize-24.png
│ │ │ ├── Square44x44Logo.targetsize-256.png
│ │ │ ├── Square44x44Logo.targetsize-32.png
│ │ │ ├── Square44x44Logo.targetsize-48.png
│ │ │ ├── StoreLogo.backup.png
│ │ │ ├── StoreLogo.scale-100.png
│ │ │ ├── StoreLogo.scale-125.png
│ │ │ ├── StoreLogo.scale-150.png
│ │ │ ├── StoreLogo.scale-200.png
│ │ │ ├── StoreLogo.scale-400.png
│ │ │ ├── Wide310x150Logo.scale-100.png
│ │ │ ├── Wide310x150Logo.scale-125.png
│ │ │ ├── Wide310x150Logo.scale-150.png
│ │ │ ├── Wide310x150Logo.scale-200.png
│ │ │ └── Wide310x150Logo.scale-400.png
│ │ ├── COLDSTART_LOGO_black.png
│ │ ├── ColdStartChallenge.DriverApp.UWP.csproj
│ │ ├── MainPage.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── Package.appxmanifest
│ │ ├── Properties
│ │ │ ├── AssemblyInfo.cs
│ │ │ └── Default.rd.xml
│ │ └── Truck.png
│ │ ├── ColdStartChallenge.DriverApp.iOS
│ │ ├── AppDelegate.cs
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Icon1024.png
│ │ │ │ ├── Icon120.png
│ │ │ │ ├── Icon152.png
│ │ │ │ ├── Icon167.png
│ │ │ │ ├── Icon180.png
│ │ │ │ ├── Icon20.png
│ │ │ │ ├── Icon29.png
│ │ │ │ ├── Icon40.png
│ │ │ │ ├── Icon58.png
│ │ │ │ ├── Icon60.png
│ │ │ │ ├── Icon76.png
│ │ │ │ ├── Icon80.png
│ │ │ │ └── Icon87.png
│ │ ├── ColdStartChallenge.DriverApp.iOS.csproj
│ │ ├── Entitlements.plist
│ │ ├── Info.plist
│ │ ├── Main.cs
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── Resources
│ │ │ ├── COLDSTART_LOGO_black.png
│ │ │ ├── Default-568h@2x.png
│ │ │ ├── Default-Portrait.png
│ │ │ ├── Default-Portrait@2x.png
│ │ │ ├── Default.png
│ │ │ ├── Default@2x.png
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Truck.png
│ │ └── ColdStartChallenge.DriverApp
│ │ ├── App.xaml
│ │ ├── App.xaml.cs
│ │ ├── AppData.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── ColdStartChallenge.DriverApp.csproj
│ │ ├── Controls
│ │ ├── LoadingView.xaml
│ │ └── LoadingView.xaml.cs
│ │ ├── Converters
│ │ └── SelectedSortOptionToColorConverter.cs
│ │ ├── Models
│ │ ├── CacheKeys.cs
│ │ ├── Constants.cs
│ │ ├── Driver.cs
│ │ ├── Enum.cs
│ │ ├── Icecream.cs
│ │ ├── Location.cs
│ │ ├── MdiFontIcons.cs
│ │ ├── Order.cs
│ │ ├── OrderStatus.cs
│ │ └── SortOption.cs
│ │ ├── Navigation
│ │ └── NavigationMode.cs
│ │ ├── Pages
│ │ ├── DashboardPage.xaml
│ │ ├── DashboardPage.xaml.cs
│ │ ├── DeliveryDetailPage.xaml
│ │ ├── DeliveryDetailPage.xaml.cs
│ │ ├── LoginPage.xaml
│ │ └── LoginPage.xaml.cs
│ │ ├── Resources
│ │ ├── Fonts
│ │ │ └── materialdesignicons-webfont.ttf
│ │ ├── Styles.xaml
│ │ └── Styles.xaml.cs
│ │ ├── Services
│ │ ├── CredentialsService.cs
│ │ ├── DriverService.cs
│ │ ├── LocationService.cs
│ │ ├── LoginService.cs
│ │ └── OrderService.cs
│ │ └── ViewModels
│ │ ├── BindableBase.cs
│ │ ├── DashboardPageViewModel.cs
│ │ ├── DeliveryDetailPageViewModel.cs
│ │ ├── LoginPageViewModel.cs
│ │ ├── OrderListItemViewModel.cs
│ │ └── ViewModelBase.cs
│ └── coldstartapi
│ ├── .funcignore
│ ├── .gitignore
│ ├── .vscode
│ ├── extensions.json
│ ├── launch.json
│ ├── settings.json
│ └── tasks.json
│ ├── host.json
│ ├── myorders-get
│ ├── function.json
│ └── index.js
│ ├── orders-get
│ ├── function.json
│ └── index.js
│ ├── orders-put
│ ├── function.json
│ └── index.js
│ ├── orders-queued
│ ├── function.json
│ └── index.js
│ ├── orders-timer
│ ├── function.json
│ └── index.js
│ ├── package-lock.json
│ ├── package.json
│ ├── proxies.json
│ └── shared
│ ├── catalog-data.js
│ ├── config.js
│ ├── cosmosdb-utils.js
│ ├── driver-data.js
│ ├── order-cosmos-data.js
│ ├── sql-utils.js
│ └── user-utils.js
└── challenge5
├── README.md
└── starter
└── data
└── coldstart-historical-sales.csv
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/challenge-solution-submission.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Challenge Solution Submission
3 | about: Submit your solution for the ColdStart coding challenges.
4 | title: "[CHALLENGE SUBMISSION]"
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | Please provide the following information for your submission:
11 |
12 | What is your name (First, Last):
13 |
14 | Where is your GitHub Repo (with your challenge solution):
15 |
16 | What Challenge is this for (challenge number between 1 and 6):
17 |
18 | (Optional) Anything else we should know? e.g., language used, location, blog post?
19 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 ColdStart-Challenge
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/assets/2007_Snow-Hill-Island_Luyten-De-Hauwere-Emperor-Penguin-56.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/assets/2007_Snow-Hill-Island_Luyten-De-Hauwere-Emperor-Penguin-56.jpg
--------------------------------------------------------------------------------
/assets/COLDSTART-INSIDE-FACTORY2-500x275.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/assets/COLDSTART-INSIDE-FACTORY2-500x275.png
--------------------------------------------------------------------------------
/assets/COLDSTART-STAMP-CARD-BOTH-400x267.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/assets/COLDSTART-STAMP-CARD-BOTH-400x267.png
--------------------------------------------------------------------------------
/assets/COLDSTART-TRUCK-400x300.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/assets/COLDSTART-TRUCK-400x300.png
--------------------------------------------------------------------------------
/assets/RaspberryPi.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/assets/RaspberryPi.jpg
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ms-azuretools.vscode-azurefunctions"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Attach to Node Functions",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "preLaunchTask": "func: host start"
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "azureFunctions.deploySubpath": "api",
3 | "azureFunctions.postDeployTask": "npm install",
4 | "azureFunctions.projectLanguage": "JavaScript",
5 | "azureFunctions.projectRuntime": "~3",
6 | "debug.internalConsoleOptions": "neverOpen",
7 | "azureFunctions.preDeployTask": "npm prune"
8 | }
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "func",
6 | "command": "host start",
7 | "problemMatcher": "$func-node-watch",
8 | "isBackground": true,
9 | "dependsOn": "npm install",
10 | "options": {
11 | "cwd": "${workspaceFolder}/api"
12 | }
13 | },
14 | {
15 | "type": "shell",
16 | "label": "npm install",
17 | "command": "npm install",
18 | "options": {
19 | "cwd": "${workspaceFolder}/api"
20 | }
21 | },
22 | {
23 | "type": "shell",
24 | "label": "npm prune",
25 | "command": "npm prune --production",
26 | "problemMatcher": [],
27 | "options": {
28 | "cwd": "${workspaceFolder}/api"
29 | }
30 | }
31 | ]
32 | }
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/.funcignore:
--------------------------------------------------------------------------------
1 | *.js.map
2 | *.ts
3 | .git*
4 | .vscode
5 | local.settings.json
6 | test
7 | tsconfig.json
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ms-azuretools.vscode-azurefunctions"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Attach to Node Functions",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "preLaunchTask": "func: host start"
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "azureFunctions.deploySubpath": ".",
3 | "azureFunctions.postDeployTask": "npm install",
4 | "azureFunctions.projectLanguage": "JavaScript",
5 | "azureFunctions.projectRuntime": "~3",
6 | "debug.internalConsoleOptions": "neverOpen",
7 | "azureFunctions.preDeployTask": "npm prune"
8 | }
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "func",
6 | "command": "host start",
7 | "problemMatcher": "$func-watch",
8 | "isBackground": true,
9 | "dependsOn": "npm install"
10 | },
11 | {
12 | "type": "shell",
13 | "label": "npm install",
14 | "command": "npm install"
15 | },
16 | {
17 | "type": "shell",
18 | "label": "npm prune",
19 | "command": "npm prune --production",
20 | "problemMatcher": []
21 | }
22 | ]
23 | }
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/catalog-get/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["get"],
9 | "route": "catalog"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/catalog-get/index.js:
--------------------------------------------------------------------------------
1 | const data = require('../shared/catalog-data');
2 |
3 | module.exports = async function (context, req) {
4 | try {
5 | const items = await data.getCatalog();
6 | context.res.status(200).send(items);
7 | } catch (error) {
8 | context.res.status(500).send(error);
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/host.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0",
3 | "extensionBundle": {
4 | "id": "Microsoft.Azure.Functions.ExtensionBundle",
5 | "version": "[1.*, 2.0.0)"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/orders-post/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": [
9 | "post"
10 | ],
11 | "route": "orders"
12 | },
13 | {
14 | "type": "http",
15 | "direction": "out",
16 | "name": "res"
17 | },
18 | {
19 | "type": "queue",
20 | "direction": "out",
21 | "name": "myQueueItem",
22 | "queueName": "customer-orders",
23 | "connection": "AZURE_STORAGE_CONNECTIONSTRING"
24 | }
25 | ]
26 | }
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/orders-post/index.js:
--------------------------------------------------------------------------------
1 | const { getUser } = require('../shared/user-utils');
2 | var uuid = require('uuid');
3 |
4 |
5 | module.exports = async function (context, req) {
6 | // Get the user details from the request
7 | const user = getUser(req);
8 |
9 | // Build the pre-order JSON from the request
10 | const order = {
11 | Id: uuid.v4(),
12 | User: user.userDetails,
13 | FullAddress: req.body.ShippingAddress,
14 | Date: new Date().toISOString(),
15 | IcecreamId: req.body.Id,
16 | Status: "New",
17 | DriverId: null,
18 | LastPosition: null
19 | };
20 |
21 | try {
22 | // Add the pre-order JSON document in a queue
23 | console.log('Queueing order');
24 | context.bindings.myQueueItem = order;
25 |
26 | context.res.status(201).json(order);
27 | context.done();
28 | } catch (error) {
29 | console.error(error);
30 | context.res.status(500).send(error);
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coldstart-functions",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "start": "func start",
7 | "test": "echo \"No tests yet...\""
8 | },
9 | "dependencies": {
10 | "uuid": "^8.3.2"
11 | },
12 | "devDependencies": {}
13 | }
14 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/proxies.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/proxies",
3 | "proxies": {}
4 | }
5 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/shared/catalog-data.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs').promises;
2 |
3 | async function getCatalog() {
4 | console.log('using static data.');
5 | var stringData = await fs.readFile('./shared/catalog.json', 'utf8');
6 | const data = JSON.parse(stringData);
7 | return data.icecreams;
8 | }
9 |
10 | module.exports = { getCatalog };
11 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/api/shared/user-utils.js:
--------------------------------------------------------------------------------
1 | const getUser = (req) => {
2 | const header = req.headers["x-ms-client-principal"];
3 | if (header != undefined) {
4 | const encoded = Buffer.from(header, "base64");
5 | const decoded = encoded.toString("ascii");
6 |
7 | return JSON.parse(decoded);
8 | } else {
9 | return { userDetails: "John Doe" };
10 | }
11 | };
12 |
13 | module.exports = { getUser };
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 8
4 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true,
5 | },
6 | extends: ['@vue/airbnb', 'plugin:vue/essential'],
7 | // plugins: ['prettier'],
8 | // watch this for explaining why some of this is here
9 | // https://www.youtube.com/watch?time_continue=239&v=YIvjKId9m2c
10 | rules: {
11 | 'no-console': 'off', // process.env.NODE_ENV === 'production' ? 'error' : 'off',
12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
13 | 'consistent-return': 0,
14 | 'linebreak-style': 'off',
15 | quotes: [2, 'single', { avoidEscape: true, allowTemplateLiterals: true }],
16 | // 'prettier/prettier': [
17 | // 'error',
18 | // {
19 | // trailingComma: 'all',
20 | // singleQuote: true,
21 | // printWidth: 80,
22 | // },
23 | // ],
24 | 'vue/no-unused-components': [
25 | 'error',
26 | {
27 | ignoreWhenBindingPresent: true,
28 | },
29 | ],
30 | },
31 | parserOptions: {
32 | parser: 'babel-eslint',
33 | },
34 | };
35 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | # .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw*
22 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "bracketSpacing": true,
3 | "printWidth": 80,
4 | "singleQuote": true,
5 | "tabWidth": 2,
6 | "trailingComma": "all",
7 | "useTabs": false
8 | }
9 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['@vue/cli-plugin-babel/preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coldstart-vue-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "test:e2e": "vue-cli-service test:e2e",
9 | "lint": "vue-cli-service lint"
10 | },
11 | "dependencies": {
12 | "@fortawesome/fontawesome-svg-core": "^1.2.28",
13 | "@fortawesome/free-solid-svg-icons": "^5.13.0",
14 | "@fortawesome/vue-fontawesome": "^0.1.9",
15 | "axios": "^0.19.2",
16 | "bulma": "^0.8.1",
17 | "core-js": "^3.6.5",
18 | "vue": "^2.6.11",
19 | "vue-router": "^3.1.5",
20 | "vuex": "^3.1.3"
21 | },
22 | "devDependencies": {
23 | "@vue/cli-plugin-babel": "~4.3.1",
24 | "@vue/cli-plugin-eslint": "~4.3.1",
25 | "@vue/cli-service": "~4.3.1",
26 | "@vue/eslint-config-airbnb": "^5.0.2",
27 | "@vue/eslint-config-prettier": "^6.0.0",
28 | "babel-eslint": "^10.0.3",
29 | "eslint": "^6.7.2",
30 | "eslint-plugin-import": "^2.20.2",
31 | "eslint-plugin-prettier": "^3.1.2",
32 | "eslint-plugin-vue": "^6.2.2",
33 | "node-sass": "^4.14.1",
34 | "prettier": "^2.0.4",
35 | "sass-loader": "^8.0.2",
36 | "vue-template-compiler": "^2.6.11"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {},
4 | },
5 | };
6 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/public/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 404 - Page Not Found
7 |
16 |
17 |
18 | 404 - Page Not Found
19 |
20 |
21 |
22 |
23 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge1/finished/coldstartapp/vue-app/public/favicon.ico
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
14 |
19 | ColdStart Ice Cream
20 |
21 |
22 |
23 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/public/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "routes": [
3 | {
4 | "route": "/.auth/login/facebook",
5 | "statusCode": "404"
6 | },
7 | {
8 | "route": "/.auth/login/google",
9 | "statusCode": "404"
10 | },
11 | {
12 | "route": "/api/catalog"
13 | },
14 | {
15 | "route": "/api/*",
16 | "allowedRoles": ["authenticated"]
17 | },
18 | {
19 | "route": "/*",
20 | "serve": "/index.html",
21 | "statusCode": 200
22 | }
23 | ],
24 | "platformErrorOverrides": [
25 | {
26 | "errorType": "NotFound",
27 | "serve": "/404.html"
28 | }
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/app.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge1/finished/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-black.png
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge1/finished/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-white.png
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/assets/js/userInfo.js:
--------------------------------------------------------------------------------
1 | async function getUserInfo() {
2 | try {
3 | console.log('getUserInfo');
4 | const response = await fetch('/.auth/me');
5 | const payload = await response.json();
6 | const { clientPrincipal } = payload;
7 | console.log(clientPrincipal);
8 | return clientPrincipal;
9 | } catch (error) {
10 | console.error('No profile could be found');
11 | return undefined;
12 | }
13 | }
14 |
15 | export { getUserInfo as default };
16 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge1/finished/coldstartapp/vue-app/src/assets/logo.png
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/components/auth-login.vue:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 | {{ provider }}
23 |
24 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/components/auth-logout.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 | Logout
17 |
18 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/components/button-footer.vue:
--------------------------------------------------------------------------------
1 |
36 |
37 |
38 |
50 |
51 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/components/card-content.vue:
--------------------------------------------------------------------------------
1 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
35 |
![]()
36 |
37 |
{{ description }}
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/components/header-bar-brand.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/components/list-header.vue:
--------------------------------------------------------------------------------
1 |
28 |
29 |
30 |
31 |
32 | {{ title }}
33 |
34 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/components/page-not-found.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | These aren't the bits you're looking for
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import App from '@/app.vue';
3 | import router from './router';
4 | import store from './store';
5 |
6 | Vue.config.productionTip = false;
7 |
8 | new Vue({
9 | router,
10 | store,
11 | render: (h) => h(App),
12 | }).$mount('#app');
13 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/router.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Router from 'vue-router';
3 | import PageNotFound from '@/components/page-not-found.vue';
4 |
5 | Vue.use(Router);
6 |
7 | export default new Router({
8 | mode: 'history',
9 | base: process.env.BASE_URL,
10 | routes: [
11 | {
12 | path: '/',
13 | redirect: '/catalog',
14 | },
15 | {
16 | path: '/catalog',
17 | name: 'catalog',
18 | component: () => import(/* webpackChunkName: "catalog" */ './views/catalog/catalog.vue'),
19 | },
20 | {
21 | path: '*',
22 | component: PageNotFound,
23 | },
24 | ],
25 | });
26 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/store/config.js:
--------------------------------------------------------------------------------
1 | const API = process.env.VUE_APP_API || 'api';
2 |
3 | export { API as default };
4 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuex from 'vuex';
3 | import icecreamsModule from './modules/icecreams';
4 | import catalogModule from './modules/catalog';
5 |
6 | Vue.use(Vuex);
7 |
8 | export default new Vuex.Store({
9 | strict: process.env.NODE_ENV !== 'production',
10 | modules: {
11 | icecreams: icecreamsModule,
12 | catalog: catalogModule,
13 | },
14 | state: {
15 | },
16 | });
17 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/store/modules/action-utils.js:
--------------------------------------------------------------------------------
1 | export const parseList = (response) => {
2 | if (response.status !== 200) throw Error(response.message);
3 | let list = response.data;
4 | if (typeof list !== 'object') {
5 | list = [];
6 | }
7 | return list;
8 | };
9 |
10 | export const parseItem = (response, code) => {
11 | if (response.status !== code) throw Error(response.message);
12 | let item = response.data;
13 | if (typeof item !== 'object') {
14 | item = undefined;
15 | }
16 | return item;
17 | };
18 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/store/modules/catalog.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | import API from '../config';
3 | import { parseList } from './action-utils';
4 | import {
5 | GET_CATALOG,
6 | } from './mutation-types';
7 |
8 | const captains = console;
9 |
10 | export default {
11 | strict: process.env.NODE_ENV !== 'production',
12 | namespaced: true,
13 | state: {
14 | catalog: [],
15 | },
16 | mutations: {
17 | [GET_CATALOG](state, catalog) {
18 | state.catalog = catalog;
19 | },
20 | },
21 | actions: {
22 | async getCatalogAction({ commit }) {
23 | try {
24 | const response = await axios.get(`${API}/catalog`);
25 | const catalog = parseList(response);
26 | commit(GET_CATALOG, catalog);
27 | return catalog;
28 | } catch (error) {
29 | captains.error(error);
30 | throw new Error(error);
31 | }
32 | },
33 | },
34 | getters: {
35 | catalog: (state) => state.catalog,
36 | },
37 | };
38 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/src/store/modules/mutation-types.js:
--------------------------------------------------------------------------------
1 | export const ADD_ICECREAM = 'ADD_ICECREAM';
2 | export const GET_ICECREAMS = 'GET_ICECREAMS';
3 | export const GET_CATALOG = 'GET_CATALOG';
4 |
--------------------------------------------------------------------------------
/challenges/challenge1/finished/coldstartapp/vue-app/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | configureWebpack: {
3 | devtool: 'source-map',
4 | },
5 | devServer: {
6 | proxy: {
7 | '/api': {
8 | target: 'http://localhost:7071',
9 | ws: true,
10 | changeOrigin: true,
11 | },
12 | },
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/README.md:
--------------------------------------------------------------------------------
1 | # ColdStart Web Application - Getting started
2 |
3 | ## Introduction
4 |
5 | This is a starter web application for Azure Static Web Apps. It consists of two components:
6 |
7 | - Vue.js frontend
8 | - Node.js backend apis, running on Azure Functions
9 |
10 |
11 | ## Running the solution locally
12 |
13 | ### Frontend
14 |
15 | The frontend application is developed using Vue.js. It will communicate directly with the backend APIs included in the starter application.
16 |
17 | ```cmd
18 | cd vue-app
19 | npm install
20 | npm run serve
21 | ```
22 |
23 | ### Backend APIs
24 |
25 | The backend APIs are hosted using Azure Functions and can be run locally using the Azure Functions Core Tools.
26 |
27 | > Make sure to rename `local.setting.json` to `local.settings.json`. The setting**s** file is excluded to not expose any local secrets in the GitHub repository.
28 |
29 |
30 | ```cmd
31 | cd api
32 | npm install
33 | npm start
34 | ```
35 |
36 | ## Prerequisites
37 |
38 | - ✅ [Visual Studio Code](https://code.visualstudio.com?ocid=aid3027557)
39 | - ✅ [Aure Functions Core Tools](https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local?ocid=aid3027557)
40 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/.funcignore:
--------------------------------------------------------------------------------
1 | *.js.map
2 | *.ts
3 | .git*
4 | .vscode
5 | local.settings.json
6 | test
7 | tsconfig.json
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ms-azuretools.vscode-azurefunctions"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Attach to Node Functions",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "preLaunchTask": "func: host start"
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "azureFunctions.deploySubpath": ".",
3 | "azureFunctions.postDeployTask": "npm install",
4 | "azureFunctions.projectLanguage": "JavaScript",
5 | "azureFunctions.projectRuntime": "~3",
6 | "debug.internalConsoleOptions": "neverOpen",
7 | "azureFunctions.preDeployTask": "npm prune"
8 | }
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "func",
6 | "command": "host start",
7 | "problemMatcher": "$func-watch",
8 | "isBackground": true,
9 | "dependsOn": "npm install"
10 | },
11 | {
12 | "type": "shell",
13 | "label": "npm install",
14 | "command": "npm install"
15 | },
16 | {
17 | "type": "shell",
18 | "label": "npm prune",
19 | "command": "npm prune --production",
20 | "problemMatcher": []
21 | }
22 | ]
23 | }
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/catalog-get/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["get"],
9 | "route": "catalog"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/catalog-get/index.js:
--------------------------------------------------------------------------------
1 | const data = require('../shared/catalog-data');
2 |
3 | module.exports = async function (context, req) {
4 | try {
5 | const items = await data.getCatalog();
6 | context.res.status(200).send(items);
7 | } catch (error) {
8 | context.res.status(500).send(error);
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/host.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0",
3 | "extensionBundle": {
4 | "id": "Microsoft.Azure.Functions.ExtensionBundle",
5 | "version": "[1.*, 2.0.0)"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/local.setting.json:
--------------------------------------------------------------------------------
1 | {
2 | "IsEncrypted": false,
3 | "Values": {
4 | "AzureWebJobsStorage": "",
5 | "FUNCTIONS_WORKER_RUNTIME": "node"
6 | },
7 | "Host": {
8 | "CORS": "http://localhost:3000,http://localhost:4200,http://localhost:5000,http://localhost:8080"
9 | }
10 | }
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/orders-post/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["post"],
9 | "route": "orders"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/orders-post/index.js:
--------------------------------------------------------------------------------
1 | const { getUser } = require('../shared/user-utils');
2 |
3 | module.exports = async function (context, req) {
4 | // Get the user details from the request
5 | const user = getUser(req);
6 |
7 | // Get the pre-order from the request
8 |
9 | // TODO: add the pre-order JSON document in a queue
10 |
11 | context.res.status(201);
12 | };
13 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coldstart-functions",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "start": "func start",
7 | "test": "echo \"No tests yet...\""
8 | },
9 | "dependencies": {
10 | "@azure/storage-queue": "^12.3.0",
11 | "tedious": "^11.0.3"
12 | },
13 | "devDependencies": {}
14 | }
15 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/proxies.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/proxies",
3 | "proxies": {}
4 | }
5 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/shared/catalog-data.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs').promises;
2 |
3 | async function getCatalog() {
4 | console.log('using static data.');
5 | var stringData = await fs.readFile('./shared/catalog.json', 'utf8');
6 | const data = JSON.parse(stringData);
7 | return data.icecreams;
8 | }
9 |
10 | module.exports = { getCatalog };
11 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/shared/config.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | const process = require("process");
3 |
4 | const config = {
5 | azure_storage_connectionstring: process.env.AZURE_STORAGE_CONNECTIONSTRING
6 | };
7 |
8 | module.exports = { config };
9 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/api/shared/user-utils.js:
--------------------------------------------------------------------------------
1 | const getUser = (req) => {
2 | const header = req.headers["x-ms-client-principal"];
3 | if (header != undefined) {
4 | const encoded = Buffer.from(header, "base64");
5 | const decoded = encoded.toString("ascii");
6 |
7 | return JSON.parse(decoded);
8 | } else {
9 | return { userDetails: "John Doe" };
10 | }
11 | };
12 |
13 | module.exports = { getUser };
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 8
4 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true,
5 | },
6 | extends: ['@vue/airbnb', 'plugin:vue/essential'],
7 | // plugins: ['prettier'],
8 | // watch this for explaining why some of this is here
9 | // https://www.youtube.com/watch?time_continue=239&v=YIvjKId9m2c
10 | rules: {
11 | 'no-console': 'off', // process.env.NODE_ENV === 'production' ? 'error' : 'off',
12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
13 | 'consistent-return': 0,
14 | 'linebreak-style': 'off',
15 | quotes: [2, 'single', { avoidEscape: true, allowTemplateLiterals: true }],
16 | // 'prettier/prettier': [
17 | // 'error',
18 | // {
19 | // trailingComma: 'all',
20 | // singleQuote: true,
21 | // printWidth: 80,
22 | // },
23 | // ],
24 | 'vue/no-unused-components': [
25 | 'error',
26 | {
27 | ignoreWhenBindingPresent: true,
28 | },
29 | ],
30 | },
31 | parserOptions: {
32 | parser: 'babel-eslint',
33 | },
34 | };
35 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | # .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw*
22 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "bracketSpacing": true,
3 | "printWidth": 80,
4 | "singleQuote": true,
5 | "tabWidth": 2,
6 | "trailingComma": "all",
7 | "useTabs": false
8 | }
9 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['@vue/cli-plugin-babel/preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coldstart-vue-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "test:e2e": "vue-cli-service test:e2e",
9 | "lint": "vue-cli-service lint"
10 | },
11 | "dependencies": {
12 | "@fortawesome/fontawesome-svg-core": "^1.2.28",
13 | "@fortawesome/free-solid-svg-icons": "^5.13.0",
14 | "@fortawesome/vue-fontawesome": "^0.1.9",
15 | "axios": "^0.19.2",
16 | "bulma": "^0.8.1",
17 | "core-js": "^3.6.5",
18 | "vue": "^2.6.11",
19 | "vue-router": "^3.1.5",
20 | "vuex": "^3.1.3"
21 | },
22 | "devDependencies": {
23 | "@vue/cli-plugin-babel": "~4.3.1",
24 | "@vue/cli-plugin-eslint": "~4.3.1",
25 | "@vue/cli-service": "~4.3.1",
26 | "@vue/eslint-config-airbnb": "^5.0.2",
27 | "@vue/eslint-config-prettier": "^6.0.0",
28 | "babel-eslint": "^10.0.3",
29 | "eslint": "^6.7.2",
30 | "eslint-plugin-import": "^2.20.2",
31 | "eslint-plugin-prettier": "^3.1.2",
32 | "eslint-plugin-vue": "^6.2.2",
33 | "node-sass": "^4.14.1",
34 | "prettier": "^2.0.4",
35 | "sass-loader": "^8.0.2",
36 | "vue-template-compiler": "^2.6.11"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {},
4 | },
5 | };
6 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/public/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 404 - Page Not Found
7 |
16 |
17 |
18 | 404 - Page Not Found
19 |
20 |
21 |
22 |
23 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge1/starter/coldstartapp/vue-app/public/favicon.ico
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
14 |
19 | ColdStart Ice Cream
20 |
21 |
22 |
23 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/public/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "routes": [
3 | {
4 | "route": "/api/catalog"
5 | },
6 | {
7 | "route": "/*",
8 | "serve": "/index.html",
9 | "statusCode": 200
10 | }
11 | ],
12 | "platformErrorOverrides": [
13 | {
14 | "errorType": "NotFound",
15 | "serve": "/404.html"
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/app.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge1/starter/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-black.png
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge1/starter/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-white.png
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/assets/js/userInfo.js:
--------------------------------------------------------------------------------
1 | async function getUserInfo() {
2 | try {
3 | console.log('getUserInfo');
4 | const response = await fetch('/.auth/me');
5 | const payload = await response.json();
6 | const { clientPrincipal } = payload;
7 | console.log(clientPrincipal);
8 | return clientPrincipal;
9 | } catch (error) {
10 | console.error('No profile could be found');
11 | return undefined;
12 | }
13 | }
14 |
15 | export { getUserInfo as default };
16 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge1/starter/coldstartapp/vue-app/src/assets/logo.png
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/components/auth-login.vue:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 | {{ provider }}
23 |
24 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/components/auth-logout.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 | Logout
17 |
18 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/components/button-footer.vue:
--------------------------------------------------------------------------------
1 |
36 |
37 |
38 |
50 |
51 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/components/card-content.vue:
--------------------------------------------------------------------------------
1 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
35 |
![]()
36 |
37 |
{{ description }}
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/components/header-bar-brand.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/components/header-bar.vue:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
29 |
30 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/components/list-header.vue:
--------------------------------------------------------------------------------
1 |
28 |
29 |
30 |
31 |
32 | {{ title }}
33 |
34 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/components/page-not-found.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | These aren't the bits you're looking for
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import App from '@/app.vue';
3 | import router from './router';
4 | import store from './store';
5 |
6 | Vue.config.productionTip = false;
7 |
8 | new Vue({
9 | router,
10 | store,
11 | render: (h) => h(App),
12 | }).$mount('#app');
13 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/router.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Router from 'vue-router';
3 | import PageNotFound from '@/components/page-not-found.vue';
4 |
5 | Vue.use(Router);
6 |
7 | export default new Router({
8 | mode: 'history',
9 | base: process.env.BASE_URL,
10 | routes: [
11 | {
12 | path: '/',
13 | redirect: '/catalog',
14 | },
15 | {
16 | path: '/catalog',
17 | name: 'catalog',
18 | component: () => import(/* webpackChunkName: "catalog" */ './views/catalog/catalog.vue'),
19 | },
20 | {
21 | path: '*',
22 | component: PageNotFound,
23 | },
24 | ],
25 | });
26 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/store/config.js:
--------------------------------------------------------------------------------
1 | const API = process.env.VUE_APP_API || 'api';
2 |
3 | export { API as default };
4 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuex from 'vuex';
3 | import catalogModule from './modules/catalog';
4 |
5 | Vue.use(Vuex);
6 |
7 | export default new Vuex.Store({
8 | strict: process.env.NODE_ENV !== 'production',
9 | modules: {
10 | catalog: catalogModule,
11 | },
12 | state: {
13 | },
14 | });
15 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/store/modules/action-utils.js:
--------------------------------------------------------------------------------
1 | export const parseList = (response) => {
2 | if (response.status !== 200) throw Error(response.message);
3 | let list = response.data;
4 | if (typeof list !== 'object') {
5 | list = [];
6 | }
7 | return list;
8 | };
9 |
10 | export const parseItem = (response, code) => {
11 | if (response.status !== code) throw Error(response.message);
12 | let item = response.data;
13 | if (typeof item !== 'object') {
14 | item = undefined;
15 | }
16 | return item;
17 | };
18 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/store/modules/catalog.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | import API from '../config';
3 | import { parseList } from './action-utils';
4 | import GET_CATALOG from './mutation-types';
5 |
6 | const captains = console;
7 |
8 | export default {
9 | strict: process.env.NODE_ENV !== 'production',
10 | namespaced: true,
11 | state: {
12 | catalog: [],
13 | },
14 | mutations: {
15 | [GET_CATALOG](state, catalog) {
16 | state.catalog = catalog;
17 | },
18 | },
19 | actions: {
20 | async getCatalogAction({ commit }) {
21 | try {
22 | const response = await axios.get(`${API}/catalog`);
23 | const catalog = parseList(response);
24 | commit(GET_CATALOG, catalog);
25 | return catalog;
26 | } catch (error) {
27 | captains.error(error);
28 | throw new Error(error);
29 | }
30 | },
31 | },
32 | getters: {
33 | catalog: (state) => state.catalog,
34 | },
35 | };
36 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/store/modules/mutation-types.js:
--------------------------------------------------------------------------------
1 | const GET_CATALOG = 'GET_CATALOG';
2 |
3 | export { GET_CATALOG as default };
4 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/src/views/catalog/catalog-list.vue:
--------------------------------------------------------------------------------
1 |
27 |
28 |
29 |
30 |
{{ errorMessage }}
31 |
32 | Loading data ...
33 |
34 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/challenges/challenge1/starter/coldstartapp/vue-app/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | configureWebpack: {
3 | devtool: 'source-map',
4 | },
5 | devServer: {
6 | proxy: {
7 | '/api': {
8 | target: 'http://localhost:7071',
9 | ws: true,
10 | changeOrigin: true,
11 | },
12 | },
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/Data Factory/arm_template.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge2/finished/Data Factory/arm_template.zip
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ms-azuretools.vscode-azurefunctions"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Attach to Node Functions",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "preLaunchTask": "func: host start"
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "azureFunctions.deploySubpath": "api",
3 | "azureFunctions.postDeployTask": "npm install",
4 | "azureFunctions.projectLanguage": "JavaScript",
5 | "azureFunctions.projectRuntime": "~3",
6 | "debug.internalConsoleOptions": "neverOpen",
7 | "azureFunctions.preDeployTask": "npm prune"
8 | }
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "func",
6 | "command": "host start",
7 | "problemMatcher": "$func-node-watch",
8 | "isBackground": true,
9 | "dependsOn": "npm install",
10 | "options": {
11 | "cwd": "${workspaceFolder}/api"
12 | }
13 | },
14 | {
15 | "type": "shell",
16 | "label": "npm install",
17 | "command": "npm install",
18 | "options": {
19 | "cwd": "${workspaceFolder}/api"
20 | }
21 | },
22 | {
23 | "type": "shell",
24 | "label": "npm prune",
25 | "command": "npm prune --production",
26 | "problemMatcher": [],
27 | "options": {
28 | "cwd": "${workspaceFolder}/api"
29 | }
30 | }
31 | ]
32 | }
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/.funcignore:
--------------------------------------------------------------------------------
1 | *.js.map
2 | *.ts
3 | .git*
4 | .vscode
5 | local.settings.json
6 | test
7 | tsconfig.json
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ms-azuretools.vscode-azurefunctions"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Attach to Node Functions",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "preLaunchTask": "func: host start"
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "azureFunctions.deploySubpath": ".",
3 | "azureFunctions.postDeployTask": "npm install",
4 | "azureFunctions.projectLanguage": "JavaScript",
5 | "azureFunctions.projectRuntime": "~3",
6 | "debug.internalConsoleOptions": "neverOpen",
7 | "azureFunctions.preDeployTask": "npm prune"
8 | }
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "func",
6 | "command": "host start",
7 | "problemMatcher": "$func-watch",
8 | "isBackground": true,
9 | "dependsOn": "npm install"
10 | },
11 | {
12 | "type": "shell",
13 | "label": "npm install",
14 | "command": "npm install"
15 | },
16 | {
17 | "type": "shell",
18 | "label": "npm prune",
19 | "command": "npm prune --production",
20 | "problemMatcher": []
21 | }
22 | ]
23 | }
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/catalog-get/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["get"],
9 | "route": "catalog"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/catalog-get/index.js:
--------------------------------------------------------------------------------
1 | const data = require('../shared/catalog-data');
2 |
3 | module.exports = async function (context, req) {
4 | try {
5 | const items = await data.getCatalog();
6 | const result = JSON.stringify(items);
7 | context.res.status(200).send(result);
8 | } catch (error) {
9 | context.res.status(500).send(error);
10 | }
11 | };
12 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/host.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0",
3 | "extensionBundle": {
4 | "id": "Microsoft.Azure.Functions.ExtensionBundle",
5 | "version": "[1.*, 2.0.0)"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/local.setting.json:
--------------------------------------------------------------------------------
1 | {
2 | "IsEncrypted": false,
3 | "Values": {
4 | "AzureWebJobsStorage": "",
5 | "FUNCTIONS_WORKER_RUNTIME": "node"
6 | },
7 | "Host": {
8 | "CORS": "http://localhost:3000,http://localhost:4200,http://localhost:5000,http://localhost:8080"
9 | }
10 | }
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/orders-post/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": [
9 | "post"
10 | ],
11 | "route": "orders"
12 | },
13 | {
14 | "type": "http",
15 | "direction": "out",
16 | "name": "res"
17 | },
18 | {
19 | "type": "queue",
20 | "direction": "out",
21 | "name": "myQueueItem",
22 | "queueName": "customer-orders",
23 | "connection": "AZURE_STORAGE_CONNECTIONSTRING"
24 | }
25 | ]
26 | }
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coldstart-functions",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "start": "func start",
7 | "test": "echo \"No tests yet...\""
8 | },
9 | "dependencies": {
10 | "@azure/cognitiveservices-personalizer": "^2.0.1",
11 | "@azure/ms-rest-azure-js": "^2.1.0",
12 | "@azure/storage-queue": "^12.3.0",
13 | "detect-browser": "^5.2.0",
14 | "mssql": "^6.3.1"
15 | },
16 | "devDependencies": {}
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/proxies.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/proxies",
3 | "proxies": {}
4 | }
5 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/recommendations-get/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["get"],
9 | "route": "recommendations"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/recommendations-get/index.js:
--------------------------------------------------------------------------------
1 | const { getUser } = require('../shared/user-utils');
2 | const data = require('../shared/recommendation-data');
3 |
4 | module.exports = async function (context, req) {
5 | // Get the user details from the request
6 | const user = getUser(req);
7 |
8 | try {
9 | const items = await data.getRecommendations(user.userDetails, req);
10 |
11 | const result = JSON.stringify(items);
12 | context.res.status(200).send(result);
13 | } catch (error) {
14 | context.res.status(500).send(error);
15 | }
16 | };
17 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/recommendations-post/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["post"],
9 | "route": "recommendations"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/recommendations-post/index.js:
--------------------------------------------------------------------------------
1 | const { getUser } = require('../shared/user-utils');
2 | const data = require('../shared/recommendation-data');
3 |
4 | module.exports = async function (context, req) {
5 | try {
6 | console.log(`Event id: ${req.body.eventId}, Reward score: ${req.body.rewardScore}`);
7 | await data.setReward(req.body.eventId, req.body.rewardScore);
8 |
9 | context.res.status(200);
10 | } catch (error) {
11 | context.res.status(500).send(error);
12 | }
13 | };
14 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/shared/catalog-data.js:
--------------------------------------------------------------------------------
1 | const { sqlConfig } = require("./config");
2 | const mssql = require('mssql');
3 |
4 | async function getCatalog() {
5 | console.log('using database ');
6 |
7 | let pool = await mssql.connect(sqlConfig);
8 | let result = await pool.request()
9 | .query(`SELECT * FROM dbo.Icecreams ORDER BY [Id]`);
10 |
11 | return result.recordset;
12 | }
13 |
14 | module.exports = { getCatalog };
15 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/shared/config.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | const process = require("process");
3 |
4 | const config = {
5 | azure_storage_connectionstring: process.env.AZURE_STORAGE_CONNECTIONSTRING,
6 | personalizer_key: process.env.PERSONALIZER_KEY,
7 | personalizer_baseuri: process.env.PERSONALIZER_BASEURI,
8 | };
9 |
10 | const sqlConfig = {
11 | user: process.env.SQL_USERNAME,
12 | password: process.env.SQL_PASSWORD,
13 | server: process.env.SQL_SERVERNAME,
14 | database: 'coldstartsql',
15 | pool: {
16 | max: 10,
17 | min: 0,
18 | idleTimeoutMillis: 30000
19 | }
20 | };
21 |
22 | module.exports = { config, sqlConfig };
23 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/shared/order-data.js:
--------------------------------------------------------------------------------
1 | const { sqlConfig } = require("./config");
2 | const mssql = require('mssql');
3 |
4 | async function insertOrder(order) {
5 | console.log('using database ');
6 |
7 | let pool = await mssql.connect(sqlConfig);
8 | let result = await pool.request()
9 | .input('userId', mssql.NVarChar, order.User)
10 | .input('icecreamId', mssql.Int, order.IcecreamId)
11 | .input('fullAddress', mssql.NVarChar, order.FullAddress)
12 | .query(`INSERT INTO dbo.Orders ([User], [IcecreamId], [FullAddress]) VALUES (@userId, @icecreamId, @fullAddress)`);
13 | };
14 |
15 | async function getLastOrder(userId) {
16 | console.log('using database ');
17 |
18 | let pool = await mssql.connect(sqlConfig);
19 | let result = await pool.request()
20 | .input('userId', mssql.NVarChar, userId)
21 | .query(`SELECT TOP 1 * FROM dbo.orders WHERE [User] = @userId ORDER BY [Date] DESC`);
22 |
23 | return result.recordset;
24 | };
25 |
26 | module.exports = { insertOrder, getLastOrder };
27 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/api/shared/user-utils.js:
--------------------------------------------------------------------------------
1 | const getUser = (req) => {
2 | const header = req.headers["x-ms-client-principal"];
3 | if (header != undefined) {
4 | const encoded = Buffer.from(header, "base64");
5 | const decoded = encoded.toString("ascii");
6 |
7 | return JSON.parse(decoded);
8 | } else {
9 | return { userDetails: "anonymous" };
10 | }
11 | };
12 |
13 | module.exports = { getUser };
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 8
4 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true,
5 | },
6 | extends: ['@vue/airbnb', 'plugin:vue/essential'],
7 | // plugins: ['prettier'],
8 | // watch this for explaining why some of this is here
9 | // https://www.youtube.com/watch?time_continue=239&v=YIvjKId9m2c
10 | rules: {
11 | 'no-console': 'off', // process.env.NODE_ENV === 'production' ? 'error' : 'off',
12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
13 | 'consistent-return': 0,
14 | 'linebreak-style': 'off',
15 | quotes: [2, 'single', { avoidEscape: true, allowTemplateLiterals: true }],
16 | // 'prettier/prettier': [
17 | // 'error',
18 | // {
19 | // trailingComma: 'all',
20 | // singleQuote: true,
21 | // printWidth: 80,
22 | // },
23 | // ],
24 | 'vue/no-unused-components': [
25 | 'error',
26 | {
27 | ignoreWhenBindingPresent: true,
28 | },
29 | ],
30 | },
31 | parserOptions: {
32 | parser: 'babel-eslint',
33 | },
34 | };
35 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | # .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw*
22 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "bracketSpacing": true,
3 | "printWidth": 80,
4 | "singleQuote": true,
5 | "tabWidth": 2,
6 | "trailingComma": "all",
7 | "useTabs": false
8 | }
9 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['@vue/cli-plugin-babel/preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coldstart-vue-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "test:e2e": "vue-cli-service test:e2e",
9 | "lint": "vue-cli-service lint"
10 | },
11 | "dependencies": {
12 | "@fortawesome/fontawesome-svg-core": "^1.2.28",
13 | "@fortawesome/free-solid-svg-icons": "^5.13.0",
14 | "@fortawesome/vue-fontawesome": "^0.1.9",
15 | "axios": "^0.19.2",
16 | "bulma": "^0.8.1",
17 | "core-js": "^3.6.5",
18 | "vue": "^2.6.11",
19 | "vue-router": "^3.1.5",
20 | "vuex": "^3.1.3"
21 | },
22 | "devDependencies": {
23 | "@vue/cli-plugin-babel": "~4.3.1",
24 | "@vue/cli-plugin-eslint": "~4.3.1",
25 | "@vue/cli-service": "~4.3.1",
26 | "@vue/eslint-config-airbnb": "^5.0.2",
27 | "@vue/eslint-config-prettier": "^6.0.0",
28 | "babel-eslint": "^10.0.3",
29 | "eslint": "^6.7.2",
30 | "eslint-plugin-import": "^2.20.2",
31 | "eslint-plugin-prettier": "^3.1.2",
32 | "eslint-plugin-vue": "^6.2.2",
33 | "node-sass": "^4.14.1",
34 | "prettier": "^2.0.4",
35 | "sass-loader": "^8.0.2",
36 | "vue-template-compiler": "^2.6.11"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {},
4 | },
5 | };
6 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/public/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 404 - Page Not Found
7 |
16 |
17 |
18 | 404 - Page Not Found
19 |
20 |
21 |
22 |
23 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge2/finished/coldstartapp/vue-app/public/favicon.ico
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
14 |
19 | ColdStart Ice Cream
20 |
21 |
22 |
23 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/public/routes.json:
--------------------------------------------------------------------------------
1 | {
2 | "routes": [
3 | {
4 | "route": "/.auth/login/facebook",
5 | "statusCode": "404"
6 | },
7 | {
8 | "route": "/.auth/login/google",
9 | "statusCode": "404"
10 | },
11 | {
12 | "route": "/api/catalog"
13 | },
14 | {
15 | "route": "/api/recommendations"
16 | },
17 | {
18 | "route": "/api/*",
19 | "allowedRoles": ["authenticated"]
20 | },
21 | {
22 | "route": "/*",
23 | "serve": "/index.html",
24 | "statusCode": 200
25 | }
26 | ],
27 | "platformErrorOverrides": [
28 | {
29 | "errorType": "NotFound",
30 | "serve": "/404.html"
31 | }
32 | ]
33 | }
34 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/app.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge2/finished/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-black.png
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge2/finished/coldstartapp/vue-app/src/assets/COLDSTART-LOGO-white.png
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/assets/js/userInfo.js:
--------------------------------------------------------------------------------
1 | async function getUserInfo() {
2 | try {
3 | console.log('getUserInfo');
4 | const response = await fetch('/.auth/me');
5 | const payload = await response.json();
6 | const { clientPrincipal } = payload;
7 | console.log(clientPrincipal);
8 | return clientPrincipal;
9 | } catch (error) {
10 | console.error('No profile could be found');
11 | return undefined;
12 | }
13 | }
14 |
15 | export { getUserInfo as default };
16 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge2/finished/coldstartapp/vue-app/src/assets/logo.png
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/components/auth-login.vue:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 | {{ provider }}
23 |
24 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/components/auth-logout.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 | Logout
17 |
18 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/components/button-footer.vue:
--------------------------------------------------------------------------------
1 |
36 |
37 |
38 |
50 |
51 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/components/card-content.vue:
--------------------------------------------------------------------------------
1 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
35 |
![]()
36 |
37 |
{{ description }}
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/components/header-bar-brand.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/components/list-header.vue:
--------------------------------------------------------------------------------
1 |
28 |
29 |
30 |
31 |
32 | {{ title }}
33 |
34 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/components/page-not-found.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | These aren't the bits you're looking for
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import App from '@/app.vue';
3 | import router from './router';
4 | import store from './store';
5 |
6 | Vue.config.productionTip = false;
7 |
8 | new Vue({
9 | router,
10 | store,
11 | render: (h) => h(App),
12 | }).$mount('#app');
13 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/router.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Router from 'vue-router';
3 | import PageNotFound from '@/components/page-not-found.vue';
4 |
5 | Vue.use(Router);
6 |
7 | export default new Router({
8 | mode: 'history',
9 | base: process.env.BASE_URL,
10 | routes: [
11 | {
12 | path: '/',
13 | redirect: '/catalog',
14 | },
15 | {
16 | path: '/catalog',
17 | name: 'catalog',
18 | component: () => import(/* webpackChunkName: "catalog" */ './views/catalog/catalog.vue'),
19 | },
20 | {
21 | path: '*',
22 | component: PageNotFound,
23 | },
24 | ],
25 | });
26 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/store/config.js:
--------------------------------------------------------------------------------
1 | const API = process.env.VUE_APP_API || 'api';
2 |
3 | export { API as default };
4 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Vuex from 'vuex';
3 | import icecreamsModule from './modules/icecreams';
4 | import catalogModule from './modules/catalog';
5 | import recommendationsModule from './modules/recommendations';
6 |
7 | Vue.use(Vuex);
8 |
9 | export default new Vuex.Store({
10 | strict: process.env.NODE_ENV !== 'production',
11 | modules: {
12 | icecreams: icecreamsModule,
13 | catalog: catalogModule,
14 | recommendations: recommendationsModule,
15 | },
16 | state: {
17 | },
18 | });
19 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/store/modules/action-utils.js:
--------------------------------------------------------------------------------
1 | export const parseList = (response) => {
2 | if (response.status !== 200) throw Error(response.message);
3 | let list = response.data;
4 | if (typeof list !== 'object') {
5 | list = [];
6 | }
7 | return list;
8 | };
9 |
10 | export const parseItem = (response, code) => {
11 | if (response.status !== code) throw Error(response.message);
12 | let item = response.data;
13 | if (typeof item !== 'object') {
14 | item = undefined;
15 | }
16 | return item;
17 | };
18 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/store/modules/mutation-types.js:
--------------------------------------------------------------------------------
1 | export const ADD_ICECREAM = 'ADD_ICECREAM';
2 | export const GET_ICECREAMS = 'GET_ICECREAMS';
3 | export const GET_CATALOG = 'GET_CATALOG';
4 | export const GET_RECOMMENDATIONS = 'GET_RECOMMENDATIONS';
5 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/src/store/modules/recommendations.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | import API from '../config';
3 | import { parseList } from './action-utils';
4 | import {
5 | GET_RECOMMENDATIONS,
6 | } from './mutation-types';
7 |
8 | const captains = console;
9 |
10 | export default {
11 | strict: process.env.NODE_ENV !== 'production',
12 | namespaced: true,
13 | state: {
14 | recommendations: [],
15 | },
16 | mutations: {
17 | [GET_RECOMMENDATIONS](state, recommendations) {
18 | state.recommendations = recommendations;
19 | },
20 | },
21 | actions: {
22 | async getRecommendationsAction({ commit }) {
23 | try {
24 | const response = await axios.get(`${API}/recommendations`);
25 | const recommendations = parseList(response);
26 | commit(GET_RECOMMENDATIONS, recommendations);
27 | return recommendations;
28 | } catch (error) {
29 | captains.error(error);
30 | throw new Error(error);
31 | }
32 | },
33 |
34 | },
35 | getters: {
36 | recommendations: (state) => state.recommendations,
37 | },
38 | };
39 |
--------------------------------------------------------------------------------
/challenges/challenge2/finished/coldstartapp/vue-app/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | configureWebpack: {
3 | devtool: 'source-map',
4 | },
5 | devServer: {
6 | proxy: {
7 | '/api': {
8 | target: 'http://localhost:7071',
9 | ws: true,
10 | changeOrigin: true,
11 | },
12 | },
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/challenges/challenge2/starter/scripts/sql/create_table_drivers.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE dbo.Drivers (
2 | [Id] int primary key clustered,
3 | [Name] nvarchar(255) not null,
4 | [ImageUrl] nvarchar(2000) DEFAULT 'https://coldstartsa.blob.core.windows.net/web/assets/Driver1.png'
5 | )
6 |
--------------------------------------------------------------------------------
/challenges/challenge2/starter/scripts/sql/create_table_icecreams.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE dbo.Icecreams (
2 | [Id] int primary key clustered,
3 | [Name] nvarchar(255) not null,
4 | [Description] nvarchar(2000) not null,
5 | [ImageUrl] nvarchar(2000) not null
6 | )
7 |
--------------------------------------------------------------------------------
/challenges/challenge2/starter/scripts/sql/create_table_orders.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE dbo.Orders (
2 | Id UNIQUEIDENTIFIER
3 | CONSTRAINT Guid_Default DEFAULT
4 | NEWSEQUENTIALID() ROWGUIDCOL,
5 | [User] nvarchar(255) not null,
6 | [Date] datetime not null DEFAULT (GETDATE()),
7 | [IcecreamId] int not null REFERENCES Icecreams(Id),
8 | [Status] nvarchar(100) not null DEFAULT 'New',
9 | [DriverId] int null REFERENCES Drivers(Id),
10 | [FullAddress] nvarchar(2000),
11 | [LastPosition] nvarchar(500)
12 |
13 | CONSTRAINT Guid_PK PRIMARY KEY (Id)
14 | )
15 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/.funcignore:
--------------------------------------------------------------------------------
1 | *.js.map
2 | *.ts
3 | .git*
4 | .vscode
5 | local.settings.json
6 | test
7 | tsconfig.json
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ms-azuretools.vscode-azurefunctions"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Attach to Node Functions",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "preLaunchTask": "func: host start"
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "azureFunctions.deploySubpath": ".",
3 | "azureFunctions.postDeployTask": "npm install",
4 | "azureFunctions.projectLanguage": "JavaScript",
5 | "azureFunctions.projectRuntime": "~3",
6 | "debug.internalConsoleOptions": "neverOpen",
7 | "azureFunctions.preDeployTask": "npm prune"
8 | }
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "func",
6 | "command": "host start",
7 | "problemMatcher": "$func-node-watch",
8 | "isBackground": true,
9 | "dependsOn": "npm install"
10 | },
11 | {
12 | "type": "shell",
13 | "label": "npm install",
14 | "command": "npm install"
15 | },
16 | {
17 | "type": "shell",
18 | "label": "npm prune",
19 | "command": "npm prune --production",
20 | "problemMatcher": []
21 | }
22 | ]
23 | }
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/host.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0",
3 | "logging": {
4 | "applicationInsights": {
5 | "samplingSettings": {
6 | "isEnabled": true,
7 | "excludedTypes": "Request"
8 | }
9 | }
10 | },
11 | "extensionBundle": {
12 | "id": "Microsoft.Azure.Functions.ExtensionBundle",
13 | "version": "[1.*, 2.0.0)"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/orders-queued/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "name": "myQueueItem",
5 | "type": "queueTrigger",
6 | "direction": "in",
7 | "queueName": "customer-orders",
8 | "connection": "coldstartsa_STORAGE"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/orders-timer/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "name": "myTimer",
5 | "type": "timerTrigger",
6 | "direction": "in",
7 | "schedule": "0 */5 * * * *"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/orders-timer/index.js:
--------------------------------------------------------------------------------
1 | const data = require('../shared/order-cosmos-data');
2 |
3 | /* This function will 'process' all accepted customer orders and send them to the production line.
4 | After processing, the orders will be updated to the 'Ready' state.
5 | The function will be triggered by a timer.
6 | */
7 | module.exports = async function (context, myTimer) {
8 | var timeStamp = new Date().toISOString();
9 |
10 | if (myTimer.isPastDue) {
11 | context.log('JavaScript is running late!');
12 | }
13 |
14 | // Process all accepted customer orders - for sake of demonstration purposes just update their status
15 | await data.produceOrders();
16 |
17 | context.log('JavaScript timer trigger function ran!', timeStamp);
18 | };
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coldstartapi",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "start": "func start",
7 | "test": "echo \"No tests yet...\""
8 | },
9 | "dependencies": {
10 | "@azure/cosmos": "^3.9.5",
11 | "tedious": "^11.0.3"
12 | },
13 | "devDependencies": {}
14 | }
15 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/proxies.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/proxies",
3 | "proxies": {}
4 | }
5 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/shared/catalog-data.js:
--------------------------------------------------------------------------------
1 | const { config } = require("./config");
2 | const { queryDatabase } = require("../shared/sql-utils");
3 |
4 | /**
5 | * Get all catalog items
6 | * @returns collection of catalog items
7 | */
8 | async function getCatalog() {
9 | console.log('using database ');
10 | return await queryDatabase(`SELECT * FROM dbo.Icecreams`)
11 | }
12 |
13 | /**
14 | * Get a catalog item by id
15 | * @param {integer} itemId
16 | * @returns
17 | */
18 | async function getCatalogItemById(itemId) {
19 | console.log('using database ');
20 | return await queryDatabase(`SELECT * FROM dbo.Icecreams WHERE Id = ${itemId}`);
21 | }
22 |
23 | module.exports = { getCatalog, getCatalogItemById };
24 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/shared/config.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | const process = require("process");
3 |
4 | const config = {
5 | azure_storage_connectionstring: process.env.AZURE_STORAGE_CONNECTIONSTRING
6 | };
7 |
8 | // Create connection to database
9 | const sqlConfig = {
10 | authentication: {
11 | options: {
12 | userName: process.env.SQL_USERNAME,
13 | password: process.env.SQL_PASSWORD,
14 | },
15 | type: "default"
16 | },
17 | server: process.env.SQL_SERVERNAME,
18 | options: {
19 | database: "coldstartsql",
20 | encrypt: true
21 | }
22 | };
23 |
24 | const cosmosConfig = {
25 | cosmosdb_endpoint: process.env.COSMOSDB_ENDPOINT,
26 | cosmosdb_key: process.env.COSMOSDB_KEY,
27 | cosmosdb_databaseId: "coldstartdb",
28 | cosmosdb_ordersContainerId: "customerorders",
29 | cosmosdb_ordersPartitionKey: "id",
30 | };
31 |
32 | module.exports = { config, sqlConfig, cosmosConfig };
33 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/shared/driver-data.js:
--------------------------------------------------------------------------------
1 | const { config } = require("./config");
2 | const { queryDatabase } = require("../shared/sql-utils");
3 |
4 | const storageBaseUrl = "https://coldstartsa.blob.core.windows.net/web/assets/";
5 |
6 | // Schema for drivers
7 | const data = {
8 | drivers: [
9 | {
10 | driverId: 1,
11 | name: 'Daisy Driver',
12 | imageUrl: storageBaseUrl + 'Driver1.png'
13 | },
14 | {
15 | driverId: 2,
16 | name: 'Donny Driver',
17 | imageUrl: storageBaseUrl + 'Driver1.png'
18 | },
19 | ],
20 | };
21 |
22 | /**
23 | * Get a driver by it's id
24 | * @param {integer} driverId
25 | * @returns
26 | */
27 | async function getDriverById(driverId) {
28 | console.log('using database ');
29 | return await queryDatabase(`SELECT [Id] as driverId, [Name] as name, [ImageUrl] as imageUrl FROM dbo.Drivers WHERE Id = ${driverId}`);
30 | }
31 |
32 | module.exports = { getDriverById };
33 |
--------------------------------------------------------------------------------
/challenges/challenge3/finished/coldstartapi/shared/user-utils.js:
--------------------------------------------------------------------------------
1 | const getUser = (req) => {
2 | const header = req.headers["x-ms-client-principal"];
3 | if (header != undefined) {
4 | const encoded = Buffer.from(header, "base64");
5 | const decoded = encoded.toString("ascii");
6 |
7 | return JSON.parse(decoded);
8 | } else {
9 | return { userDetails: "John Doe" };
10 | }
11 | };
12 |
13 | module.exports = { getUser };
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/ColdStartCustomerSWA.ComponentsLibrary.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net5.0
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/LocalStorage.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.JSInterop;
2 | using System.Threading.Tasks;
3 |
4 | namespace ColdStartBlazor.ComponentsLibrary
5 | {
6 | public static class LocalStorage
7 | {
8 | public static ValueTask GetAsync(IJSRuntime jsRuntime, string key)
9 | => jsRuntime.InvokeAsync("blazorLocalStorage.get", key);
10 |
11 | public static ValueTask SetAsync(IJSRuntime jsRuntime, string key, object value)
12 | => jsRuntime.InvokeVoidAsync("blazorLocalStorage.set", key, value);
13 |
14 | public static ValueTask DeleteAsync(IJSRuntime jsRuntime, string key)
15 | => jsRuntime.InvokeVoidAsync("blazorLocalStorage.delete", key);
16 | }
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/Map/Map.razor:
--------------------------------------------------------------------------------
1 | @using Microsoft.JSInterop
2 | @inject IJSRuntime JSRuntime
3 |
4 |
5 |
6 | @code {
7 | string elementId = $"map-{Guid.NewGuid().ToString("D")}";
8 |
9 | [Parameter] public double Zoom { get; set; }
10 | [Parameter] public List Markers { get; set; }
11 |
12 | protected async override Task OnAfterRenderAsync(bool firstRender)
13 | {
14 | await JSRuntime.InvokeVoidAsync(
15 | "deliveryMap.showOrUpdate",
16 | elementId,
17 | Markers);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/Map/Marker.cs:
--------------------------------------------------------------------------------
1 | namespace ColdStartCustomerSWA.ComponentsLibrary.Map
2 | {
3 | public class Marker
4 | {
5 | public string Description { get; set; }
6 |
7 | public double X { get; set; }
8 |
9 | public double Y { get; set; }
10 |
11 | public bool ShowPopup { get; set; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/Map/Point.cs:
--------------------------------------------------------------------------------
1 | namespace ColdStartCustomerSWA.ComponentsLibrary.Map
2 | {
3 | public class Point
4 | {
5 | public double X { get; set; }
6 |
7 | public double Y { get; set; }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/background.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/exampleJsInterop.js:
--------------------------------------------------------------------------------
1 | // This is a JavaScript module that is loaded on demand. It can export any number of
2 | // functions, and may import other JavaScript modules if required.
3 |
4 | export function showPrompt(message) {
5 | return prompt(message, 'Type anything here');
6 | }
7 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/layers-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/layers-2x.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/layers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/layers.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/marker-icon-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/marker-icon-2x.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/marker-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/marker-icon.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/marker-shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/leaflet/images/marker-shadow.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomer.ComponentsLibrary/wwwroot/localStorage.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | window.blazorLocalStorage = {
3 | get: key => key in localStorage ? JSON.parse(localStorage[key]) : null,
4 | set: (key, value) => { localStorage[key] = JSON.stringify(value); },
5 | delete: key => { delete localStorage[key]; }
6 | };
7 | })();
8 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA.Shared/ColdStartCustomerSWA.Shared.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA.Shared/Driver.cs:
--------------------------------------------------------------------------------
1 | namespace ColdStartCustomerSWA
2 | {
3 | public class Driver
4 | {
5 | public long? DriverId { get; set; }
6 |
7 | public string Name { get; set; }
8 |
9 | public string ImageUrl { get; set; }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA.Shared/IceCream.cs:
--------------------------------------------------------------------------------
1 | namespace ColdStartCustomerSWA
2 | {
3 | public class IceCream
4 | {
5 | public long Id { get; set; }
6 |
7 | public string Name { get; set; }
8 |
9 | public string Description { get; set; }
10 |
11 | public string ImageUrl { get; set; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA.Shared/Order.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace ColdStartCustomerSWA
4 | {
5 | public class Order
6 | {
7 | public Guid Id { get; set; }
8 |
9 | public string User { get; set; }
10 |
11 | public DateTime Date { get; set; }
12 |
13 | public IceCream IceCream { get; set; }
14 |
15 | public string Status { get; set; }
16 |
17 | public Driver Driver { get; set; }
18 |
19 | public string FullAddress { get; set; }
20 |
21 | public string DeliveryPosition { get; set; }
22 |
23 | public string LastPosition { get; set; }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/App.razor:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Sorry, there's nothing at this address.
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/Pages/LoginProviders.razor:
--------------------------------------------------------------------------------
1 | @page "/login-providers"
2 |
3 | @{
4 | var providers = new Dictionary
5 | {
6 | { "github", "GitHub" },
7 | { "twitter", "Twitter" },
8 | { "facebook", "Facebook" }
9 | };
10 | }
11 |
12 | Login
13 |
14 |
15 | @foreach (var provider in providers)
16 | {
17 |
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/Program.cs:
--------------------------------------------------------------------------------
1 | using AzureStaticWebApps.Blazor.Authentication;
2 | using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
3 | using Microsoft.Extensions.DependencyInjection;
4 | using System;
5 | using System.Net.Http;
6 | using System.Threading.Tasks;
7 |
8 | namespace ColdStartCustomerSWA
9 | {
10 | public class Program
11 | {
12 | public static async Task Main(string[] args)
13 | {
14 | var builder = WebAssemblyHostBuilder.CreateDefault(args);
15 | builder.RootComponents.Add("app");
16 |
17 | builder.Services
18 | .AddTransient(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) })
19 | .AddStaticWebAppsAuthentication();
20 |
21 | builder.Services.AddScoped();
22 |
23 | await builder.Build().RunAsync();
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "iisSettings": {
3 | "windowsAuthentication": false,
4 | "anonymousAuthentication": true,
5 | "iisExpress": {
6 | "applicationUrl": "http://localhost:51678",
7 | "sslPort": 44373
8 | }
9 | },
10 | "profiles": {
11 | "IIS Express": {
12 | "commandName": "IISExpress",
13 | "launchBrowser": true,
14 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
15 | "environmentVariables": {
16 | "ASPNETCORE_ENVIRONMENT": "Development"
17 | }
18 | },
19 | "ColdStartCustomerSWA": {
20 | "commandName": "Project",
21 | "dotnetRunMessages": "true",
22 | "launchBrowser": true,
23 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
24 | "applicationUrl": "https://localhost:5001;http://localhost:5000",
25 | "environmentVariables": {
26 | "ASPNETCORE_ENVIRONMENT": "Development"
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/Shared/LoginDisplay.razor:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ...
5 |
6 |
7 |
8 |
Welcome @context.User.Identity.Name
9 |
Sign out
10 |
11 |
12 |
13 | Log in
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/Shared/MainLayout.razor:
--------------------------------------------------------------------------------
1 | @inherits LayoutComponentBase
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | My Orders
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | @Body
21 |
22 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/_Imports.razor:
--------------------------------------------------------------------------------
1 | @using System.Net.Http
2 | @using System.Net.Http.Json
3 | @using Microsoft.AspNetCore.Components.Forms
4 | @using Microsoft.AspNetCore.Components.Routing
5 | @using Microsoft.AspNetCore.Components.Web
6 | @using Microsoft.AspNetCore.Components.Web.Virtualization
7 | @using Microsoft.AspNetCore.Components.WebAssembly.Http
8 | @using Microsoft.AspNetCore.Components.WebAssembly.Authentication
9 | @using Microsoft.JSInterop
10 | @using ColdStartCustomerSWA
11 | @using ColdStartCustomerSWA.Shared
12 | @using ColdStartCustomerSWA.ComponentsLibrary
13 | @using ColdStartCustomerSWA.ComponentsLibrary.Map
14 | @using ColdStartComponents
15 | @using Microsoft.AspNetCore.Components.Authorization
16 | @using Microsoft.AspNetCore.Authorization
17 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "StaticWebAppsAuthentication": {
3 | "AuthenticationDataUrl": "/sample-data/me.json"
4 | },
5 | "ColdStartApiUrl": "https://coldstartapi.azurewebsites.net/api/"
6 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "ColdStartApiUrl": "api/"
3 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-300.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-300.woff
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-300.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-300.woff2
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-500.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-500.woff
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-500.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-500.woff2
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-700.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-700.woff
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-700.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-700.woff2
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-regular.woff
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/font/quicksand-v8-latin-regular.woff2
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/ICON-LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Waybury
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/font/fonts/open-iconic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/font/fonts/open-iconic.eot
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/font/fonts/open-iconic.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/font/fonts/open-iconic.otf
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/font/fonts/open-iconic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/css/open-iconic/font/fonts/open-iconic.woff
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/img/logo.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/img/orders.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/img/orders.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ColdStartCustomerSWA",
3 | "short_name": "ColdStartCustomerSWA",
4 | "start_url": "./",
5 | "display": "standalone",
6 | "background_color": "#ffffff",
7 | "theme_color": "#03173d",
8 | "icons": [
9 | {
10 | "src": "img/logo.png",
11 | "type": "image/png",
12 | "sizes": "512x512"
13 | }
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/sample-data/me.json:
--------------------------------------------------------------------------------
1 | {
2 | "clientPrincipal": {
3 | "identityProvider": "github",
4 | "userId": "jane.doe",
5 | "userDetails": "Jane Doe",
6 | "userRoles": [
7 | "anonymous",
8 | "authenticated"
9 | ]
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/ColdStartCustomerSWA/ColdStartCustomerSWA/wwwroot/service-worker.js:
--------------------------------------------------------------------------------
1 | self.addEventListener('install', async event => {
2 | console.log('Installing service worker...');
3 | self.skipWaiting();
4 | });
5 |
6 | self.addEventListener('fetch', event => {
7 | // You can add custom logic here for controlling whether to use cached data if offline, etc.
8 | // The following line opts out, so requests go directly to the network as usual.
9 | return null;
10 | });
11 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Assets/AboutAssets.txt:
--------------------------------------------------------------------------------
1 | Any raw assets you want to be deployed with your application can be placed in
2 | this directory (and child directories) and given a Build Action of "AndroidAsset".
3 |
4 | These files will be deployed with your package and will be accessible using Android's
5 | AssetManager, like this:
6 |
7 | public class ReadAsset : Activity
8 | {
9 | protected override void OnCreate (Bundle bundle)
10 | {
11 | base.OnCreate (bundle);
12 |
13 | InputStream input = Assets.Open ("my_asset.txt");
14 | }
15 | }
16 |
17 | Additionally, some Android functions will automatically load asset files:
18 |
19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
20 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/drawable/COLDSTART_LOGO_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/drawable/COLDSTART_LOGO_black.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/drawable/Truck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/drawable/Truck.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/layout/Tabbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/layout/Toolbar.xml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #33C5F3
4 | #95E0F9
5 | #0195C6
6 | #F66970
7 |
8 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.Android/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-125.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-150.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-125.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-150.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-125.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-125.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-150.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-24.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-32.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-125.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-150.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-24.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-32.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.backup.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-125.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-150.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-125.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-150.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Assets/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/COLDSTART_LOGO_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/COLDSTART_LOGO_black.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.Foundation;
7 | using Windows.Foundation.Collections;
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Controls.Primitives;
11 | using Windows.UI.Xaml.Data;
12 | using Windows.UI.Xaml.Input;
13 | using Windows.UI.Xaml.Media;
14 | using Windows.UI.Xaml.Navigation;
15 | using Xamarin.Essentials;
16 |
17 | namespace ColdStartChallenge.DriverApp.UWP
18 | {
19 | public sealed partial class MainPage
20 | {
21 | public MainPage()
22 | {
23 | this.InitializeComponent();
24 | Platform.MapServiceToken = "RJHqIE53Onrqons5CNOx~FrDr3XhjDTyEXEjng-CRoA~Aj69MhNManYUKxo6QcwZ0wmXBtyva0zwuHB04rFYAPf7qqGJ5cHb03RCDw1jIW8l";
25 | LoadApplication(new ColdStartChallenge.DriverApp.App());
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("ColdStartChallenge.DriverApp.UWP")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("ColdStartChallenge.DriverApp.UWP")]
13 | [assembly: AssemblyCopyright("Copyright © 2015")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Version information for an assembly consists of the following four values:
18 | //
19 | // Major Version
20 | // Minor Version
21 | // Build Number
22 | // Revision
23 | //
24 | // You can specify all the values or you can default the Build and Revision Numbers
25 | // by using the '*' as shown below:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.0.0.0")]
28 | [assembly: AssemblyFileVersion("1.0.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Truck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.UWP/Truck.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | keychain-access-groups
6 |
7 | $(AppIdentifierPrefix)be.MADN.ColdStartChallenge.DriverApp
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Main.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 |
5 | using Foundation;
6 | using UIKit;
7 |
8 | namespace ColdStartChallenge.DriverApp.iOS
9 | {
10 | public class Application
11 | {
12 | // This is the main entry point of the application.
13 | static void Main(string[] args)
14 | {
15 | // if you want to use a different Application Delegate class from "AppDelegate"
16 | // you can specify it here.
17 | UIApplication.Main(args, null, "AppDelegate");
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/COLDSTART_LOGO_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/COLDSTART_LOGO_black.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default-568h@2x.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default-Portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default-Portrait.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default-Portrait@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default-Portrait@2x.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Default@2x.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Truck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp.iOS/Resources/Truck.png
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/App.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using ColdStartChallenge.DriverApp.Pages;
2 | using MonkeyCache.FileStore;
3 | using Xamarin.Forms;
4 |
5 | namespace ColdStartChallenge.DriverApp
6 | {
7 | public partial class App : Application
8 | {
9 | public App()
10 | {
11 | InitializeComponent();
12 |
13 | Barrel.ApplicationId = "ColdStartChallenge.DriverApp";
14 |
15 | MainPage = new NavigationPage(new LoginPage());
16 | }
17 |
18 | protected override void OnStart()
19 | {
20 | }
21 |
22 | protected override void OnSleep()
23 | {
24 | }
25 |
26 | protected override void OnResume()
27 | {
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/AppData.cs:
--------------------------------------------------------------------------------
1 | using ColdStartChallenge.DriverApp.Models;
2 |
3 | namespace ColdStartChallenge.DriverApp
4 | {
5 | public sealed class AppData
6 | {
7 | static AppData()
8 | {
9 | }
10 |
11 | private AppData()
12 | {
13 | }
14 |
15 | public static AppData Instance { get; } = new AppData();
16 |
17 | public Driver User { get; set; }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 | using Xamarin.Forms.Xaml;
3 |
4 | [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
5 | [assembly: ExportFont("materialdesignicons-webfont.ttf", Alias = "mdifont")]
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Controls/LoadingView.xaml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
19 |
26 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Converters/SelectedSortOptionToColorConverter.cs:
--------------------------------------------------------------------------------
1 | using ColdStartChallenge.DriverApp.Models;
2 | using System;
3 | using System.Globalization;
4 | using Xamarin.Forms;
5 |
6 | namespace ColdStartChallenge.DriverApp.Converters
7 | {
8 | public class SelectedSortOptionToColorConverter : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11 | {
12 | if(value is SortOption selectedSo && parameter is SortOption so)
13 | {
14 | if (selectedSo == so)
15 | {
16 | return (Color)Application.Current.Resources["ColorPrimaryDark"];
17 | }
18 | }
19 | return (Color)Application.Current.Resources["ColorPrimary"];
20 | }
21 |
22 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
23 | {
24 | throw new NotImplementedException();
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Models/CacheKeys.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace ColdStartChallenge.DriverApp.Models
4 | {
5 | public static class CacheKeys
6 | {
7 | public static string Drivers = "Drivers";
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Models/Constants.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace ColdStartChallenge.DriverApp.Models
4 | {
5 | public static class Constants
6 | {
7 | public const string BASE_URI = "https://*** ENTER THE URL OF YOUR HOSTED API ***/api/";
8 | }
9 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Models/Driver.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Newtonsoft.Json;
3 |
4 | namespace ColdStartChallenge.DriverApp.Models
5 | {
6 | //public class Driver
7 | //{
8 | // public int Id { get; set; }
9 | // public string Name { get; set; }
10 | //}
11 |
12 | public class Driver
13 | {
14 | [JsonProperty("driverId")]
15 | public int? DriverId { get; set; }
16 |
17 | [JsonProperty("name")]
18 | public string Name { get; set; }
19 |
20 | [JsonProperty("imageUrl")]
21 | public Uri ImageUrl { get; set; }
22 | }
23 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Models/Enum.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace ColdStartChallenge.DriverApp.Models
4 | {
5 | ///
6 | /// Now you can use Generics to have cleaner code when enum parsing!
7 | ///
8 | ///
9 | ///
10 | /// CT.Organ organNewParse = Enum.Parse("LENS");
11 | ///
12 | public static class Enum
13 | {
14 | public static T Parse(string value, bool ignoreCase = true)
15 | {
16 | return (T)Enum.Parse(typeof(T), value, ignoreCase);
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Models/Icecream.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Newtonsoft.Json;
3 |
4 | namespace ColdStartChallenge.DriverApp.Models
5 | {
6 | public partial class Icecream
7 | {
8 | [JsonProperty("icecreamId")]
9 | public int IcecreamId { get; set; }
10 |
11 | [JsonProperty("name")]
12 | public string Name { get; set; }
13 |
14 | [JsonProperty("description")]
15 | public string Description { get; set; }
16 |
17 | [JsonProperty("imageUrl")]
18 | public Uri ImageUrl { get; set; }
19 | }
20 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Models/Location.cs:
--------------------------------------------------------------------------------
1 | namespace ColdStartChallenge.DriverApp.Models
2 | {
3 | public class Location
4 | {
5 | public double Longitude { get; set; }
6 | public double Latitude { get; set; }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Models/OrderStatus.cs:
--------------------------------------------------------------------------------
1 | namespace ColdStartChallenge.DriverApp.Models
2 | {
3 | public enum OrderStatus
4 | {
5 | New,
6 | Ready,
7 | Delivering,
8 | Completed
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Models/SortOption.cs:
--------------------------------------------------------------------------------
1 | namespace ColdStartChallenge.DriverApp.Models
2 | {
3 | public enum SortOption
4 | {
5 | Recency,
6 | Distance
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Navigation/NavigationMode.cs:
--------------------------------------------------------------------------------
1 | namespace ColdStartChallenge.DriverApp.Navigation
2 | {
3 | public enum NavigationMode
4 | {
5 | New,
6 | Back
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Pages/DashboardPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using ColdStartChallenge.DriverApp.ViewModels;
2 | using Xamarin.Forms;
3 | using Xamarin.Forms.Xaml;
4 |
5 | namespace ColdStartChallenge.DriverApp.Pages
6 | {
7 | [XamlCompilation(XamlCompilationOptions.Compile)]
8 | public partial class DashboardPage : ContentPage
9 | {
10 | public DashboardPage()
11 | {
12 | InitializeComponent();
13 | BindingContext = new DashboardPageViewModel(Navigation);
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Pages/DeliveryDetailPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using ColdStartChallenge.DriverApp.Models;
3 | using ColdStartChallenge.DriverApp.ViewModels;
4 | using Xamarin.Forms;
5 | using Xamarin.Forms.Xaml;
6 |
7 | namespace ColdStartChallenge.DriverApp.Pages
8 | {
9 | [XamlCompilation(XamlCompilationOptions.Compile)]
10 | public partial class DeliveryDetailPage : ContentPage
11 | {
12 | public DeliveryDetailPage(Guid orderId, OrderStatus orderStatus = OrderStatus.Ready)
13 | {
14 | InitializeComponent();
15 | BindingContext = new DeliveryDetailPageViewModel(Navigation, orderId, orderStatus);
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Pages/LoginPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using ColdStartChallenge.DriverApp.ViewModels;
2 | using Xamarin.Forms;
3 | using Xamarin.Forms.Xaml;
4 |
5 | namespace ColdStartChallenge.DriverApp.Pages
6 | {
7 | [XamlCompilation(XamlCompilationOptions.Compile)]
8 | public partial class LoginPage : ContentPage
9 | {
10 | public LoginPage()
11 | {
12 | InitializeComponent();
13 | BindingContext = new LoginPageViewModel(Navigation);
14 | }
15 |
16 | //protected override void OnDisappearing()
17 | //{
18 | // if(Navigation.NavigationStack.Last() != this)
19 | // Navigation.RemovePage(this);
20 |
21 | // base.OnDisappearing();
22 | //}
23 | }
24 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Resources/Fonts/materialdesignicons-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ColdStart-Challenge/ColdStart-Challenge-2021/96d66db71307cb4714c8f4626366abb76f2ba1c0/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Resources/Fonts/materialdesignicons-webfont.ttf
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Resources/Styles.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 |
3 | namespace ColdStartChallenge.DriverApp.Resources
4 | {
5 | public partial class Styles : ResourceDictionary
6 | {
7 | public Styles()
8 | {
9 | InitializeComponent();
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Services/CredentialsService.cs:
--------------------------------------------------------------------------------
1 | using System.Threading.Tasks;
2 | using Xamarin.Essentials;
3 |
4 | namespace ColdStartChallenge.DriverApp.Services
5 | {
6 | public class CredentialsService
7 | {
8 | private const string UsernameKey = "username";
9 | private const string PasswordKey = "password";
10 |
11 | public Task StoreCredentials(string username, string passwd)
12 | {
13 | return Task.WhenAll(
14 | SecureStorage.SetAsync(UsernameKey, username),
15 | SecureStorage.SetAsync(PasswordKey, passwd)
16 | );
17 | }
18 |
19 | public async Task<(string username, string password)> GetCredentials()
20 | {
21 | var usernameTask = SecureStorage.GetAsync(UsernameKey);
22 | var passwordTask = SecureStorage.GetAsync(PasswordKey);
23 |
24 | await Task.WhenAll(usernameTask, passwordTask);
25 |
26 | return (usernameTask.Result, passwordTask.Result);
27 | }
28 |
29 | public void Purge()
30 | {
31 | SecureStorage.Remove(UsernameKey);
32 | SecureStorage.Remove(PasswordKey);
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/Services/LoginService.cs:
--------------------------------------------------------------------------------
1 | using ColdStartChallenge.DriverApp.Models;
2 | using System.Threading.Tasks;
3 |
4 | namespace ColdStartChallenge.DriverApp.Services
5 | {
6 | public class LoginService
7 | {
8 | public async Task Login(string username, string password)
9 | {
10 | //Dummy implementation, due to no actual authentication on backend
11 | await Task.Delay(1000);
12 |
13 | if( username == "MADN")
14 | {
15 | return new Driver
16 | {
17 | DriverId = 1,
18 | Name = "Mike"
19 | };
20 | }
21 | return null;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/DriverApp/ColdStartChallenge.DriverApp/ColdStartChallenge.DriverApp/ViewModels/BindableBase.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using System.Runtime.CompilerServices;
3 |
4 | namespace ColdStartChallenge.DriverApp.ViewModels
5 | {
6 | public class BindableBase : INotifyPropertyChanged
7 | {
8 | protected void RaisePropertyChanged([CallerMemberName] string property = null)
9 | => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
10 |
11 | public event PropertyChangedEventHandler PropertyChanged;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/.funcignore:
--------------------------------------------------------------------------------
1 | *.js.map
2 | *.ts
3 | .git*
4 | .vscode
5 | local.settings.json
6 | test
7 | tsconfig.json
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ms-azuretools.vscode-azurefunctions"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Attach to Node Functions",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "preLaunchTask": "func: host start"
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "azureFunctions.deploySubpath": ".",
3 | "azureFunctions.postDeployTask": "npm install",
4 | "azureFunctions.projectLanguage": "JavaScript",
5 | "azureFunctions.projectRuntime": "~3",
6 | "debug.internalConsoleOptions": "neverOpen",
7 | "azureFunctions.preDeployTask": "npm prune"
8 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "func",
6 | "command": "host start",
7 | "problemMatcher": "$func-node-watch",
8 | "isBackground": true,
9 | "dependsOn": "npm install"
10 | },
11 | {
12 | "type": "shell",
13 | "label": "npm install",
14 | "command": "npm install"
15 | },
16 | {
17 | "type": "shell",
18 | "label": "npm prune",
19 | "command": "npm prune --production",
20 | "problemMatcher": []
21 | }
22 | ]
23 | }
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/host.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0",
3 | "logging": {
4 | "applicationInsights": {
5 | "samplingSettings": {
6 | "isEnabled": true,
7 | "excludedTypes": "Request"
8 | }
9 | }
10 | },
11 | "extensionBundle": {
12 | "id": "Microsoft.Azure.Functions.ExtensionBundle",
13 | "version": "[1.*, 2.0.0)"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/myorders-get/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["get"],
9 | "route": "my-orders"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/myorders-get/index.js:
--------------------------------------------------------------------------------
1 | const { getUser } = require('../shared/user-utils');
2 | const data = require('../shared/order-cosmos-data');
3 |
4 | module.exports = async function (context, req) {
5 | try {
6 | // Get the user information from the header, as specified in SWA
7 | const user = getUser(req);
8 |
9 | // Get the user's orders, regardless of status
10 | console.log(`User info: ${user}`);
11 | let items = await data.getMyOrders(user.userDetails);
12 |
13 | // Remove Cosmos DB technical fields when returning results
14 | items = data.removeTechnicalAttributes(items);
15 | context.res.status(200).json(items);
16 | } catch (error) {
17 | context.res.status(500).send(error);
18 | }
19 | };
20 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/orders-get/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["get"],
9 | "route": "orders"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/orders-get/index.js:
--------------------------------------------------------------------------------
1 | const data = require('../shared/order-cosmos-data');
2 |
3 | module.exports = async function (context, req) {
4 | try {
5 | // Get the status filter from the query string
6 | let status = req.query.status;
7 | if (!status) {
8 | status = 'Ready';
9 | }
10 |
11 | // Get the orders for the given state
12 | let items = await data.getOrdersByStatus(status);
13 |
14 | // Remove Cosmos DB technical fields when returning results
15 | items = data.removeTechnicalAttributes(items);
16 | context.res.status(200).json(items);
17 | } catch (error) {
18 | context.res.status(500).send(error);
19 | }
20 | };
21 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/orders-put/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "authLevel": "anonymous",
5 | "type": "httpTrigger",
6 | "direction": "in",
7 | "name": "req",
8 | "methods": ["put"],
9 | "route": "orders/{Id}"
10 | },
11 | {
12 | "type": "http",
13 | "direction": "out",
14 | "name": "res"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/orders-queued/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "name": "myQueueItem",
5 | "type": "queueTrigger",
6 | "direction": "in",
7 | "queueName": "customer-orders",
8 | "connection": "coldstartsa_STORAGE"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/orders-timer/function.json:
--------------------------------------------------------------------------------
1 | {
2 | "bindings": [
3 | {
4 | "name": "myTimer",
5 | "type": "timerTrigger",
6 | "direction": "in",
7 | "schedule": "0 */5 * * * *"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/orders-timer/index.js:
--------------------------------------------------------------------------------
1 | const data = require('../shared/order-cosmos-data');
2 |
3 | /* This function will 'process' all accepted customer orders and send them to the production line.
4 | After processing, the orders will be updated to the 'Ready' state.
5 | The function will be triggered by a timer.
6 | */
7 | module.exports = async function (context, myTimer) {
8 | var timeStamp = new Date().toISOString();
9 |
10 | if (myTimer.isPastDue) {
11 | context.log('JavaScript is running late!');
12 | }
13 |
14 | // Process all accepted customer orders - for sake of demonstration purposes just update their status
15 | await data.produceOrders();
16 |
17 | context.log('JavaScript timer trigger function ran!', timeStamp);
18 | };
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coldstartapi",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "start": "func start",
7 | "test": "echo \"No tests yet...\""
8 | },
9 | "dependencies": {
10 | "@azure/cosmos": "^3.9.5",
11 | "tedious": "^11.0.3"
12 | },
13 | "devDependencies": {}
14 | }
15 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/proxies.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/proxies",
3 | "proxies": {}
4 | }
5 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/shared/catalog-data.js:
--------------------------------------------------------------------------------
1 | const { config } = require("./config");
2 | const { queryDatabase } = require("../shared/sql-utils");
3 |
4 | /**
5 | * Get all catalog items
6 | * @returns collection of catalog items
7 | */
8 | async function getCatalog() {
9 | console.log('using database ');
10 | return await queryDatabase(`SELECT * FROM dbo.Icecreams`)
11 | }
12 |
13 | /**
14 | * Get a catalog item by id
15 | * @param {integer} itemId
16 | * @returns
17 | */
18 | async function getCatalogItemById(itemId) {
19 | console.log('using database ');
20 | return await queryDatabase(`SELECT * FROM dbo.Icecreams WHERE Id = ${itemId}`);
21 | }
22 |
23 | module.exports = { getCatalog, getCatalogItemById };
24 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/shared/config.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | const process = require("process");
3 |
4 | const config = {
5 | azure_storage_connectionstring: process.env.AZURE_STORAGE_CONNECTIONSTRING
6 | };
7 |
8 | // Create connection to database
9 | const sqlConfig = {
10 | authentication: {
11 | options: {
12 | userName: process.env.SQL_USERNAME,
13 | password: process.env.SQL_PASSWORD,
14 | },
15 | type: "default"
16 | },
17 | server: process.env.SQL_SERVERNAME,
18 | options: {
19 | database: "coldstartsql",
20 | encrypt: true
21 | }
22 | };
23 |
24 | const cosmosConfig = {
25 | cosmosdb_endpoint: process.env.COSMOSDB_ENDPOINT,
26 | cosmosdb_key: process.env.COSMOSDB_KEY,
27 | cosmosdb_databaseId: "coldstartdb",
28 | cosmosdb_ordersContainerId: "customerorders",
29 | cosmosdb_ordersPartitionKey: "id",
30 | };
31 |
32 | module.exports = { config, sqlConfig, cosmosConfig };
33 |
--------------------------------------------------------------------------------
/challenges/challenge4/starter/coldstartapi/shared/user-utils.js:
--------------------------------------------------------------------------------
1 | const getUser = (req) => {
2 | const header = req.headers["x-ms-client-principal"];
3 | if (header != undefined) {
4 | const encoded = Buffer.from(header, "base64");
5 | const decoded = encoded.toString("ascii");
6 |
7 | return JSON.parse(decoded);
8 | } else {
9 | return { userDetails: "John Doe" };
10 | }
11 | };
12 |
13 | module.exports = { getUser };
--------------------------------------------------------------------------------