Skip to content

Latest commit

 

History

History
135 lines (89 loc) · 6.49 KB

README.md

File metadata and controls

135 lines (89 loc) · 6.49 KB

Overview

API build

DateNight provides couples a fun and conflict-free solution for deciding on an activity for date night. It's the app version of drawing an idea out of a hat.

Contributing

The app is a .NET MAUI Blazor Hybrid app primarily developed on Windows using Visual Studio 2022. It communicates via REST to a back-end API also written in .NET. Since .NET is cross-platform, any operating system and editor could be used for development. These instructions will be assuming a Windows Visual Studio 2022 development environment.

Development Tools

Download and install the following tools:

  • Visual Studio 2022 with the .NET Multi-platform App UI development workload.
  • SonarLint for Visual Studio 2022 – A Visual Studio Extension that helps you detect and fix bugs, code smells, and security vulnerabilities.
  • CodeMaid VS2022 - An open-source Visual Studio extension to cleanup and simplify C# code.
    • Ensure Automatic Cleanup On Save is set to ON.

Data Storage

Azure Cosmos DB, a noSQL relational database service hosted in Azure, is used for data storage. There are two containers defined in this database: the ideas container and the users container. For a quick-setup guide to set up your own instance, you can follow these instructions.

The image below is an example Azure Cosmos DB. The database name is fmcgarry, the ideas container is named datenight-development, and the users container is called datenight-users-development.

Optionally, you can define "IsLocal": true in the appsettings configuration parameter to use in-memory data storage. More details on setting appsetting configuration values can be found in the next section.

Configuration and Secrets Storage

Define the configuration values below in appsettings.json, subsituting your values:

"DateNightDatabase": {
    "ConnectionString": "",
    "DatabaseId": "",
    "IdeasContainer": "",
    "UsersContainer": ""
  },
  "JwtSettings": {
    "Key": "",
    "Issuer": "",
    "Audience": ""
  },
  "ApplicationInsights": {
    "ConnectionString": ""
  }

If the DateNightDatabase setting in the ConnectionString section is not defined in appsettings.json, the API will utilize in-memory storage for ideas and users.

Optionally, if using Azure Key Vault, you may include a KeyVaultName setting. The value is name of your key vault instance located in the url: https://{name}.azure.net/. Any values in the above configuration will be overridden with the values stored in Key Vault.

If running the API locally, the Issuer and Audience values above should be set to https://localhost:{port} in appsettings.json. The full URL you need is defined in the address bar when you run the API project.

Deployment Instructions

The app itself can be compiled and run on Windows, Android, or iOS. The API is deployed to an Azure App instance using a GitHub Action (which you can find out how to do yourself here).

Running the App in Visual Studio

The App requires an active connection to the API. To run both locally, open a terminal in the API project’s location and run the following command dotnet run.

image

Then in Visual Studio, ensure the App project is set as the active project and click the play button:

image

Features

See below for things you can do in the app.

Date Ideas

Create, edit, and delete date ideas. Include a descriptive title and description for each idea you create:

View all the ideas that you have previously created in one convenient location:

Cycle through randomly presented ideas and select the perfect one as tonight’s date:

View your active date at any time. Complete or abandon it whenever the date is finished:

Get suggestions for new ideas, which you can steal from other users and add to your own collection:

Individual User Accounts

Create and log into your own personal account:

Edit and update your account information, and change your password whenever it suits you:

Enjoy With Others

Register with others to form a partnership, which combines each user’s date ideas into a single collection. The active date is also synced for each user to view and manage on their own device: