- prisma: PsProblem / PsBookmark / PsSyncState 모델, StudyLog.psProblemId - migration: phase10_ps_tables - ps/solved-ac.client: axios 클라이언트(rate-limit 3req/s, 지수 백오프 3회) searchProblems / getProblem / getUser / getUserProblemStats / getUserTop100 - ps/ps.module + service + controller: search/bookmark/sync 6 endpoint - JWT guard, throttler, sync 멱등성 (PsSyncState lastSolvedCount) - sync 시 시스템 Subject "PS" 자동 생성, StudyLog bulk insert (중복 skip) - me/auth: bojHandle / focusUnits PATCH 지원, MeUser 응답 확장 - vitest: solved-ac.client 7 테스트 통과 (4 메서드 + 429 재시도) Phase 10B DoD 통과.
75 lines
2.3 KiB
JSON
75 lines
2.3 KiB
JSON
{
|
|
"name": "reloop-backend",
|
|
"version": "0.2.0",
|
|
"description": "ReLoop Backend API (v2 — persona forgetting curve)",
|
|
"private": true,
|
|
"license": "UNLICENSED",
|
|
"scripts": {
|
|
"build": "nest build",
|
|
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
"start": "nest start",
|
|
"dev": "nest start --watch",
|
|
"start:debug": "nest start --debug --watch",
|
|
"start:prod": "node dist/main",
|
|
"postinstall": "prisma generate",
|
|
"lint": "eslint \"{src,test}/**/*.ts\" --fix",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"prisma:generate": "prisma generate",
|
|
"prisma:migrate": "prisma migrate dev",
|
|
"prisma:reset": "prisma migrate reset --force",
|
|
"prisma:deploy": "prisma migrate deploy",
|
|
"prisma:seed": "ts-node prisma/seed.ts",
|
|
"cli:kice-import": "ts-node scripts/kice-import.ts",
|
|
"cli:ocr-fix": "ts-node scripts/ocr-fix.ts",
|
|
"cli:wipe-non-math": "ts-node scripts/wipe-non-math.ts"
|
|
},
|
|
"dependencies": {
|
|
"@nestjs/common": "^10.0.0",
|
|
"@nestjs/config": "^4.0.3",
|
|
"@nestjs/core": "^10.0.0",
|
|
"@nestjs/jwt": "^11.0.2",
|
|
"@nestjs/passport": "^11.0.5",
|
|
"@nestjs/platform-express": "^10.0.0",
|
|
"@nestjs/throttler": "^6.5.0",
|
|
"@prisma/client": "^5.0.0",
|
|
"axios": "^1.7",
|
|
"bcrypt": "^6.0.0",
|
|
"class-transformer": "^0.5.1",
|
|
"class-validator": "^0.15.1",
|
|
"express": "^4.22.1",
|
|
"helmet": "^8.1.0",
|
|
"multer": "^2.1.1",
|
|
"passport": "^0.7.0",
|
|
"passport-jwt": "^4.0.1",
|
|
"reflect-metadata": "^0.1.13",
|
|
"rxjs": "^7.8.1"
|
|
},
|
|
"devDependencies": {
|
|
"@nestjs/cli": "^10.0.0",
|
|
"@nestjs/schematics": "^10.0.0",
|
|
"@nestjs/testing": "^10.0.0",
|
|
"@types/bcrypt": "^6.0.0",
|
|
"@types/express": "^4.17.17",
|
|
"@types/node": "^20.3.1",
|
|
"@types/passport-jwt": "^4.0.1",
|
|
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
"@typescript-eslint/parser": "^6.0.0",
|
|
"eslint": "^8.42.0",
|
|
"eslint-config-prettier": "^9.0.0",
|
|
"eslint-plugin-prettier": "^5.0.0",
|
|
"prettier": "^3.0.0",
|
|
"prisma": "^5.0.0",
|
|
"source-map-support": "^0.5.21",
|
|
"ts-loader": "^9.4.3",
|
|
"ts-node": "^10.9.1",
|
|
"tsconfig-paths": "^4.2.0",
|
|
"typescript": "^5.1.3",
|
|
"vitest": "^3.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.0.0"
|
|
},
|
|
"packageManager": "pnpm@9.12.0"
|
|
}
|