# MyOffice **Layers** Frontend <-> Backend <-> Services <-> Repositories <-> Database *1. MyOffice.SPA* Frontend layer Angular *2. MyOffice.Web* Backend layer ASP Core *3. MyOffice.Data.Services* Services layer *5. MyOffice.Data.Models* Models *6. MyOffice.Data.Repositories* Database layer *7. MyOffice.DbContext* AppDbContext EntityFramework Core *8. MyOffice.Migrations.Postgres* Postgres Migrations *9. MyOffice.Migrations.Sqlite* Sqlite Migrations **DataBase** 1. SQLite 2. PostgreSql 3. MS SQL **Develompent** 1. Local IIS 2. Express IIS **Authentication & Authorization** 1. OpenIddict (replaces IdentityServer4) 2. Custom UserStore + Identity V3 password hashes (legacy hashes rehashed on login) 3. SPA: email/password via ROPC (kept); Authorization Code + PKCE configured for interactive OIDC 4. Login with Google / Auth0 (`external` grant) 5. Details: [docs/AUTH.md](docs/AUTH.md), refactoring: [docs/REFACTORING_PLAN.md](docs/REFACTORING_PLAN.md) **Build & Deploy** 1. Build with .bat 2. Deploy to Linux **Get started** 1. Restore / build: `dotnet build MyOffice.Web/MyOffice.Web.csproj` 2. SPA: `cd MyOffice.SPA && npm install && npm start` (default http://localhost:4300) 3. Set startup project to `MyOffice.Web`, run (API default http://localhost:9100) 4. Ensure `FrontEnd:Host` matches the SPA origin (`appsettings.json`) 5. Tests: `dotnet test MyOffice.Tests/MyOffice.Tests.csproj` 6. Empty DB is auto-filled with demo users (rates at Jan 1, sample accounts/items/motions): - `user_UAH@user_UAH.userUAH` / `user_UAH` - `user_USD@user_USD.userUSD` / `user_USD` - `user_EUR@user_EUR.userEUR` / `user_EUR` **add site to IIS** 1. add Site name:myproject Physical path:...\MyProject\MyProject.Web Port:9100 2. Select 'IIS', Run Backend (F5) **Settings** 1. launchSettings.json 2. appsettings appsettings.json appsettings.Development.json appsettings.Production.json 3. Optional: `AutoMapper:LicenseKey` (or env `AUTOMAPPER_LICENSE_KEY`) — free Community key from https://automapper.io if under ~$5M revenue. Empty works; you only get license warning logs. **External providers** 1. Auth0 appsettings ExternalProviders:Auth0 2. Google appsettings ExternalProviders:Google **PowerShell scripts** 1. use 'Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass' to allow run *.ps1 2. params.txt 2.1. publish_folder=_Published (folder to publish) 2.2. linux_user=root (linux user) 2.3. linux_host=192.168.1.215 (linux host) 2.4. linux_folder=/var/www/MyProject (folder in linux) **Build** 1. .\build.ps1 1.1. '.\build.ps1' - build Backend + Frontend 1.2. '.\build.ps1 dotnet' build Backend 1.3. '.\build.ps1 spa' build Frontend **Docker demo** (SPA + API + Postgres + pgAdmin) 1. `cd Docker` then `.\build.ps1` (defaults :32080 / :32081 / :32082) 2. After code changes: `.\build.ps1 rebuild` (or `.\build.ps1 reset` to wipe DB + re-seed) 3. Details: [Docker/README.md](Docker/README.md) **Proxmox** (Gitea public scripts + release artifact) 1. Maintainer: `.\proxmox\publish.ps1 -Tar` → `.\proxmox\release.ps1` → `.\proxmox\sync-public.ps1 -Push` (or Gitea Actions) 2. User on Proxmox: set `GITEA_URL` / `GITEA_OWNER` / `REPO_RAW_BASE`, run `myoffice.sh` (see [proxmox/README.md](proxmox/README.md)) 3. Proxy nginx to `http://:9100` 4. Lab SSH (no Gitea): `.\proxmox\deploy.ps1 -TargetHost `