-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
楽観同時実行制御・認可を行うサンプルアプリ(Dressca Admin)を追加する (#2137)
* 管理アプリ(フロントエンド)をMaiaから移植する (#2091) * generated以外の部分をコミット * openapi-generatorでコードを生成し、 API仕様書はコミットしない(バックエンド側でコミットする) * CIワークフローを更新 * ポート番号の誤りを修正 * http⇒httpsに修正 * 管理アプリ(バックエンド)を追加する (#2101) * npm workspacesを導入する * CIでチェックする対象のパスを修正 * 既存のlockfileがある状態でnpm installを行ってlockfileを生成 * アプリケーションの発行のための設定を追加 * lintコマンドの誤りを修正 typecheckをtype-checkに修正(cspellの警告) * typecheckのスペルの修正漏れに対応 * Customer用のソリューションフィルターを導入し、バックエンドCIの実行コマンドを修正 * Nugetパッケージの復元対象をフィルタリングする * バックエンド関連のソースコードのみをコミット * customerからconsumerにワークスペースの名称を変更 * フロントエンドCIの名称を変更 * 作成するissueのタイトルに対象のアプリの名称を追加 * Revert "customerからconsumerにワークスペースの名称を変更" This reverts commit cd722d9. * ワークスペースの名称をcustomerからconsumerに変更 * []をエスケープするように修正 * [ ] をダブルクォートで囲むように修正 * エスケープが必要な文字の使用をやめる * Revert "エスケープが必要な文字の使用をやめる" This reverts commit 06bc300. * CustomerからConsumerにリネームする * カスタム認可ハンドラーで403を404に変換する * DbUpdateConcurrencyExceptionを検知して409Conflictを返却するカスタムフィルターを追加 * ダミーのハンドラーでテストに用いていた箇所を戻し * ソリューションにAdminに必要なプロジェクトを再取り込みするように手動でマージ * Dressca.Webに共通化したモジュールを参照するように修正 * PermissionDeniedException発生に返却するステータスコードを404に変更する * CatalogItemUpdateCommandを削除 * コメントの漏れを修正 * リポジトリの削除・更新メソッドの戻り値をvoidからint(処理した数)に変更 * 修正前の名前空間Authが残っている箇所が発覚したため修正 * CatalogManagementApplicationsServiceの処理一式をCatalogApplicationServiceに移動 * 不要になったCatalogManagementApplicationServiceを削除し、参照をメンテナンスする * npm installをnpm ciに変更 prodビルド用の設定を修正 * CatalogManagementApplicationServiceの文言がログメッセージに残っていたため修正 * エラーレスポンスの不足箇所を修正 * フレームワーク側で行っているレスポンスの記載を削除 * ビルド後のAPI仕様書の更新を反映 * DbUpdateConcurrencyExceptionを409に変換するFilterについて、開発環境用にスタックトレースを返却するFilterを作成し、テストを整備 * CORSの設定を行う * vscodeの設定ファイルの配置フォルダを修正 * XMLコメントの書式を修正 * パス指定の誤りを修正 * HTTP ステータスコード 400 の 誤字を 409 に修正 * 不要な空行を削除 * namespaceの下に空行を追加 * SpaRootのフォルダパスの誤りを修正 * スペルミスを修正(Occured⇒Occurred) * 非同期メソッドを正しくasync/awaitするように修正 * DTOの商品コードの制約条件である正規表現をエンティティの制約と合わせるように修正 * XMLコメントが欠落している箇所に追記し、フォーマットを修正 * 不適切な名前空間を修正 * String.Emptyをstring.Emptyに修正 * Web.AdminとWeb.Admin.DtoにStyleCop.Analyzersの参照を追加 * StyleCopの警告に対応 * 非同期メソッドを正しくasync/awaitするように修正 * Directory.Build.propsでソリューション全体で集中管理設定済みの設定をプロジェクトから削除 * DBUpdateConcurrencyExceptionFilter一式を Dressca.Web.Admin から Dressca.Webへ移動 * XMLコメントの欠落を補完、コメントの書式を訂正。 * CallerMemberNameAttirbute を使用して呼び出し元のメソッド名を取得するように修正 * 不要な文字列の結合を修正 * ActionNameHelperをDressca.Webへ移動 * べた書きのメッセージをリソースファイルで定義するように修正 * API 仕様書のタイトルと説明を修正 * キーをソリューション名に修正 * Assetsに関するメッセージ定義がConsumerと比較して欠けている箇所を修正 * 名前空間が物理フォルダと一致していない箇所を修正 * HTTPステータスを詰め替えるハンドラーをDressca.Webに移動 * 開発環境用の認証ハンドラーをDressca.Web配下に移動 * 検索条件が重複している箇所をリファクタリング * AdminのControllerから誤ってConsumer用のアイテム参照メソッドを修正している箇所を修正 * XMLコメントの修正漏れに対応 * PagedListをSystemCommonに移動 * HealthCheckDescriptionProvider を Dressca.Web に移動 * Dtoのフォルダー構造および命名を規約に従った内容に変更 * Dtoについて初期化必須のプロパティおよびNULLを許容しない参照型のプロパティについて required で初期化を強制する * XMLコメントの誤りを修正 * CatalogItemの冗長なセッター定義を修正 あわせて関連するテストスイートを修正 * FluentAPIでコンカレンシートークンの列を定義するように変更 * Dtoでrequired属性が指定されているプロパティにrequired修飾子を指定する * DIコンテナから注入するクラスについてもコンストラクタでnullチェックするように変更 * ユーザーのロールを1つから複数に変更 認証済みかどうかをhttpContextAccessor.HttpContext?.User.Identity?.IsAuthenticated を見て判断するように変更 ロールを示す文字列を静的クラスに委譲 * GetLoginUserの戻り値をActionResult<T>に修正 * using static を行っている箇所を通常の using に戻す * クライアントコードを再生成し、 ・レスポンスの型の名称の変更 ・UserRole⇒UserRoles への変更 を反映 * アイテム、ブランド、カテゴリの存在チェックをCatalogApplicationServiceからCatalogDomainServiceに委譲する * lint を実行 * API 仕様書の更新に合わせてクライアント側のコードを再生成 * リポジトリの実装について、エンティティを組み立ててから追跡状態に変更するように変更 * 下記の観点で、アクションメソッドに不足している ResponseTypeAttributeを追加 - [ ] 正常系 200 系について追加 - [ ] サーバーエラーになりうるものについて 500 を追加 - [ ] Bad Request になりうるものについて 400 を追加 - [ ] Authorize 属性がついているものについて 401 を追加 - [ ] Authorize Roles がついているものについて 404 を追加 - [ ] 競合が発生するものについて 409 を追加 * エンティティの存在チェックの EF での実装を GetAsync から AnyAsync に変更する * OpenAPI 仕様書の更新に伴いクライアントコードを生成(影響なし) * XMLコメントと実装があっていない箇所についてXMLコメントを修正 * マイグレーション履歴を削除し、再度新規作成する * ArgumentException派生クラスについてパラメーター名をチェックするようにテストを改善 * 汎用例外のメッセージが想定通りか検証する * AddItemToCatalogAsync の戻り値が想定通りか検証するテストケースを追加 * Actの中でリテラルを使用している箇所についてArrangeで変数宣言するように修正 * CatalogDomainServiceのSetup時に引数の指定が誤っている箇所を修正 * Created 201 で作成したリソースのURIを正しく返却するように修正 * GetCatalogItemsByAdminAsync について戻り値を検証するテストを追加 * CatalogDomainServiceの新規メソッドの単体テストを実装 * CatalogApplicationServiceからDomainServiceの新規メソッドをコールした際の例外処理に関するテストを追加 * メッセージ定義の誤字脱字を訂正 * XMLコメントを全体的に見直し * XMLコメントの更新に伴うOpenAPI仕様書の変更をクライアントの自動生成コードに反映 (実コードに影響なし) * XMLコメント中の言語要素falseをlangwordで指定する * 誤ったDbContextの再生成処理を削除 削除用のCatalogItemの組み立て処理をCatalogItemエンティティに移動 * lint の漏れに対応
- Loading branch information
1 parent
02a5259
commit 315d26d
Showing
211 changed files
with
12,776 additions
and
1,225 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
--- | ||
# cSpell:ignore danielpalme dorny marocchino NOLOGO OPTOUT reporttypes targetdir | ||
|
||
name: dressca-admin-backend CI | ||
|
||
on: | ||
pull_request: | ||
branches: [main] | ||
paths: | ||
- 'samples/Dressca/dressca-backend/**' | ||
- '.github/workflows/samples-dressca-admin-backend.ci.yml' | ||
workflow_dispatch: | ||
|
||
env: | ||
WORKING_DIRECTORY: samples/Dressca/dressca-backend | ||
SOLUTION_FILE_NAME: Dressca.Web.Admin.slnf | ||
|
||
defaults: | ||
run: | ||
working-directory: samples/Dressca/dressca-backend | ||
|
||
jobs: | ||
build: | ||
name: バックエンドアプリケーションのビルド | ||
runs-on: ubuntu-latest | ||
env: | ||
DOTNET_NOLOGO: true | ||
DOTNET_CLI_TELEMETRY_OPTOUT: true | ||
BUILD_CONFIGURATION: Debug | ||
BUILD_SUMMARY_FILE: BuildSummary.md | ||
TEST_ENVIRONMENT: IntegrationTest | ||
permissions: | ||
checks: write | ||
contents: read | ||
pull-requests: write | ||
|
||
steps: | ||
- name: ブランチのチェックアウト | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
|
||
- name: .NET SDK のセットアップ | ||
uses: actions/setup-dotnet@v4 | ||
with: | ||
dotnet-version: '8.*' | ||
|
||
- name: NuGet パッケージの復元 | ||
run: dotnet restore ${{ env.SOLUTION_FILE_NAME }} | ||
|
||
- id: application-build | ||
name: アプリケーションのビルド | ||
run: dotnet build ${{ env.SOLUTION_FILE_NAME }} --no-restore --configuration ${{ env.BUILD_CONFIGURATION }} --verbosity minimal > build-result.txt | ||
|
||
- name: ビルド結果の表示 | ||
shell: bash | ||
if: ${{ success() || (failure() && steps.application-build.conclusion == 'failure') }} | ||
run: | | ||
echo '# Build Result :gear:' >> $GITHUB_STEP_SUMMARY | ||
cat build-result.txt | sed -n -e 's/^/> /p' >> $GITHUB_STEP_SUMMARY | ||
- name: SQL ServerのDockerイメージをプル(結合テスト用) | ||
run: sudo docker pull mcr.microsoft.com/mssql/server:2022-latest | ||
|
||
- name: SQL Serverのコンテナを起動(結合テスト用) | ||
run: | | ||
sudo docker run -e "ACCEPT_EULA=Y" \ | ||
-e "MSSQL_SA_PASSWORD=P@ssw0rd" \ | ||
-p 1433:1433 --name sql1 \ | ||
--hostname sql1 \ | ||
-d mcr.microsoft.com/mssql/server:2022-latest | ||
- name: データベース接続文字列を取得(結合テスト用) | ||
id: get-connection-string | ||
env: | ||
APPSETTINGS_FILEPATH: tests/Dressca.Web.Admin.IntegrationTest/appsettings.${{ env.TEST_ENVIRONMENT }}.json | ||
run: | | ||
connectionString=$(cat ${{env.APPSETTINGS_FILEPATH}} | jq '.ConnectionStrings.DresscaDbContext') | ||
echo "CONNECTION_STRING=${connectionString}" >> "$GITHUB_OUTPUT" | ||
- name: EF Core ツールのインストール(結合テスト用) | ||
shell: bash | ||
run: dotnet tool install --global dotnet-ef --version 8.* | ||
|
||
- name: マイグレーション適用(結合テスト用) | ||
working-directory: ${{ env.WORKING_DIRECTORY }}/src/Dressca.EfInfrastructure | ||
shell: bash | ||
run: dotnet ef database update --connection ${{ steps.get-connection-string.outputs.CONNECTION_STRING }} | ||
|
||
- id: run-tests | ||
name: テストの実行 | ||
continue-on-error: true | ||
run: | | ||
export TEST_ENVIRONMENT=${{ env.TEST_ENVIRONMENT }} | ||
dotnet test ${{ env.SOLUTION_FILE_NAME }} --no-build --logger trx --verbosity normal --configuration ${{ env.BUILD_CONFIGURATION }} --collect "XPlat Code Coverage" | ||
- id: create-test-result-report | ||
name: テスト結果ページの作成 | ||
uses: dorny/test-reporter@v1 | ||
if: ${{ success() || (failure() && steps.run-tests.conclusion == 'failure') }} | ||
with: | ||
name: 'Test results' | ||
path: '**/TestResults/*.trx' | ||
path-replace-backslashes: 'true' | ||
reporter: 'dotnet-trx' | ||
only-summary: 'false' | ||
list-suites: 'all' | ||
list-tests: 'all' | ||
max-annotations: '10' | ||
fail-on-error: 'true' | ||
|
||
- name: テスト結果のサマリー表示 | ||
shell: bash | ||
if: ${{ success() || (failure() && steps.run-tests.conclusion == 'failure') }} | ||
run: | | ||
echo '## Test Result :memo:' >> ${{ env.BUILD_SUMMARY_FILE }} | ||
echo 'Test was a **${{ steps.create-test-result-report.outputs.conclusion }}**.' >> ${{ env.BUILD_SUMMARY_FILE }} | ||
echo 'Completed in ${{ steps.create-test-result-report.outputs.time }}ms with **${{ steps.create-test-result-report.outputs.passed }}** passed, **${{ steps.create-test-result-report.outputs.failed }}** failed and ${{ steps.create-test-result-report.outputs.skipped }} skipped.' >> ${{ env.BUILD_SUMMARY_FILE }} | ||
cat ${{ env.BUILD_SUMMARY_FILE }} >> $GITHUB_STEP_SUMMARY | ||
- id: create-coverage-report | ||
name: コードカバレッジレポートの解析と作成 | ||
uses: danielpalme/ReportGenerator-GitHub-Action@v5 | ||
if: ${{ success() || (failure() && steps.run-tests.conclusion == 'failure') }} | ||
with: | ||
reports: '**/TestResults/*/coverage.cobertura.xml' | ||
targetdir: '${{ env.WORKING_DIRECTORY }}/CoverageReport' | ||
reporttypes: 'MarkdownSummaryGithub' | ||
|
||
- name: コードカバレッジの結果表示 | ||
shell: bash | ||
if: ${{ success() || (failure() && steps.run-tests.conclusion == 'failure') }} | ||
run: | | ||
sed -i s/'# Summary'/'## Coverage :triangular_ruler:'/g CoverageReport/SummaryGithub.md | ||
sed -i -e '/^## Coverage$/d' CoverageReport/SummaryGithub.md | ||
cat CoverageReport/SummaryGithub.md >> $GITHUB_STEP_SUMMARY | ||
cat CoverageReport/SummaryGithub.md >> ${{ env.BUILD_SUMMARY_FILE }} | ||
- name: ビルドサマリーをPull-requestに表示 | ||
uses: marocchino/sticky-pull-request-comment@v2 | ||
if: ${{ github.event_name == 'pull_request' && (success() || (failure() && steps.run-tests.conclusion == 'failure')) }} | ||
with: | ||
recreate: true | ||
path: '${{ env.WORKING_DIRECTORY }}/${{ env.BUILD_SUMMARY_FILE }}' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
--- | ||
|
||
name: dressca-admin-frontend CI | ||
|
||
on: | ||
pull_request: | ||
branches: [main] | ||
paths: | ||
- 'samples/Dressca/dressca-frontend/*.*' | ||
- 'samples/Dressca/dressca-frontend/admin/**' | ||
- '.github/workflows/samples-dressca-admin-frontend.ci.yml' | ||
workflow_dispatch: | ||
|
||
defaults: | ||
run: | ||
working-directory: samples/Dressca/dressca-frontend/ | ||
|
||
jobs: | ||
build: | ||
name: Dressca 管理のフロントエンドアプリケーションのビルド | ||
runs-on: ubuntu-latest | ||
env: | ||
NO_COLOR: "1" # 文字化け防止のためカラーコードを出力しない | ||
strategy: | ||
matrix: | ||
node-version: [20.x] | ||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/ | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Use Node.js ${{ matrix.node-version }} | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: ${{ matrix.node-version }} | ||
|
||
- uses: actions/cache@v4 | ||
id: node_modules_cache_id | ||
env: | ||
cache-name: cache-node-modules | ||
with: | ||
path: '**/node_modules' | ||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | ||
|
||
- name: node パッケージのキャッシュ確認 | ||
run: echo '${{ toJSON(steps.node_modules_cache_id.outputs) }}' | ||
|
||
- name: node パッケージのインストール | ||
if: ${{ steps.node_modules_cache_id.outputs.cache-hit != 'true' }} | ||
run: npm ci | ||
|
||
- id: run-lint | ||
name: lintの実行 | ||
run: npm run lint:ci:admin >> /var/tmp/lint-result.txt 2>&1 | ||
|
||
- id: run-type-check | ||
name: TypeScript の型チェック | ||
run: npm run type-check:admin >> /var/tmp/type-check-result.txt 2>&1 | ||
|
||
- id: application-build | ||
name: アプリケーションのビルド | ||
run: npm run build-only:dev:admin >> /var/tmp/build-result.txt 2>&1 | ||
|
||
- id: run-unit-tests | ||
name: 単体テストの実行 | ||
run: npm run test:unit:admin >> /var/tmp/unit-test-result.txt 2>&1 | ||
|
||
- name: lintの結果出力 | ||
if: ${{ success() || (failure() && steps.run-lint.conclusion == 'failure') }} | ||
uses: ./.github/workflows/file-to-summary | ||
with: | ||
body: /var/tmp/lint-result.txt | ||
header: 'lintの結果 :pen:' | ||
|
||
- name: 型チェックの結果出力 | ||
if: ${{ success() || (failure() && steps.run-type-check.conclusion == 'failure') }} | ||
uses: ./.github/workflows/file-to-summary | ||
with: | ||
body: /var/tmp/type-check-result.txt | ||
header: '型チェックの結果 :pencil2:' | ||
|
||
- name: ビルドの結果出力 | ||
if: ${{ success() || (failure() && steps.application-build.conclusion == 'failure') }} | ||
uses: ./.github/workflows/file-to-summary | ||
with: | ||
body: /var/tmp/build-result.txt | ||
header: 'ビルドの結果 :gear:' | ||
|
||
- name: 単体テストの結果出力 | ||
if: ${{ success() || (failure() && steps.run-unit-tests.conclusion == 'failure') }} | ||
uses: ./.github/workflows/file-to-summary | ||
with: | ||
body: /var/tmp/unit-test-result.txt | ||
header: '単体テストの結果 :memo:' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
{ | ||
"solution": { | ||
"path": "Dressca.sln", | ||
"projects": [ | ||
"src\\Dressca.ApplicationCore\\Dressca.ApplicationCore.csproj", | ||
"src\\Dressca.EfInfrastructure\\Dressca.EfInfrastructure.csproj", | ||
"src\\Dressca.Store.Assets.StaticFiles\\Dressca.Store.Assets.StaticFiles.csproj", | ||
"src\\Dressca.SystemCommon\\Dressca.SystemCommon.csproj", | ||
"src\\Dressca.Web.Admin.Dto\\Dressca.Web.Admin.Dto.csproj", | ||
"src\\Dressca.Web.Admin\\Dressca.Web.Admin.csproj", | ||
"src\\Dressca.Web\\Dressca.Web.csproj", | ||
"src\\Maris.Logging.Testing\\Maris.Logging.Testing.csproj", | ||
"tests\\Dressca.UnitTests.ApplicationCore\\Dressca.UnitTests.ApplicationCore.csproj", | ||
"tests\\Dressca.UnitTests.SystemCommon\\Dressca.UnitTests.SystemCommon.csproj", | ||
"tests\\Dressca.UnitTests.Web.Admin\\Dressca.UnitTests.Web.Admin.csproj", | ||
"tests\\Dressca.UnitTests.Web\\Dressca.UnitTests.Web.csproj", | ||
"tests\\Dressca.Web.Admin.IntegrationTest\\Dressca.Web.Admin.IntegrationTest.csproj", | ||
"tests\\Maris.Logging.Testing.Tests\\Maris.Logging.Testing.Tests.csproj" | ||
] | ||
} | ||
} |
Oops, something went wrong.