Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
da62450
Adapt plan MAUI-task verification for no-JDK/Android-SDK host
SoleFitnessUS Jun 29, 2026
15a032f
chore: scaffold solution and shared build config
MatthewHsu1 Jun 29, 2026
41ebbd1
feat(domain): add User entity and IUserRepository port
MatthewHsu1 Jun 29, 2026
1860751
fix(domain): remove template test, redundant props; add null Rename case
MatthewHsu1 Jun 29, 2026
0979bfe
build: disable SCM git queries (unreadable .gitmodules in build env)
SoleFitnessUS Jun 29, 2026
b411704
test(domain): silence CS8604 on deliberate null Rename case
SoleFitnessUS Jun 29, 2026
65f70fd
feat(application): add user use cases, DTO, and DI registration
MatthewHsu1 Jun 29, 2026
d4973bb
test(application): cover AddUserUseCase; fix trailing newline
MatthewHsu1 Jun 29, 2026
ebf387a
feat(infrastructure): add EF Core SQLite UserRepository and DI
MatthewHsu1 Jun 29, 2026
07cd155
feat(maui): add MAUI host with HybridWebView and DI wiring
MatthewHsu1 Jun 29, 2026
1734feb
fix(maui): use CreateWindow instead of deprecated Application.MainPage
MatthewHsu1 Jun 29, 2026
9b84fcf
feat(maui): add UsersBridge JS<->C# endpoint
MatthewHsu1 Jun 30, 2026
f6183c9
feat(web): add Vite React TS app with typed bridge client
MatthewHsu1 Jun 30, 2026
fe063e7
chore: untrack Resources/Raw/web build output (regenerated by Vite)
SoleFitnessUS Jun 30, 2026
54b9a1c
build(maui): run Vite build before MAUI build (toggleable)
MatthewHsu1 Jun 30, 2026
b811ae7
build(maui): revert React-build hook to plain BeforeBuild (avoid inte…
SoleFitnessUS Jun 30, 2026
d7708d5
docs: add README with layout, dev loop, bridge, and known issues
MatthewHsu1 Jun 30, 2026
4e5157d
fix: use IDbContextFactory for safe DbContext lifetime; review cleanups
MatthewHsu1 Jun 30, 2026
555c3b8
ci: add GitHub Actions workflow (dotnet + web tests)
SoleFitnessUS Jun 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
root = true

[*.cs]
indent_style = space
indent_size = 4
dotnet_sort_system_directives_first = true

[*.{ts,tsx,js,jsx,json}]
indent_style = space
indent_size = 2
57 changes: 57 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
dotnet-tests:
name: dotnet-tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

# The MAUI host project (src/AppName.Maui) is intentionally not built here:
# it requires the MAUI workload + platform SDKs. The platform-neutral layers
# (Domain / Application / Infrastructure) carry the unit tests and build on
# a plain runner.
- name: Test Domain
run: dotnet test tests/AppName.Domain.Tests/AppName.Domain.Tests.csproj --configuration Release

- name: Test Application
run: dotnet test tests/AppName.Application.Tests/AppName.Application.Tests.csproj --configuration Release

- name: Test Infrastructure
run: dotnet test tests/AppName.Infrastructure.Tests/AppName.Infrastructure.Tests.csproj --configuration Release

web-tests:
name: web-tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: src/web
steps:
- uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '24'
cache: 'npm'
cache-dependency-path: src/web/package-lock.json

- name: Install dependencies
run: npm ci

- name: Run tests
run: npm test

- name: Build
run: npm run build
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# .NET
bin/
obj/
*.user
.vs/

# MAUI / mobile
*.binlog

# Node / Vite
node_modules/
dist/
src/AppName.Maui/Resources/Raw/web/

# OS
.DS_Store
131 changes: 131 additions & 0 deletions AppName.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Domain", "src\AppName.Domain\AppName.Domain.csproj", "{BE21E412-1CC0-4DDD-9604-733B75B00B26}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Domain.Tests", "tests\AppName.Domain.Tests\AppName.Domain.Tests.csproj", "{CA24E7F9-72FD-4649-8133-66E21452E65C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Application", "src\AppName.Application\AppName.Application.csproj", "{8BE7AB9B-9344-4252-AA1C-825487314E58}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Application.Tests", "tests\AppName.Application.Tests\AppName.Application.Tests.csproj", "{7F395C90-4E7B-4827-BD62-762E4AA60AE4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Infrastructure", "src\AppName.Infrastructure\AppName.Infrastructure.csproj", "{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Infrastructure.Tests", "tests\AppName.Infrastructure.Tests\AppName.Infrastructure.Tests.csproj", "{0F95507E-D2E4-48DD-AB43-70A0E26195E9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppName.Maui", "src\AppName.Maui\AppName.Maui.csproj", "{89E211BB-FCAF-4A7D-8252-314AE63C4930}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|x64.ActiveCfg = Debug|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|x64.Build.0 = Debug|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|x86.ActiveCfg = Debug|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Debug|x86.Build.0 = Debug|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|Any CPU.Build.0 = Release|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|x64.ActiveCfg = Release|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|x64.Build.0 = Release|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|x86.ActiveCfg = Release|Any CPU
{BE21E412-1CC0-4DDD-9604-733B75B00B26}.Release|x86.Build.0 = Release|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|x64.ActiveCfg = Debug|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|x64.Build.0 = Debug|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|x86.ActiveCfg = Debug|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Debug|x86.Build.0 = Debug|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|Any CPU.Build.0 = Release|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x64.ActiveCfg = Release|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x64.Build.0 = Release|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x86.ActiveCfg = Release|Any CPU
{CA24E7F9-72FD-4649-8133-66E21452E65C}.Release|x86.Build.0 = Release|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|x64.ActiveCfg = Debug|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|x64.Build.0 = Debug|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|x86.ActiveCfg = Debug|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Debug|x86.Build.0 = Debug|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|Any CPU.Build.0 = Release|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|x64.ActiveCfg = Release|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|x64.Build.0 = Release|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|x86.ActiveCfg = Release|Any CPU
{8BE7AB9B-9344-4252-AA1C-825487314E58}.Release|x86.Build.0 = Release|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|x64.ActiveCfg = Debug|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|x64.Build.0 = Debug|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|x86.ActiveCfg = Debug|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Debug|x86.Build.0 = Debug|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|Any CPU.Build.0 = Release|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x64.ActiveCfg = Release|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x64.Build.0 = Release|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x86.ActiveCfg = Release|Any CPU
{7F395C90-4E7B-4827-BD62-762E4AA60AE4}.Release|x86.Build.0 = Release|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|x64.ActiveCfg = Debug|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|x64.Build.0 = Debug|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|x86.ActiveCfg = Debug|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Debug|x86.Build.0 = Debug|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|Any CPU.Build.0 = Release|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|x64.ActiveCfg = Release|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|x64.Build.0 = Release|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|x86.ActiveCfg = Release|Any CPU
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611}.Release|x86.Build.0 = Release|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|x64.ActiveCfg = Debug|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|x64.Build.0 = Debug|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|x86.ActiveCfg = Debug|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Debug|x86.Build.0 = Debug|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|Any CPU.Build.0 = Release|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x64.ActiveCfg = Release|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x64.Build.0 = Release|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x86.ActiveCfg = Release|Any CPU
{0F95507E-D2E4-48DD-AB43-70A0E26195E9}.Release|x86.Build.0 = Release|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|x64.ActiveCfg = Debug|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|x64.Build.0 = Debug|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|x86.ActiveCfg = Debug|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Debug|x86.Build.0 = Debug|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|Any CPU.Build.0 = Release|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|x64.ActiveCfg = Release|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|x64.Build.0 = Release|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|x86.ActiveCfg = Release|Any CPU
{89E211BB-FCAF-4A7D-8252-314AE63C4930}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{BE21E412-1CC0-4DDD-9604-733B75B00B26} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{CA24E7F9-72FD-4649-8133-66E21452E65C} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{8BE7AB9B-9344-4252-AA1C-825487314E58} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{7F395C90-4E7B-4827-BD62-762E4AA60AE4} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{B2CEEB9C-E4D3-4578-ABF3-261A249E0611} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{0F95507E-D2E4-48DD-AB43-70A0E26195E9} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{89E211BB-FCAF-4A7D-8252-314AE63C4930} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
EndGlobalSection
EndGlobal
13 changes: 13 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<Project>
<PropertyGroup>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<!-- Disable SourceLink/SCM git queries: this scaffold does not need them,
and the build environment has an unreadable .gitmodules that the SDK's
git task otherwise fails on ("Access to the path '.gitmodules' is denied"). -->
<EnableSourceControlManagerQueries>false</EnableSourceControlManagerQueries>
</PropertyGroup>
</Project>
14 changes: 14 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<Project>
<ItemGroup>
<!-- Versions added by later tasks. Example shape: -->
<!-- <PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="..." /> -->
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageVersion Include="xunit" Version="2.9.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0" />
<PackageVersion Include="Microsoft.Maui.Controls" Version="10.0.20" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="10.0.0" />
</ItemGroup>
</Project>
Loading
Loading