diff --git a/src/GameIdeas/.idea/.idea.GameIdeas/.idea/.gitignore b/src/GameIdeas/.idea/.idea.GameIdeas/.idea/.gitignore
new file mode 100644
index 0000000..225498d
--- /dev/null
+++ b/src/GameIdeas/.idea/.idea.GameIdeas/.idea/.gitignore
@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/projectSettingsUpdater.xml
+/.idea.GameIdeas.iml
+/modules.xml
+/contentModel.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/src/GameIdeas/.idea/.idea.GameIdeas/.idea/indexLayout.xml b/src/GameIdeas/.idea/.idea.GameIdeas/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/src/GameIdeas/.idea/.idea.GameIdeas/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/GameIdeas/.idea/.idea.GameIdeas/.idea/vcs.xml b/src/GameIdeas/.idea/.idea.GameIdeas/.idea/vcs.xml
new file mode 100644
index 0000000..8fe5bdb
--- /dev/null
+++ b/src/GameIdeas/.idea/.idea.GameIdeas/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/GameIdeas/.vscode/launch.json b/src/GameIdeas/.vscode/launch.json
new file mode 100644
index 0000000..8bd454a
--- /dev/null
+++ b/src/GameIdeas/.vscode/launch.json
@@ -0,0 +1,51 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "dotNetConfig": {},
+ "name": "Debug Blazor Application",
+ "type": "blazorwasm",
+ "request": "launch",
+ "browser": "chrome",
+ "cwd": "${workspaceFolder}/Client/GameIdeas.BlazorApp",
+ "url": "http://localhost:5172",
+ "presentation": {
+ "group": "group 2: Single",
+ "order": 2
+ },
+ },
+ {
+ "name": "Debug API Server",
+ "type": "coreclr",
+ "request": "launch",
+ "preLaunchTask": "Build API Server",
+ "program": "${workspaceFolder}/Server/GameIdeas.WebAPI/bin/Debug/net9.0/GameIdeas.WebAPI.dll",
+ "cwd": "${workspaceFolder}/Server/GameIdeas.WebAPI",
+ "stopAtEntry": false,
+ "env": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "presentation": {
+ "group": "group 2: Single",
+ "order": 2
+ }
+ }
+ ],
+ "compounds": [
+ {
+ "name": "Launch GameIdeas",
+ "configurations": [
+ "Debug API Server",
+ "Debug Blazor Application"
+ ],
+ "stopAll": true,
+ "presentation": {
+ "group": "group 1: Group",
+ "order": 1
+ },
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/GameIdeas/.vscode/tasks.json b/src/GameIdeas/.vscode/tasks.json
new file mode 100644
index 0000000..ab8801a
--- /dev/null
+++ b/src/GameIdeas/.vscode/tasks.json
@@ -0,0 +1,27 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "type": "shell",
+ "command": "dotnet build",
+ "label": "Build API Server",
+ "isBackground": true,
+ "options": {
+ "cwd": "${workspaceFolder}"
+ },
+ "problemMatcher":{
+ "pattern": {
+ "regexp": "^.*$",
+ "file": 0,
+ "location": 1,
+ "message": 2
+ },
+ "background": {
+ "activeOnStart": true,
+ "beginsPattern": ".*",
+ "endsPattern": "Compiled|Failed|compiled|failed|ready"
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Exceptions/UserInvalidException.cs b/src/GameIdeas/GameIdeas.Shared/Exceptions/UserInvalidException.cs
similarity index 63%
rename from src/GameIdeas/Server/GameIdeas.WebAPI/Exceptions/UserInvalidException.cs
rename to src/GameIdeas/GameIdeas.Shared/Exceptions/UserInvalidException.cs
index a5ca0c0..1e6d328 100644
--- a/src/GameIdeas/Server/GameIdeas.WebAPI/Exceptions/UserInvalidException.cs
+++ b/src/GameIdeas/GameIdeas.Shared/Exceptions/UserInvalidException.cs
@@ -1,3 +1,3 @@
-namespace GameIdeas.WebAPI.Exceptions;
+namespace GameIdeas.Shared.Exceptions;
public class UserInvalidException(string message) : Exception(message);
diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Exceptions/UserUnauthorizedException.cs b/src/GameIdeas/GameIdeas.Shared/Exceptions/UserUnauthorizedException.cs
similarity index 65%
rename from src/GameIdeas/Server/GameIdeas.WebAPI/Exceptions/UserUnauthorizedException.cs
rename to src/GameIdeas/GameIdeas.Shared/Exceptions/UserUnauthorizedException.cs
index 95006e1..cacdacd 100644
--- a/src/GameIdeas/Server/GameIdeas.WebAPI/Exceptions/UserUnauthorizedException.cs
+++ b/src/GameIdeas/GameIdeas.Shared/Exceptions/UserUnauthorizedException.cs
@@ -1,3 +1,3 @@
-namespace GameIdeas.WebAPI.Exceptions;
+namespace GameIdeas.Shared.Exceptions;
public class UserUnauthorizedException(string message) : Exception(message);
diff --git a/src/GameIdeas/GameIdeas.Shared/Options/GameIdeasOptions.cs b/src/GameIdeas/GameIdeas.Shared/Options/GameIdeasOptions.cs
new file mode 100644
index 0000000..dd9df72
--- /dev/null
+++ b/src/GameIdeas/GameIdeas.Shared/Options/GameIdeasOptions.cs
@@ -0,0 +1,12 @@
+namespace GameIdeas.Shared.Options;
+
+public class GameIdeasOptions
+{
+ public string DbHost { get; set; } = string.Empty;
+ public string DbUsername { get; set; } = string.Empty;
+ public string DbPassword { get; set; } = string.Empty;
+ public string DbDatabase { get; set; } = string.Empty;
+ public string JwtKey { get; set; } = string.Empty;
+ public string JwtIssuer { get; set; } = string.Empty;
+ public string JwtAudience { get; set; } = string.Empty;
+}
\ No newline at end of file
diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/UserController.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/UserController.cs
index 4266b7d..dd804b1 100644
--- a/src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/UserController.cs
+++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Controllers/UserController.cs
@@ -1,6 +1,6 @@
using GameIdeas.Shared.Constants;
using GameIdeas.Shared.Dto;
-using GameIdeas.WebAPI.Exceptions;
+using GameIdeas.Shared.Exceptions;
using GameIdeas.WebAPI.Services.Users;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/GameIdeas.WebAPI.csproj b/src/GameIdeas/Server/GameIdeas.WebAPI/GameIdeas.WebAPI.csproj
index 32e89b5..f776445 100644
--- a/src/GameIdeas/Server/GameIdeas.WebAPI/GameIdeas.WebAPI.csproj
+++ b/src/GameIdeas/Server/GameIdeas.WebAPI/GameIdeas.WebAPI.csproj
@@ -28,4 +28,8 @@
+
+
+
+
diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Program.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Program.cs
index 6f1e4e2..449dd0b 100644
--- a/src/GameIdeas/Server/GameIdeas.WebAPI/Program.cs
+++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Program.cs
@@ -134,7 +134,6 @@ async Task LoadTranslations()
app.Services.GetRequiredService().Initialize(dictionary);
ResourcesKey.Initialize(app.Services.GetRequiredService());
-
}
string GetConnectionString()
diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserReadService.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserReadService.cs
index 6342c6a..6b53fff 100644
--- a/src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserReadService.cs
+++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserReadService.cs
@@ -4,13 +4,13 @@ using GameIdeas.Shared.Constants;
using GameIdeas.Shared.Dto;
using GameIdeas.Shared.Model;
using GameIdeas.WebAPI.Context;
-using GameIdeas.WebAPI.Exceptions;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
+using GameIdeas.Shared.Exceptions;
namespace GameIdeas.WebAPI.Services.Users;
diff --git a/src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserWriteService.cs b/src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserWriteService.cs
index 5a7f041..2c11c68 100644
--- a/src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserWriteService.cs
+++ b/src/GameIdeas/Server/GameIdeas.WebAPI/Services/Users/UserWriteService.cs
@@ -1,7 +1,7 @@
using GameIdeas.Resources;
using GameIdeas.Shared.Dto;
+using GameIdeas.Shared.Exceptions;
using GameIdeas.Shared.Model;
-using GameIdeas.WebAPI.Exceptions;
using Microsoft.AspNetCore.Identity;
namespace GameIdeas.WebAPI.Services.Users;