Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
c14fdf9
feat(#22): Implement GraphQL authentication guard and current user de…
yeomin4242 Nov 5, 2025
50138ed
feat(#22): Add GraphQL types for message results and pagination, and …
yeomin4242 Nov 5, 2025
ab42bcf
feat(#22): Implement BackendApi service for REST API communication wi…
yeomin4242 Nov 5, 2025
d549bf9
feat(#22): Add GraphQL types for user authentication and profile mana…
yeomin4242 Nov 5, 2025
586d231
feat(#22): Implement AuthModule with GraphQL resolver and REST API se…
yeomin4242 Nov 5, 2025
cc08df4
feat(#22): Add FollowModule with GraphQL resolver, service, and types…
yeomin4242 Nov 5, 2025
42570c0
feat(#22): Implement GamesModule with GraphQL resolver, service, and …
yeomin4242 Nov 5, 2025
ab980ae
feat(#22): Add PaymentsModule with GraphQL resolver, service, and typ…
yeomin4242 Nov 5, 2025
bdd4ba4
feat(#22): Add ProductsModule with GraphQL resolver, service, and typ…
yeomin4242 Nov 5, 2025
057a64e
feat(#22): Introduce WalletModule with GraphQL resolver, service, and…
yeomin4242 Nov 5, 2025
38e34f7
feat(#22): Add resolver stubs for Authentication, Follow, Games, Paym…
yeomin4242 Nov 5, 2025
c7c7be2
feat(#22): Initialize BFF with AppModule, AppController, AppService, …
yeomin4242 Nov 5, 2025
4060349
feat(#22): Add integration test helpers for Strapi REST API, includin…
yeomin4242 Nov 5, 2025
c478d1f
feat(#22): Add comprehensive integration tests for authentication, fo…
yeomin4242 Nov 5, 2025
04051d9
feat(#22): Introduce mock data for BFF integration tests, including u…
yeomin4242 Nov 5, 2025
f78b3cf
feat(#22): Add end-to-end tests for BFF components including authenti…
yeomin4242 Nov 5, 2025
5dcb2d6
feat(#22): Set up initial BFF configuration with Prettier, ESLint, Ne…
yeomin4242 Nov 5, 2025
dc9c7f9
refactor(#22): move frontend(web) path to inner apps
yeomin4242 Nov 5, 2025
2ec2501
chore(#22): remove lint-staged configuration from package.json
yeomin4242 Nov 5, 2025
f30efa6
chore(#22): update package.json and pnpm-lock.yaml for ESLint integra…
yeomin4242 Nov 5, 2025
c8e8577
feat(#22): Initialize Strapi application with essential configuration…
yeomin4242 Nov 5, 2025
e5e0f3e
chore(#22): Update pnpm-lock.yaml and package.json to add axios and b…
yeomin4242 Nov 5, 2025
a5206ec
chore(#22): Update turbo.json to disable caching for test outputs, en…
yeomin4242 Nov 5, 2025
5e630cc
test(#22): Enhance LanguageStorePage and StorePurchaseSuccessPage tes…
yeomin4242 Nov 5, 2025
9d89d1f
chore(#22): Update package.json and pnpm-lock.yaml to downgrade @apol…
yeomin4242 Nov 5, 2025
53a259b
chore(#22): Update CI workflow to specify working directory for ESLin…
yeomin4242 Nov 5, 2025
f85eafb
chore(#22): Refactor CI workflow to change working directory for ESLi…
yeomin4242 Nov 5, 2025
caaa79d
chore(#22): Update CI workflow to refine file selection patterns for …
yeomin4242 Nov 5, 2025
8abc8d7
chore(#22): Update CI workflow to exclude test and spec files from ES…
yeomin4242 Nov 5, 2025
22b9b35
chore(#22): Enhance ESLint configuration to ignore additional test fi…
yeomin4242 Nov 5, 2025
5aa7c1c
refactor(#22): Simplify error handling in GqlAuthGuard, remove unused…
yeomin4242 Nov 5, 2025
5f18395
chore(#22): Update CI and pre-push hooks to enforce linting and testi…
yeomin4242 Nov 5, 2025
f82fc85
chore(#22): Refactor pre-push hook to streamline ESLint commands and …
yeomin4242 Nov 5, 2025
f6d4e1e
chore(#22): Modify pre-push hook to conditionally run integration tes…
yeomin4242 Nov 5, 2025
282cccf
chore(#22): Enhance pre-push hook to start Strapi for integration tes…
yeomin4242 Nov 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
33 changes: 3 additions & 30 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,37 +47,10 @@ jobs:
- name: Ensure workspace installs (web, bff)
run: pnpm -r --filter ./apps/web --filter ./apps/bff install --no-frozen-lockfile

- name: Lint (web)
run: |
FILES=$(git ls-files 'apps/web/**/*.ts' 'apps/web/**/*.tsx' 'apps/web/**/*.js' 'apps/web/**/*.jsx' | tr '\n' ' ')
if [ -n "$FILES" ]; then
pnpm exec eslint $FILES
else
echo "No web source files to lint"
fi

- name: Lint (bff)
run: |
FILES=$(git ls-files 'apps/bff/src/**/*.ts' 'apps/bff/apps/**/*.ts' 'apps/bff/libs/**/*.ts' 'apps/bff/test/**/*.ts' | tr '\n' ' ')
if [ -n "$FILES" ]; then
pnpm exec eslint $FILES --fix
else
echo "No bff source files to lint"
fi

- name: Typecheck (disabled)
if: false
- name: Typecheck
run: pnpm run typecheck

- name: Build (disabled)
if: false
- name: Build
run: pnpm run build

- name: Unit tests (Turbo) (disabled)
if: false
run: pnpm test

# Optional: run integration tests explicitly (kept separate for clarity)
- name: Integration tests (BFF)
if: false
run: pnpm run test:integration || true
# Tests and lint are executed in pre-push; CI keeps typecheck and build only
2 changes: 2 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#!/usr/bin/env sh

if command -v pnpm >/dev/null 2>&1; then
pnpm typecheck || exit 1
pnpm lint-staged || exit 1
elif command -v npm >/dev/null 2>&1; then
npm run typecheck || exit 1
npx --no-install lint-staged || exit 1
else
exit 1
Expand Down
64 changes: 59 additions & 5 deletions .husky/pre-push
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,68 @@ run() {

if command -v pnpm >/dev/null 2>&1; then
run "pnpm typecheck" || exit 1
# Run tests but do not block push on failures (CI should enforce tests)
if ! run "pnpm test"; then
echo "⚠️ Tests failed (continuing; CI will enforce)"
# Lint (web)
run "cd apps/web && FILES=\$(git ls-files 'src/**/*.ts' 'src/**/*.tsx' 'src/**/*.js' 'src/**/*.jsx' | grep -Ev '(\\.test\\.|\\.spec\\.)' | tr '\n' ' '); [ -n \"$FILES\" ] && pnpm exec eslint $FILES || echo 'No web source files to lint'" || exit 1
# Lint (bff)
run "cd apps/bff && FILES=\$(git ls-files 'src/**/*.ts' | grep -Ev '(\\.test\\.|\\.spec\\.|stubs/)' | tr '\n' ' '); [ -n \"$FILES\" ] && pnpm exec eslint $FILES --fix || echo 'No bff source files to lint'" || exit 1
# Unit tests (Turbo)
run "pnpm test" || exit 1
# Integration tests (BFF)
STRAPI_URL=${STRAPI_BACKEND_URL:-http://localhost:1337}
if command -v curl >/dev/null 2>&1 && curl -sSf "$STRAPI_URL" >/dev/null 2>&1; then
run "pnpm run test:integration" || exit 1
else
echo "🚀 Starting Strapi for integration tests..."
STARTED_STRAPI=0
# Build Strapi admin (if not already built) and start in background
if run "pnpm --filter ./apps/strapi run build"; then
(pnpm --filter ./apps/strapi run start >/dev/null 2>&1 & echo $! > .husky/.strapi.pid)
STARTED_STRAPI=1
# wait up to 120s
i=0; until curl -sSf "$STRAPI_URL" >/dev/null 2>&1 || [ $i -ge 120 ]; do sleep 1; i=$((i+1)); done
fi
if curl -sSf "$STRAPI_URL" >/dev/null 2>&1; then
run "pnpm run test:integration" || {
[ "$STARTED_STRAPI" = "1" ] && kill $(cat .husky/.strapi.pid) >/dev/null 2>&1 || true
exit 1
}
else
echo "⚠️ Skipping integration tests (Strapi not reachable at $STRAPI_URL)"
fi
# cleanup started Strapi
if [ "$STARTED_STRAPI" = "1" ]; then
kill $(cat .husky/.strapi.pid) >/dev/null 2>&1 || true
rm -f .husky/.strapi.pid
fi
fi
elif command -v npm >/dev/null 2>&1; then
run "npm run typecheck" || exit 1
if ! run "npm run test"; then
echo "⚠️ Tests failed (continuing; CI will enforce)"
run "cd apps/web && FILES=\$(git ls-files 'src/**/*.ts' 'src/**/*.tsx' 'src/**/*.js' 'src/**/*.jsx' | grep -Ev '(\\.test\\.|\\.spec\\.)' | tr '\n' ' '); [ -n \"$FILES\" ] && npx eslint $FILES || echo 'No web source files to lint'" || exit 1
run "cd apps/bff && FILES=\$(git ls-files 'src/**/*.ts' | grep -Ev '(\\.test\\.|\\.spec\\.|stubs/)' | tr '\n' ' '); [ -n \"$FILES\" ] && npx eslint $FILES --fix || echo 'No bff source files to lint'" || exit 1
run "npm run test" || exit 1
STRAPI_URL=${STRAPI_BACKEND_URL:-http://localhost:1337}
if command -v curl >/dev/null 2>&1 && curl -sSf "$STRAPI_URL" >/dev/null 2>&1; then
run "npm run test:integration" || exit 1
else
echo "🚀 Starting Strapi for integration tests (npm)..."
STARTED_STRAPI=0
if run "npm --prefix apps/strapi run build"; then
(npm --prefix apps/strapi run start >/dev/null 2>&1 & echo $! > .husky/.strapi.pid)
STARTED_STRAPI=1
i=0; until curl -sSf "$STRAPI_URL" >/dev/null 2>&1 || [ $i -ge 120 ]; do sleep 1; i=$((i+1)); done
fi
if curl -sSf "$STRAPI_URL" >/dev/null 2>&1; then
run "npm run test:integration" || {
[ "$STARTED_STRAPI" = "1" ] && kill $(cat .husky/.strapi.pid) >/dev/null 2>&1 || true
exit 1
}
else
echo "⚠️ Skipping integration tests (Strapi not reachable at $STRAPI_URL)"
fi
if [ "$STARTED_STRAPI" = "1" ]; then
kill $(cat .husky/.strapi.pid) >/dev/null 2>&1 || true
rm -f .husky/.strapi.pid
fi
fi
else
echo "⚠️ No package manager found to run pre-push checks" >&2
Expand Down
22 changes: 18 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@

- **Database**: MySQL, Redis
- **Backend Server**: Spring Boot, JPA, Maven/Gradle
- **Note**: Currently using Strapi as temporary backend for testing/local development
- After migration, will return to Spring Boot backend
- **BFF (Backend for Frontend)**: NestJS, GraphQL, TypeORM, TypeScript
- **Frontend**: React 19, Vite, Apollo Client, Panda CSS, Ark UI, Zustand
- React Compiler (RC) via `babel-plugin-react-compiler@rc`
Expand Down Expand Up @@ -392,8 +394,13 @@ VITE_KAKAO_CLIENT_ID=your-kakao-client-id
PORT=3001
NODE_ENV=development

# Spring Boot Backend
# Backend Configuration
# For testing: Use Strapi (temporary)
STRAPI_BACKEND_URL=http://localhost:1337/api
# For production: Use Spring Boot (after migration)
SPRING_BACKEND_URL=http://localhost:8080/api
# Backend Type: 'strapi' or 'spring' (defaults to 'spring')
BACKEND_TYPE=strapi

# Redis
REDIS_HOST=localhost
Expand Down Expand Up @@ -458,9 +465,16 @@ cp backend/.env.example backend/.env
# MySQL: Start via MySQL Workbench or CLI
# Redis: redis-server

# 5. Run database migrations (Spring Boot)
cd backend
./mvnw spring-boot:run
# 5. Start Backend Server
# Option A: Strapi CMS (for testing/local development)
# cd apps/strapi
# pnpm dlx create-strapi-app@latest . --no-run --quickstart # First time only
# pnpm install # Install dependencies
# pnpm dev # Start Strapi CMS at http://localhost:1337

# Option B: Spring Boot (after migration)
# cd backend
# ./mvnw spring-boot:run
# Or for Gradle: ./gradlew bootRun

# 6. Start BFF
Expand Down
Loading