Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
0a666b2
refactor: migrate to Vue 3 and Vite, and fix lint errors
reiroop Dec 2, 2025
6402d99
fix(client): resolve UI layout issues and Docker environment for Vue …
reiroop Dec 2, 2025
939d8f4
chore(client): setup static analysis and testing environment
reiroop Dec 2, 2025
5ee68d0
fix(client): resolve type errors and configure static analysis
reiroop Dec 2, 2025
25385fe
chore(client): setup typescript and pinia
reiroop Dec 2, 2025
dc79793
fix: resolve all typescript type errors and migrate components to TS
reiroop Dec 2, 2025
a8d5609
feat: migrate userList, applicationList, and applicationDetail stores…
reiroop Dec 2, 2025
6cd3347
refactor: migrate to Composition API and fix lint errors
reiroop Dec 2, 2025
f872de9
fix: resolve type error in NewApplicationPage
reiroop Dec 2, 2025
47df6a5
refactor: migrate remaining js files to ts
reiroop Dec 2, 2025
02c8c35
chore: remove vuex and migrate test/config files to ts
reiroop Dec 2, 2025
036a67a
style: fix sass deprecation warnings by migrating to @use
reiroop Dec 2, 2025
7d235f2
fix: resolve build warnings (sass deprecation and const assignment)
reiroop Dec 2, 2025
a48485e
refactor: fix build warnings and migrate to ESM
reiroop Dec 2, 2025
88eff73
perf: optimize vite chunk size and refactor AdminPage
reiroop Dec 2, 2025
ead57e8
perf: implement dynamic imports for routes
reiroop Dec 2, 2025
38842d0
chore: update test script to use vitest run
reiroop Dec 2, 2025
710152c
perf: enable vuetify tree-shaking
reiroop Dec 3, 2025
0f5a6b4
test: add unit tests for utility functions
reiroop Dec 3, 2025
9a8ffc0
fix: resolve type error in api.test.ts
reiroop Dec 3, 2025
53ab543
docs: update documentation for vue3/vite migration
reiroop Dec 3, 2025
9cc404c
chore: update dependencies and cleanup config
reiroop Dec 3, 2025
1e99463
test: implement component and E2E tests
reiroop Dec 3, 2025
f96a28a
test: enhance test coverage with component and E2E tests
reiroop Dec 3, 2025
8ac8054
refactor: enable noImplicitAny and fix core type errors
reiroop Dec 3, 2025
22ecf21
refactor: fix type errors in stores and consuming components
reiroop Dec 3, 2025
cefbe6c
test: fix type errors in unit tests
reiroop Dec 3, 2025
1747083
refactor: convert remaining Vue components to TypeScript
reiroop Dec 3, 2025
5ede358
refactor: migrate remaining components to Composition API
reiroop Dec 3, 2025
cf1d4d1
refactor: split tsconfig into app and node configs
reiroop Dec 3, 2025
14c90d0
docs: update client readme for vite and e2e commands
reiroop Dec 3, 2025
7ba3548
fix: rename template ref to avoid collision with v-model in NewApplic…
reiroop Dec 3, 2025
fa43e39
fix: resolve NewApplicationPage ref collision, improve tests, and fix…
reiroop Dec 3, 2025
bd3d901
test: add coverage tool and improve NewApplicationPage tests
reiroop Dec 3, 2025
7e45878
chore: ignore coverage directory
reiroop Dec 3, 2025
3ff1526
test: increase playwright timeout for firefox
reiroop Dec 3, 2025
6c6ff05
feat: improve error handling and tests for application pages
reiroop Dec 3, 2025
460e4e3
fix: increase e2e test timeout and update docs
reiroop Dec 3, 2025
0eeb243
test: add unit tests for stores/components and fix e2e firefox timeout
reiroop Dec 3, 2025
1eb6e60
test: fix e2e race condition and remove duplicate vuetify setup in un…
reiroop Dec 3, 2025
9a908fa
refactor: improve type safety by removing any and using shared types
reiroop Dec 3, 2025
8cb3349
fix(e2e): resolve firefox timeouts and visibility issues
reiroop Dec 3, 2025
b2df785
docs: update README with new tech stack and remove resolved TODOs
reiroop Dec 3, 2025
96b95db
fix: 申請差し戻しモーダルのバグ修正とFirefox E2Eテストの安定化
reiroop Dec 3, 2025
577cf0c
chore: remove commented out code in test
reiroop Dec 3, 2025
1269c29
refactor: improve E2E test stability and use absolute API paths
reiroop Dec 3, 2025
5cc04e4
chore: update CI and dependencies
reiroop Dec 3, 2025
b93541a
chore: update CI workflow to include test job
reiroop Dec 3, 2025
d866ec6
chore: update node version to 22.x
reiroop Dec 3, 2025
f188a5f
chore: update CI workflow to use node-version 22.x
reiroop Dec 3, 2025
402d2d2
chore: update package-lock.json
reiroop Dec 3, 2025
f312f49
fix: resolve E2E test failure in ApplicationListPage
reiroop Dec 4, 2025
0d4064d
fix: disable animations for Firefox in admin-page E2E tests
reiroop Dec 4, 2025
b28cca3
ci: add type-check job to client workflow
reiroop Dec 4, 2025
eda0400
refactor(client): use vitest/config in vite.config.ts
reiroop Dec 4, 2025
ca9de12
refactor(client): use imported utility functions directly in template
reiroop Dec 4, 2025
7de7be4
fix: restore sources to Taskfile for hot-reload
reiroop Dec 4, 2025
41b8a17
Refactor: Move application state update logic to Pinia store
reiroop Dec 4, 2025
879e9b5
Refactor: Use Vuetify v-btn in SimpleButton component
reiroop Dec 4, 2025
505a6b0
fix(client): resolve style conflicts with Vuetify 3
reiroop Dec 4, 2025
828666b
fix(client): correct theme color application and style variables
reiroop Dec 4, 2025
b49f211
test(e2e): fix flaky test in create-application.spec.ts
reiroop Dec 4, 2025
3a2f15a
ci: prevent duplicate workflow runs
reiroop Dec 4, 2025
04d5833
fix(client): improve UI visibility and layout for application details
reiroop Dec 4, 2025
d5314b1
fix(client): correct timeline structure and improve chip visibility
reiroop Dec 4, 2025
a689194
fix(client): refine UI styling for logs, chips, and buttons
reiroop Dec 4, 2025
ea88b36
fix(client): correct color semantics, log spacing, and button visibility
reiroop Dec 4, 2025
0654555
fix(client): resolve UI usability issues and refine styles
reiroop Dec 4, 2025
09aca0b
fix(client): resolve timeline spacing and autocomplete interaction is…
reiroop Dec 4, 2025
8c98a27
fix(client): resolve log layout stretching and dialog dropdown issues
reiroop Dec 4, 2025
e2fda01
fix(client): restore timeline lines and fix user selection in dialog
reiroop Dec 4, 2025
cc36dd9
fix(client): restore timeline connectivity and simplify date selection
reiroop Dec 4, 2025
8cbbbea
fix(client): resolve component ref conflict and force timeline styling
reiroop Dec 4, 2025
f4e7761
fix(client): force display of timeline vertical lines via CSS
reiroop Dec 4, 2025
031660f
fix(client): remove 'align=top' to restore timeline vertical lines
reiroop Dec 4, 2025
76c288f
test: update e2e and unit tests for improved stability and coverage
reiroop Dec 4, 2025
25f2fe5
test: add unit tests for UI components and state logic
reiroop Dec 4, 2025
16cad2f
test: fix Vuetify registration warnings and RepaidButton test
reiroop Dec 4, 2025
4a14e3f
fix(client): reduce size of comment edit/delete buttons
reiroop Dec 4, 2025
16af671
fix(client): adjust UI layout for images, header, and admin page
reiroop Dec 4, 2025
3144ddf
fix: prevent double submission in NewApplicationPage
reiroop Dec 4, 2025
1ddf5eb
refactor(client): remove shims and use defineModel
reiroop Dec 4, 2025
1cddd44
fix(server): ensure run task always executes
reiroop Dec 4, 2025
d0415ef
fix(client): prevent double submission and redirect on success in New…
reiroop Dec 4, 2025
6bc3666
fix(e2e): update create application test to wait for auto-redirection
reiroop Dec 4, 2025
9436f95
feat(client): implement global toast notification and use it in NewAp…
reiroop Dec 4, 2025
0d64d13
fix(client): remove unused variables in NewApplicationPage
reiroop Dec 4, 2025
202f056
refactor: replace ref with useTemplateRef
reiroop Dec 4, 2025
d0a0d96
ci: update docker build config for vue3 migration
reiroop Dec 4, 2025
0140f08
ci: update go version to 1.25
reiroop Dec 4, 2025
5fee1e6
ci: enable docker build verification on PRs
reiroop Dec 4, 2025
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
48 changes: 44 additions & 4 deletions .github/workflows/client.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
name: CI (client)

on: [push, pull_request]
on:
push:
branches:
- master
pull_request:

jobs:
packages:
Expand All @@ -11,7 +15,7 @@ jobs:
steps:
- uses: actions/setup-node@v6
with:
node-version: 18.x
node-version: 22.x
- uses: actions/checkout@v6
- uses: actions/cache@v4
with:
Expand All @@ -28,7 +32,7 @@ jobs:
steps:
- uses: actions/setup-node@v6
with:
node-version: 18.x
node-version: 22.x
- uses: actions/checkout@v6
- uses: actions/cache@v4
with:
Expand All @@ -47,7 +51,7 @@ jobs:
steps:
- uses: actions/setup-node@v6
with:
node-version: 18.x
node-version: 22.x
- uses: actions/checkout@v6
- uses: actions/cache@v4
with:
Expand All @@ -56,3 +60,39 @@ jobs:
restore-keys: |
node_modules-
- run: cd client && npm run lint
type-check:
name: Client Type Check
runs-on: ubuntu-latest
needs: [packages]
env:
CI: true
steps:
- uses: actions/setup-node@v6
with:
node-version: 22.x
- uses: actions/checkout@v6
- uses: actions/cache@v4
with:
path: client/node_modules
key: node_modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
node_modules-
- run: cd client && npm run type-check
test:
name: Client Test
runs-on: ubuntu-latest
needs: [packages]
env:
CI: true
steps:
- uses: actions/setup-node@v6
with:
node-version: 18.x
- uses: actions/checkout@v6
- uses: actions/cache@v4
with:
path: client/node_modules
key: node_modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
node_modules-
- run: cd client && npm run test
6 changes: 5 additions & 1 deletion .github/workflows/go.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
name: Go
on: [push, pull_request]
on:
push:
branches:
- master
pull_request:

jobs:
build:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- master
pull_request:

env:
IMAGE_NAME: jomon
Expand All @@ -18,6 +19,7 @@ jobs:
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
if: github.event_name != 'pull_request'
with:
registry: ghcr.io
username: traptitech
Expand All @@ -26,7 +28,7 @@ jobs:
uses: docker/build-push-action@v6
with:
context: .
push: true
push: ${{ github.event_name != 'pull_request' }}
platforms: linux/amd64
tags: |
ghcr.io/traptitech/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,7 @@ tmp
Jomon
uploads/*

.vscode
.vscode
coverage/

.task/checksum/run
8 changes: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,27 @@
## プロジェクト構成

- サーバー: `main.go` を起点に `router/`(Echo のエンドポイント)と `model/`(GORM モデル・DB アクセス)で構成。
- クライアント: `client/src/` に Vue 2.7 + Vuetify の SPA。静的ファイルは `client/public/`。
- クライアント: `client/src/` に Vue 3 + Vuetify 3 + Pinia + TypeScript の SPA。静的ファイルは `client/public/`。
- インフラ/開発補助: `docker-compose.yml` と `Dockerfile`、テスト用 `server-test.yml`・モック用 `mock.yml`。CI は `.github/workflows/` に Go/Client/Image の 3 つ。
- ドキュメントとデータ: `docs/`、一時保存は `uploads/`、永続化ボリューム用に `storage/`。

## ビルド・実行・開発コマンド

- サーバーモック+DB 付き統合テスト: `make server-test`(Docker で mariadb を起動して Go テストを実行)。
- クライアント開発: `make client` (`npm run lint` → `npm run serve`。localhost:8080 で確認)。
- クライアント開発: `make client` (`npm run lint` → `npm run dev`。localhost:8080 で確認)。
- 単体ビルド: `go build ./...`(Go 1.25+ 推奨) / `cd client && npm run build`。
- ローカル起動(Docker 本番イメージ確認用): `docker-compose up -d --build`。停止は `make down`。

## コーディングスタイル

- Go: `gofmt`(タブインデント)必須。`go vet ./...` で静的検査。公開シンボルは PascalCase、テストダブルには `_test` 接尾辞。
- Vue/TS: ESLint + Prettier 設定済み(`npm run lint`)。コンポーネントは `PascalCase.vue`、ルートや小要素は `kebab-case` ファイル名。CSS/SCSS は BEM か Vuetify のユーティリティを優先。
- Vue/TS: ESLint + Prettier 設定済み(`npm run lint`)。Composition API (`<script setup lang="ts">`) を推奨。コンポーネントは `PascalCase.vue`、ルートや小要素は `kebab-case` ファイル名。CSS/SCSS は BEM か Vuetify のユーティリティを優先。
- API/DB: モデル名は単数形、テーブル/カラムはスネークケース。JSON フィールドは camelCase を維持。

## テスト指針

- Go: `go test ./...` を基本。DB を使うテストは `MARIADB_USERNAME`/`PASSWORD`/`HOSTNAME`/`DATABASE` 環境変数を設定(CI と同値: `root/password/localhost:50000/jomon`)。
- Vue: 現状は静的検証中心。UI 振る舞いを追加する際は `@vue/test-utils` + Jest を推奨し、`client/tests/unit/` に `_spec.js` で配置
- Vue: `vitest` を使用。`client/tests/` 以下にテストファイルを配置。ユーティリティ関数やロジックのテストを推奨。UI テストが必要な場合は `@vue/test-utils` を使用
- カバレッジはクリティカルパス(決裁フロー、認可、アップロード処理)を優先し、回帰バグは再現テストを追加。

## コミット & プルリク運用
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
## build backend
FROM golang:1.17.5-alpine as server-build
FROM golang:1.25-alpine as server-build

Check warning on line 2 in Dockerfile

View workflow job for this annotation

GitHub Actions / image

The 'as' keyword should match the case of the 'from' keyword

FromAsCasing: 'as' and 'FROM' keywords' casing do not match More info: https://docs.docker.com/go/dockerfile/rule/from-as-casing/

WORKDIR /github.com/traPtitech/Jomon
COPY go.mod go.sum ./
Expand All @@ -13,7 +13,7 @@
RUN go build -o /Jomon -ldflags "-s -w"

## build frontend
FROM node:13.12.0-alpine as client-build
FROM node:22-alpine as client-build

Check warning on line 16 in Dockerfile

View workflow job for this annotation

GitHub Actions / image

The 'as' keyword should match the case of the 'from' keyword

FromAsCasing: 'as' and 'FROM' keywords' casing do not match More info: https://docs.docker.com/go/dockerfile/rule/from-as-casing/
WORKDIR /github.com/traPtitech/Jomon/client
COPY ./client/package.json ./client/package-lock.json ./
RUN npm ci
Expand All @@ -23,7 +23,7 @@
## run

FROM alpine:3.9
ENV TZ Asia/Tokyo

Check warning on line 26 in Dockerfile

View workflow job for this annotation

GitHub Actions / image

Legacy key/value format with whitespace separator should not be used

LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format More info: https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/

RUN apk --update --no-cache add tzdata \
&& cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
Expand All @@ -36,4 +36,4 @@
COPY --from=server-build /Jomon ./
COPY --from=client-build /github.com/traPtitech/Jomon/client/dist ./client/dist/

ENTRYPOINT ./Jomon

Check warning on line 39 in Dockerfile

View workflow job for this annotation

GitHub Actions / image

JSON arguments recommended for ENTRYPOINT/CMD to prevent unintended behavior related to OS signals

JSONArgsRecommended: JSON arguments recommended for ENTRYPOINT to prevent unintended behavior related to OS signals More info: https://docs.docker.com/go/dockerfile/rule/json-args-recommended/
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ server-test:

.PHONY: client
client:
cd client; npm run lint; npm run serve
cd client; npm run lint; npm run dev

.PHONY: mock
mock:
Expand Down
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,15 @@ make server-test
make client
```

Now you can access to `http://localhost:3000` for Jomon client page.
Or run manually:

```shell script
cd client
npm install
npm run dev
```

Now you can access to `http://localhost:8080` for Jomon client page.
And you can access to `http://localhost:1323` for Jomon mock server using `swagger.yaml`.

## Staging
Expand Down
2 changes: 0 additions & 2 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ tasks:
deps: [build]
cmds:
- /app/Jomon
sources:
- '**/*.go'

build:
desc: Build the Go application
Expand Down
27 changes: 27 additions & 0 deletions client/.eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module.exports = {
root: true,
env: {
node: true
},
extends: [
"plugin:vue/vue3-recommended",
"eslint:recommended",
"@vue/typescript/recommended",
"plugin:prettier/recommended"
],
rules: {
// "no-console": process.env.NODE_ENV === "production" ? "error" : "off",
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
"vue/multi-word-component-names": "off",
"vue/max-attributes-per-line": "off",
"vue/html-indent": "off",
"vue/html-closing-bracket-newline": "off",
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline": "off",
"vue/html-self-closing": "off"
},
parserOptions: {
ecmaVersion: 2020
}
};
15 changes: 0 additions & 15 deletions client/.eslintrc.js

This file was deleted.

7 changes: 7 additions & 0 deletions client/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,10 @@ yarn-error.log*
*.njsproj
*.sln
*.sw?

# Playwright
/test-results/
/playwright-report/
/playwright/.cache/
coverage/

36 changes: 33 additions & 3 deletions client/README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,54 @@
# client
# Jomon Client

This is the frontend application for Jomon, built with Vue 3, Vite, and Pinia.

## Tech Stack

- **Framework**: Vue 3 (Composition API)
- **Build Tool**: Vite
- **State Management**: Pinia
- **UI Framework**: Vuetify 3
- **Testing**: Vitest (Unit), Playwright (E2E)
- **Language**: TypeScript

## Project setup

```
npm install
```

### Compiles and hot-reloads for development

```
npm run serve
npm run dev
```

### Compiles and minifies for production

```
npm run build
```

### Lints and fixes files

```
npm run lint
```

### Run Tests

#### Component Tests (Vitest)

```bash
npm run test
```

#### E2E Tests (Playwright)

```bash
npm run test:e2e
```

### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

See [Vite Configuration Reference](https://vitejs.dev/config/).
3 changes: 0 additions & 3 deletions client/babel.config.js

This file was deleted.

24 changes: 24 additions & 0 deletions client/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<title>Jomon</title>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"
/>
</head>
<body>
<noscript>
<strong
>We're sorry but client doesn't work properly without JavaScript
enabled. Please enable it to continue.</strong
>
</noscript>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
Loading
Loading