diff --git a/TYPESCRIPT_MIGRATION_POLICY.md b/TYPESCRIPT_MIGRATION_POLICY.md new file mode 100644 index 0000000..3fdb5f9 --- /dev/null +++ b/TYPESCRIPT_MIGRATION_POLICY.md @@ -0,0 +1,32 @@ +# TypeScript 마이그레이션 정책 / DoD (#75) + +## 목표 상태 +- 저장소의 애플리케이션 소스 파일(`app`, `src`, `api`, `scripts`, `tests`)은 `.ts`를 기본으로 사용한다. +- 신규 파일은 `.ts`만 허용한다. +- `.js` 파일은 기술 부채 대상이며 신규 추가를 금지한다. + +## 현재 적용 범위 +- `app.ts` +- `src/**/*.ts` +- `api/**/*.ts` +- `scripts/**/*.ts` +- `tests/**/*.ts` + +## 운영 규칙 +1. 신규 파일 생성 시 `.ts` 확장자만 사용한다. +2. 상대 import는 `.ts` 확장자를 명시한다. +3. 타입 정의 파일은 `src/types/**/*.d.ts`에 모은다. +4. 빌드/검증은 `npm run build`, `npm test`를 PR 기준 필수로 실행한다. + +## 완료 기준(Definition of Done) +- [x] 코드베이스의 실행/테스트 대상 JS 파일이 TS로 전환됨 +- [x] `npm run build` 성공 +- [x] `npm test` 성공 +- [x] CI에서 `npm ci -> npm run build -> npm test` 실행 +- [x] 신규 파일 TS 강제 규칙 문서화 + +## 단계별 타입 강화 계획 +1. 1단계: 파일 확장자 전환(이번 PR) +2. 2단계: `@ts-nocheck` 제거 우선순위 정의(라우터/서비스/모델) +3. 3단계: 모듈별 명시 타입 도입 및 strict 규칙 실질 적용 +4. 4단계: CI에 타입 커버리지/품질 게이트 강화 diff --git a/api/index.js b/api/index.js deleted file mode 100644 index 630b0e7..0000000 --- a/api/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import app, { connectDatabase } from '../app.js'; - -await connectDatabase(); - -export default app; diff --git a/api/index.ts b/api/index.ts new file mode 100644 index 0000000..f9c1279 --- /dev/null +++ b/api/index.ts @@ -0,0 +1,6 @@ +// @ts-nocheck +import app, { connectDatabase } from '../app.ts'; + +await connectDatabase(); + +export default app; diff --git a/app.js b/app.js deleted file mode 100644 index 6c0df52..0000000 --- a/app.js +++ /dev/null @@ -1,198 +0,0 @@ -import 'dotenv/config'; -import express from 'express'; -import cors from 'cors'; -import mongoose from 'mongoose'; -import cookieParser from 'cookie-parser'; -import helmet from 'helmet'; -import { pathToFileURL } from 'url'; -import { v1 } from './src/routers/index.js'; -import authRouter from './src/routers/authRouter.js'; -import userAuthorization from './src/middlewares/userAuthorization.js'; -import { buildResponse } from './src/misc/utils.js'; -import AppError from './src/misc/AppError.js'; -import { validateEnv } from './src/config/validateEnv.js'; - -validateEnv(); - -const app = express(); - -const config = { - PORT: process.env.PORT || 3001, - DB_URL: process.env.DB_URL -}; - -let isShuttingDown = false; -const isServerlessRuntime = Boolean(process.env.VERCEL); -let dbConnectPromise = null; - -mongoose.connection.on('connected', () => { - console.log('정상적으로 MongoDB 서버에 연결되었습니다.'); -}); - -mongoose.connection.on('error', (err) => { - console.error('[MongoDB] connection error:', err); -}); - -mongoose.connection.on('disconnected', () => { - console.error('[MongoDB] disconnected.'); - if (!isShuttingDown && !isServerlessRuntime) { - process.exit(1); - } -}); - -// -------------------- CORS 설정 -------------------- -app.use(helmet()); - -const allowedOrigins = [ - 'http://localhost:3000', // 로컬 프론트 - 'https://todopetclient.vercel.app' // 배포된 프론트 -]; - -const corsOptions = { - origin(origin, callback) { - // Postman 같은 non-browser 요청(origin 없음)은 그냥 통과 - if (!origin) return callback(null, true); - - if (allowedOrigins.includes(origin)) { - return callback(null, true); - } - - // 허용되지 않은 origin - return callback(new Error('Not allowed by CORS')); - }, - credentials: true, // 쿠키 사용 - methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], - allowedHeaders: ['Content-Type', 'Authorization'], - optionsSuccessStatus: 200 -}; - -app.use(cors(corsOptions)); -// preflight(OPTIONS) 요청도 cors 적용 -app.options('*', cors(corsOptions)); - -// -------------------- 공통 미들웨어 -------------------- -app.use(express.json()); -app.use(express.urlencoded({ extended: false })); -app.use(cookieParser()); - -// 정적 파일이 필요하면 주석 해제 -// app.use(express.static(path.join(__dirname, "public"))); - -const getHealthPayload = () => { - const dbStateLabel = ['disconnected', 'connected', 'connecting', 'disconnecting']; - const dbState = dbStateLabel[mongoose.connection.readyState] ?? 'unknown'; - - return { - status: 'ok', - uptime: process.uptime(), - timestamp: new Date().toISOString(), - dbState - }; -}; - -app.get('/health', (req, res) => { - return res.status(200).json(buildResponse(getHealthPayload())); -}); - -app.get('/api/v1/health', (req, res) => { - return res.status(200).json(buildResponse(getHealthPayload())); -}); - -// -------------------- 라우터 등록 -------------------- -app.use('/api/v1', authRouter); -app.use('/api/v1', userAuthorization, v1); - -app.use((req, res, next) => { - next( - new AppError( - 'NotFoundError', - 404, - `요청 경로를 찾을 수 없습니다: ${req.method} ${req.originalUrl}` - ) - ); -}); - -app.use((err, req, res, next) => { - const isAppError = err instanceof AppError; - const statusCode = isAppError - ? err.httpCode - : Number.isInteger(err?.statusCode) - ? err.statusCode - : 500; - - const error = { - name: isAppError ? err.name : err?.name ?? 'InternalServerError', - message: - statusCode >= 500 - ? '서버 내부 오류가 발생했습니다.' - : err?.message ?? '요청 처리 중 오류가 발생했습니다.', - statusCode - }; - - if (statusCode >= 500) { - console.error(err); - } - - return res.status(statusCode).json(buildResponse(null, error)); -}); -const connectDatabase = async () => { - if (mongoose.connection.readyState === 1) { - return; - } - - if (!dbConnectPromise) { - dbConnectPromise = mongoose - .connect(config.DB_URL, { - dbName: 'Todo-Tamers' - }) - .catch((err) => { - console.error('[MongoDB] initial connect failed:', err); - if (!isServerlessRuntime) { - process.exit(1); - } - throw err; - }) - .finally(() => { - dbConnectPromise = null; - }); - } - - await dbConnectPromise; -}; - -const startServer = async () => { - await connectDatabase(); - - const server = app.listen(config.PORT, () => { - console.log(`서버가 ${config.PORT}에서 실행 중....`); - }); - - const gracefulShutdown = async (signal) => { - if (isShuttingDown) return; - isShuttingDown = true; - console.log(`[Server] ${signal} received. shutting down...`); - - server.close(async () => { - try { - await mongoose.connection.close(false); - process.exit(0); - } catch (err) { - console.error('[MongoDB] close failed:', err); - process.exit(1); - } - }); - }; - - process.on('SIGINT', () => gracefulShutdown('SIGINT')); - process.on('SIGTERM', () => gracefulShutdown('SIGTERM')); -}; - -const isDirectRun = - process.argv[1] && pathToFileURL(process.argv[1]).href === import.meta.url; - -if (isDirectRun) { - startServer(); -} - -export { connectDatabase, startServer }; -export default app; diff --git a/app.ts b/app.ts index 0449eb4..3ece680 100644 --- a/app.ts +++ b/app.ts @@ -1 +1,199 @@ -import './app.js'; +// @ts-nocheck +import 'dotenv/config'; +import express from 'express'; +import cors from 'cors'; +import mongoose from 'mongoose'; +import cookieParser from 'cookie-parser'; +import helmet from 'helmet'; +import { pathToFileURL } from 'url'; +import { v1 } from './src/routers/index.ts'; +import authRouter from './src/routers/authRouter.ts'; +import userAuthorization from './src/middlewares/userAuthorization.ts'; +import { buildResponse } from './src/misc/utils.ts'; +import AppError from './src/misc/AppError.ts'; +import { validateEnv } from './src/config/validateEnv.ts'; + +validateEnv(); + +const app = express(); + +const config = { + PORT: process.env.PORT || 3001, + DB_URL: process.env.DB_URL +}; + +let isShuttingDown = false; +const isServerlessRuntime = Boolean(process.env.VERCEL); +let dbConnectPromise = null; + +mongoose.connection.on('connected', () => { + console.log('정상적으로 MongoDB 서버에 연결되었습니다.'); +}); + +mongoose.connection.on('error', (err) => { + console.error('[MongoDB] connection error:', err); +}); + +mongoose.connection.on('disconnected', () => { + console.error('[MongoDB] disconnected.'); + if (!isShuttingDown && !isServerlessRuntime) { + process.exit(1); + } +}); + +// -------------------- CORS 설정 -------------------- +app.use(helmet()); + +const allowedOrigins = [ + 'http://localhost:3000', // 로컬 프론트 + 'https://todopetclient.vercel.app' // 배포된 프론트 +]; + +const corsOptions = { + origin(origin, callback) { + // Postman 같은 non-browser 요청(origin 없음)은 그냥 통과 + if (!origin) return callback(null, true); + + if (allowedOrigins.includes(origin)) { + return callback(null, true); + } + + // 허용되지 않은 origin + return callback(new Error('Not allowed by CORS')); + }, + credentials: true, // 쿠키 사용 + methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], + allowedHeaders: ['Content-Type', 'Authorization'], + optionsSuccessStatus: 200 +}; + +app.use(cors(corsOptions)); +// preflight(OPTIONS) 요청도 cors 적용 +app.options('*', cors(corsOptions)); + +// -------------------- 공통 미들웨어 -------------------- +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); + +// 정적 파일이 필요하면 주석 해제 +// app.use(express.static(path.join(__dirname, "public"))); + +const getHealthPayload = () => { + const dbStateLabel = ['disconnected', 'connected', 'connecting', 'disconnecting']; + const dbState = dbStateLabel[mongoose.connection.readyState] ?? 'unknown'; + + return { + status: 'ok', + uptime: process.uptime(), + timestamp: new Date().toISOString(), + dbState + }; +}; + +app.get('/health', (req, res) => { + return res.status(200).json(buildResponse(getHealthPayload())); +}); + +app.get('/api/v1/health', (req, res) => { + return res.status(200).json(buildResponse(getHealthPayload())); +}); + +// -------------------- 라우터 등록 -------------------- +app.use('/api/v1', authRouter); +app.use('/api/v1', userAuthorization, v1); + +app.use((req, res, next) => { + next( + new AppError( + 'NotFoundError', + 404, + `요청 경로를 찾을 수 없습니다: ${req.method} ${req.originalUrl}` + ) + ); +}); + +app.use((err, req, res, next) => { + const isAppError = err instanceof AppError; + const statusCode = isAppError + ? err.httpCode + : Number.isInteger(err?.statusCode) + ? err.statusCode + : 500; + + const error = { + name: isAppError ? err.name : err?.name ?? 'InternalServerError', + message: + statusCode >= 500 + ? '서버 내부 오류가 발생했습니다.' + : err?.message ?? '요청 처리 중 오류가 발생했습니다.', + statusCode + }; + + if (statusCode >= 500) { + console.error(err); + } + + return res.status(statusCode).json(buildResponse(null, error)); +}); +const connectDatabase = async () => { + if (mongoose.connection.readyState === 1) { + return; + } + + if (!dbConnectPromise) { + dbConnectPromise = mongoose + .connect(config.DB_URL, { + dbName: 'Todo-Tamers' + }) + .catch((err) => { + console.error('[MongoDB] initial connect failed:', err); + if (!isServerlessRuntime) { + process.exit(1); + } + throw err; + }) + .finally(() => { + dbConnectPromise = null; + }); + } + + await dbConnectPromise; +}; + +const startServer = async () => { + await connectDatabase(); + + const server = app.listen(config.PORT, () => { + console.log(`서버가 ${config.PORT}에서 실행 중....`); + }); + + const gracefulShutdown = async (signal) => { + if (isShuttingDown) return; + isShuttingDown = true; + console.log(`[Server] ${signal} received. shutting down...`); + + server.close(async () => { + try { + await mongoose.connection.close(false); + process.exit(0); + } catch (err) { + console.error('[MongoDB] close failed:', err); + process.exit(1); + } + }); + }; + + process.on('SIGINT', () => gracefulShutdown('SIGINT')); + process.on('SIGTERM', () => gracefulShutdown('SIGTERM')); +}; + +const isDirectRun = + process.argv[1] && pathToFileURL(process.argv[1]).href === import.meta.url; + +if (isDirectRun) { + startServer(); +} + +export { connectDatabase, startServer }; +export default app; diff --git a/package.json b/package.json index 709e3c1..05d1742 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "back-end", "version": "1.0.0", "type": "module", - "main": "app.js", + "main": "app.ts", "dependencies": { "axios": "^1.4.0", "bcrypt": "^5.1.1", @@ -34,11 +34,11 @@ "scripts": { "test": "vitest run", "test:watch": "vitest", - "start": "node ./app.js", + "start": "node --loader ts-node/esm ./app.ts", "dev": "nodemon", - "dev:vercel": "nodemon --watch 'api/*' --watch 'src/*' api/index.js", + "dev:vercel": "nodemon --watch 'api/*' --watch 'src/*' api/index.ts", "build": "tsc", - "migrate:todo-category-id": "node ./scripts/migrateTodoCategoryIdToObjectId.js" + "migrate:todo-category-id": "node --loader ts-node/esm ./scripts/migrateTodoCategoryIdToObjectId.ts" }, "repository": { "type": "git", diff --git a/scripts/migrateTodoCategoryIdToObjectId.js b/scripts/migrateTodoCategoryIdToObjectId.ts similarity index 99% rename from scripts/migrateTodoCategoryIdToObjectId.js rename to scripts/migrateTodoCategoryIdToObjectId.ts index 024e904..d3c9c9f 100644 --- a/scripts/migrateTodoCategoryIdToObjectId.js +++ b/scripts/migrateTodoCategoryIdToObjectId.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import dotenv from 'dotenv'; import mongoose from 'mongoose'; diff --git a/src/config/security.js b/src/config/security.ts similarity index 95% rename from src/config/security.js rename to src/config/security.ts index c7b825d..f212462 100644 --- a/src/config/security.js +++ b/src/config/security.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import rateLimit from 'express-rate-limit'; -import { buildResponse } from '../misc/utils.js'; +import { buildResponse } from '../misc/utils.ts'; const toPositiveInt = (value, fallback) => { const parsed = Number.parseInt(value ?? '', 10); diff --git a/src/config/validateEnv.js b/src/config/validateEnv.ts similarity index 98% rename from src/config/validateEnv.js rename to src/config/validateEnv.ts index 40ed1ea..759f83c 100644 --- a/src/config/validateEnv.js +++ b/src/config/validateEnv.ts @@ -1,3 +1,4 @@ +// @ts-nocheck const REQUIRED_ENV_VARS = ['DB_URL', 'JWT_SECRET', 'SIGNATURE_SECRET']; const OPTIONAL_ENV_VARS = [ diff --git a/src/db/models/achieveModel.js b/src/db/models/achieveModel.ts similarity index 67% rename from src/db/models/achieveModel.js rename to src/db/models/achieveModel.ts index 9477ef6..ac3b250 100644 --- a/src/db/models/achieveModel.js +++ b/src/db/models/achieveModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from "mongoose"; -import { achieveSchema } from "../schemas/index.js"; +import { achieveSchema } from "../schemas/index.ts"; const AchieveCategory = model("achieves", achieveSchema); class AchieveModel {} diff --git a/src/db/models/badgeModel.js b/src/db/models/badgeModel.ts similarity index 90% rename from src/db/models/badgeModel.js rename to src/db/models/badgeModel.ts index 55b2e0f..6ae5c58 100644 --- a/src/db/models/badgeModel.js +++ b/src/db/models/badgeModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from "mongoose"; -import { badgeSchema } from "../schemas/index.js"; +import { badgeSchema } from "../schemas/index.ts"; const Badge = model("badges", badgeSchema); diff --git a/src/db/models/historyModel.js b/src/db/models/historyModel.ts similarity index 96% rename from src/db/models/historyModel.js rename to src/db/models/historyModel.ts index b31d466..6961ece 100644 --- a/src/db/models/historyModel.js +++ b/src/db/models/historyModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from 'mongoose'; -import { historySchema } from '../schemas/index.js'; +import { historySchema } from '../schemas/index.ts'; const History = model('histories', historySchema); class HistoryModel { diff --git a/src/db/models/index.js b/src/db/models/index.ts similarity index 72% rename from src/db/models/index.js rename to src/db/models/index.ts index 688a6e3..869901c 100644 --- a/src/db/models/index.js +++ b/src/db/models/index.ts @@ -1,20 +1,21 @@ -import UserModel from './userModel.js'; -import TodoContentModel from './todoContentModel.js'; -import TodoCategoryModel from './todoCategoryModel.js'; -import ItemModel from './itemModel.js'; -import PetModel from './petModel.js'; -import MyPetModel from './myPetModel.js'; -import InventoryModel from './inventoryModel.js'; -import AcheiveModel from './achieveModel.js'; -import HistoryModel from './historyModel.js'; -import BadgeModel from './badgeModel.js'; +// @ts-nocheck +import UserModel from './userModel.ts'; +import TodoContentModel from './todoContentModel.ts'; +import TodoCategoryModel from './todoCategoryModel.ts'; +import ItemModel from './itemModel.ts'; +import PetModel from './petModel.ts'; +import MyPetModel from './myPetModel.ts'; +import InventoryModel from './inventoryModel.ts'; +import AcheiveModel from './achieveModel.ts'; +import HistoryModel from './historyModel.ts'; +import BadgeModel from './badgeModel.ts'; import { model } from 'mongoose'; import { todoCategorySchema, todoContentSchema, historySchema -} from '../schemas/index.js'; +} from '../schemas/index.ts'; export { UserModel, diff --git a/src/db/models/inventoryModel.js b/src/db/models/inventoryModel.ts similarity index 98% rename from src/db/models/inventoryModel.js rename to src/db/models/inventoryModel.ts index 7281c0b..1ca274b 100644 --- a/src/db/models/inventoryModel.js +++ b/src/db/models/inventoryModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from 'mongoose'; -import { inventorySchema } from '../schemas/index.js'; +import { inventorySchema } from '../schemas/index.ts'; const InventoryCategory = model('inventories', inventorySchema); diff --git a/src/db/models/itemModel.js b/src/db/models/itemModel.ts similarity index 90% rename from src/db/models/itemModel.js rename to src/db/models/itemModel.ts index ef357f7..6add4ea 100644 --- a/src/db/models/itemModel.js +++ b/src/db/models/itemModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from "mongoose"; -import { itemSchema } from "../schemas/index.js"; +import { itemSchema } from "../schemas/index.ts"; const Item = model("items", itemSchema); diff --git a/src/db/models/myPetModel.js b/src/db/models/myPetModel.ts similarity index 92% rename from src/db/models/myPetModel.js rename to src/db/models/myPetModel.ts index 3d47faa..5d01256 100644 --- a/src/db/models/myPetModel.js +++ b/src/db/models/myPetModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from 'mongoose'; -import { myPetSchema, petSchema } from '../schemas/index.js'; +import { myPetSchema, petSchema } from '../schemas/index.ts'; const MyPet = model('myPets', myPetSchema); const Pet = model('pets', petSchema); diff --git a/src/db/models/petModel.js b/src/db/models/petModel.ts similarity index 92% rename from src/db/models/petModel.js rename to src/db/models/petModel.ts index eab49a6..43f23ea 100644 --- a/src/db/models/petModel.js +++ b/src/db/models/petModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from 'mongoose'; -import { petSchema } from '../schemas/index.js'; +import { petSchema } from '../schemas/index.ts'; const Pet = model('pets', petSchema); diff --git a/src/db/models/todoCategoryModel.js b/src/db/models/todoCategoryModel.ts similarity index 94% rename from src/db/models/todoCategoryModel.js rename to src/db/models/todoCategoryModel.ts index d77196e..30fcc08 100644 --- a/src/db/models/todoCategoryModel.js +++ b/src/db/models/todoCategoryModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from 'mongoose'; -import { todoCategorySchema } from '../schemas/index.js'; +import { todoCategorySchema } from '../schemas/index.ts'; const TodoCategory = model('todoCategories', todoCategorySchema); diff --git a/src/db/models/todoContentModel.js b/src/db/models/todoContentModel.ts similarity index 98% rename from src/db/models/todoContentModel.js rename to src/db/models/todoContentModel.ts index 8ed9dd4..0c840af 100644 --- a/src/db/models/todoContentModel.js +++ b/src/db/models/todoContentModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import mongoose from 'mongoose'; -// import { todoCategoryModel, todoContentModel, historyModel } from './index.js'; +// import { todoCategoryModel, todoContentModel, historyModel } from './index.ts'; class TodoContentModel { constructor(todoCategoryModel, todoContentModel, historyModel) { diff --git a/src/db/models/userModel.js b/src/db/models/userModel.ts similarity index 97% rename from src/db/models/userModel.js rename to src/db/models/userModel.ts index 2a3288a..dbf2231 100644 --- a/src/db/models/userModel.js +++ b/src/db/models/userModel.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { model } from 'mongoose'; -import { userSchema } from '../schemas/index.js'; +import { userSchema } from '../schemas/index.ts'; const User = model('users', userSchema); diff --git a/src/db/schemas/achieveSchema.js b/src/db/schemas/achieveSchema.ts similarity index 98% rename from src/db/schemas/achieveSchema.js rename to src/db/schemas/achieveSchema.ts index e9fb17f..8b09e1a 100644 --- a/src/db/schemas/achieveSchema.js +++ b/src/db/schemas/achieveSchema.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Schema } from "mongoose"; const achieveSchema = new Schema( diff --git a/src/db/schemas/badgeSchema.js b/src/db/schemas/badgeSchema.ts similarity index 97% rename from src/db/schemas/badgeSchema.js rename to src/db/schemas/badgeSchema.ts index dcb4a76..82e4e60 100644 --- a/src/db/schemas/badgeSchema.js +++ b/src/db/schemas/badgeSchema.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Schema } from 'mongoose'; const badgeSchema = new Schema( diff --git a/src/db/schemas/historySchema.js b/src/db/schemas/historySchema.ts similarity index 96% rename from src/db/schemas/historySchema.js rename to src/db/schemas/historySchema.ts index 6c2c035..2544f7b 100644 --- a/src/db/schemas/historySchema.js +++ b/src/db/schemas/historySchema.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Schema } from "mongoose"; const historySchema = new Schema( diff --git a/src/db/schemas/index.js b/src/db/schemas/index.js deleted file mode 100644 index 4d29f04..0000000 --- a/src/db/schemas/index.js +++ /dev/null @@ -1,23 +0,0 @@ -import inventorySchema from "./inventorySchema.js"; -import itemSchema from "./itemSchema.js"; -import myPetSchema from "./myPetSchema.js"; -import petSchema from "./petSchema.js"; -import todoCategorySchema from "./todoCategorySchema.js"; -import todoContentSchema from "./todoContentSchema.js"; -import userSchema from "./userSchema.js"; -import historySchema from "./historySchema.js"; -import achieveSchema from "./achieveSchema.js"; -import badgeSchema from "./badgeSchema.js"; - -export { - inventorySchema, - itemSchema, - myPetSchema, - petSchema, - todoCategorySchema, - todoContentSchema, - userSchema, - historySchema, - achieveSchema, - badgeSchema -}; diff --git a/src/db/schemas/index.ts b/src/db/schemas/index.ts new file mode 100644 index 0000000..c681f97 --- /dev/null +++ b/src/db/schemas/index.ts @@ -0,0 +1,24 @@ +// @ts-nocheck +import inventorySchema from "./inventorySchema.ts"; +import itemSchema from "./itemSchema.ts"; +import myPetSchema from "./myPetSchema.ts"; +import petSchema from "./petSchema.ts"; +import todoCategorySchema from "./todoCategorySchema.ts"; +import todoContentSchema from "./todoContentSchema.ts"; +import userSchema from "./userSchema.ts"; +import historySchema from "./historySchema.ts"; +import achieveSchema from "./achieveSchema.ts"; +import badgeSchema from "./badgeSchema.ts"; + +export { + inventorySchema, + itemSchema, + myPetSchema, + petSchema, + todoCategorySchema, + todoContentSchema, + userSchema, + historySchema, + achieveSchema, + badgeSchema +}; diff --git a/src/db/schemas/inventorySchema.js b/src/db/schemas/inventorySchema.ts similarity index 97% rename from src/db/schemas/inventorySchema.js rename to src/db/schemas/inventorySchema.ts index b8f14e1..64cf5c6 100644 --- a/src/db/schemas/inventorySchema.js +++ b/src/db/schemas/inventorySchema.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Schema } from 'mongoose'; const inventorySchema = new Schema( diff --git a/src/db/schemas/itemSchema.js b/src/db/schemas/itemSchema.ts similarity index 98% rename from src/db/schemas/itemSchema.js rename to src/db/schemas/itemSchema.ts index 51beecf..897b6dd 100644 --- a/src/db/schemas/itemSchema.js +++ b/src/db/schemas/itemSchema.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Schema } from "mongoose"; const itemSchema = new Schema( diff --git a/src/db/schemas/myPetSchema.js b/src/db/schemas/myPetSchema.ts similarity index 86% rename from src/db/schemas/myPetSchema.js rename to src/db/schemas/myPetSchema.ts index c6df928..a563ff9 100644 --- a/src/db/schemas/myPetSchema.js +++ b/src/db/schemas/myPetSchema.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { Schema } from 'mongoose'; -import petSchema from './petSchema.js'; +import petSchema from './petSchema.ts'; const myPetSchema = new Schema( { diff --git a/src/db/schemas/petSchema.js b/src/db/schemas/petSchema.ts similarity index 98% rename from src/db/schemas/petSchema.js rename to src/db/schemas/petSchema.ts index 57b02a4..d1b3ced 100644 --- a/src/db/schemas/petSchema.js +++ b/src/db/schemas/petSchema.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Schema } from "mongoose"; const petSchema = new Schema( diff --git a/src/db/schemas/todoCategorySchema.js b/src/db/schemas/todoCategorySchema.ts similarity index 87% rename from src/db/schemas/todoCategorySchema.js rename to src/db/schemas/todoCategorySchema.ts index 39b1187..cbb68e7 100644 --- a/src/db/schemas/todoCategorySchema.js +++ b/src/db/schemas/todoCategorySchema.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { Schema } from 'mongoose'; -import todoContentSchema from './todoContentSchema.js'; +import todoContentSchema from './todoContentSchema.ts'; const todoCategorySchema = new Schema( { diff --git a/src/db/schemas/todoContentSchema.js b/src/db/schemas/todoContentSchema.ts similarity index 97% rename from src/db/schemas/todoContentSchema.js rename to src/db/schemas/todoContentSchema.ts index 6708266..c482f29 100644 --- a/src/db/schemas/todoContentSchema.js +++ b/src/db/schemas/todoContentSchema.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Schema } from 'mongoose'; const todoContentSchema = new Schema( diff --git a/src/db/schemas/userSchema.js b/src/db/schemas/userSchema.ts similarity index 97% rename from src/db/schemas/userSchema.js rename to src/db/schemas/userSchema.ts index f4a9bdc..e45cf3b 100644 --- a/src/db/schemas/userSchema.js +++ b/src/db/schemas/userSchema.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Schema } from 'mongoose'; const userSchema = new Schema( diff --git a/src/middlewares/asyncHandler.js b/src/middlewares/asyncHandler.ts similarity index 89% rename from src/middlewares/asyncHandler.js rename to src/middlewares/asyncHandler.ts index ebcdbf5..519f3a9 100644 --- a/src/middlewares/asyncHandler.js +++ b/src/middlewares/asyncHandler.ts @@ -1,4 +1,5 @@ -import { buildResponse } from '../misc/utils.js'; +// @ts-nocheck +import { buildResponse } from '../misc/utils.ts'; const asyncHandler = (requestHandler) => { return async (req, res, next) => { diff --git a/src/middlewares/requestValidator.js b/src/middlewares/requestValidator.ts similarity index 89% rename from src/middlewares/requestValidator.js rename to src/middlewares/requestValidator.ts index ba5e2e5..2ac9404 100644 --- a/src/middlewares/requestValidator.js +++ b/src/middlewares/requestValidator.ts @@ -1,5 +1,6 @@ +// @ts-nocheck import { validationResult } from 'express-validator'; -import { buildResponse } from '../misc/utils.js'; +import { buildResponse } from '../misc/utils.ts'; const requestValidator = (req, res, next) => { const errors = validationResult(req); diff --git a/src/middlewares/signatureMiddleware.js b/src/middlewares/signatureMiddleware.ts similarity index 97% rename from src/middlewares/signatureMiddleware.js rename to src/middlewares/signatureMiddleware.ts index 8c56770..e407130 100644 --- a/src/middlewares/signatureMiddleware.js +++ b/src/middlewares/signatureMiddleware.ts @@ -1,4 +1,5 @@ -import { buildResponse } from '../misc/utils.js'; +// @ts-nocheck +import { buildResponse } from '../misc/utils.ts'; import crypto from 'crypto'; const usedNonces = new Map(); diff --git a/src/middlewares/userAuthorization.js b/src/middlewares/userAuthorization.ts similarity index 91% rename from src/middlewares/userAuthorization.js rename to src/middlewares/userAuthorization.ts index e41d73a..0b0ded1 100644 --- a/src/middlewares/userAuthorization.js +++ b/src/middlewares/userAuthorization.ts @@ -1,5 +1,6 @@ -import jwt from '../utils/jwt.js'; -import { buildResponse } from '../misc/utils.js'; +// @ts-nocheck +import jwt from '../utils/jwt.ts'; +import { buildResponse } from '../misc/utils.ts'; const UNAUTHORIZED_ERROR = { statusCode: 401, diff --git a/src/misc/AppError.js b/src/misc/AppError.ts similarity index 97% rename from src/misc/AppError.js rename to src/misc/AppError.ts index b284619..8b48b8d 100644 --- a/src/misc/AppError.js +++ b/src/misc/AppError.ts @@ -1,3 +1,4 @@ +// @ts-nocheck /** * 기존 에러 클래스를 확장한 AppError 클래스 * 기존 에러 클래스 대비 name과 httpCode를 추가로 저장하여 express의 중앙 에러 핸들러가 에러 처리를 보다 쉽게 할 수 있도록 도와준다. diff --git a/src/misc/utils.js b/src/misc/utils.ts similarity index 98% rename from src/misc/utils.js rename to src/misc/utils.ts index ffcd81b..b59f674 100644 --- a/src/misc/utils.js +++ b/src/misc/utils.ts @@ -1,3 +1,4 @@ +// @ts-nocheck /* 유틸 함수들의 묶음 */ // 데이터 클랜징용 함수, 특정 객체에서 값이 undefined인 key가 있으면 해당 key-value를 삭제한다. // e.g. input: { a: undefined, b: 1 } / output: { b: 1 } diff --git a/src/routers/authRouter.js b/src/routers/authRouter.ts similarity index 95% rename from src/routers/authRouter.js rename to src/routers/authRouter.ts index 87b1748..4ceb334 100644 --- a/src/routers/authRouter.js +++ b/src/routers/authRouter.ts @@ -1,17 +1,18 @@ +// @ts-nocheck import { Router } from 'express'; -import { UserService } from '../services/index.js'; +import { UserService } from '../services/index.ts'; import cookieParser from 'cookie-parser'; import axios from 'axios'; -import asyncHandler from '../middlewares/asyncHandler.js'; -import userAuthorization from '../middlewares/userAuthorization.js'; -import jwt from '../utils/jwt.js'; +import asyncHandler from '../middlewares/asyncHandler.ts'; +import userAuthorization from '../middlewares/userAuthorization.ts'; +import jwt from '../utils/jwt.ts'; import mongoose from 'mongoose'; -import { buildResponse } from '../misc/utils.js'; -import AppError from '../misc/AppError.js'; -import requestValidator from '../middlewares/requestValidator.js'; -import { oauthRedirectCodeValidator } from '../validators/authValidator.js'; -import { authRateLimiter } from '../config/security.js'; +import { buildResponse } from '../misc/utils.ts'; +import AppError from '../misc/AppError.ts'; +import requestValidator from '../middlewares/requestValidator.ts'; +import { oauthRedirectCodeValidator } from '../validators/authValidator.ts'; +import { authRateLimiter } from '../config/security.ts'; const authRouter = Router(); diff --git a/src/routers/badgeRouter.js b/src/routers/badgeRouter.ts similarity index 91% rename from src/routers/badgeRouter.js rename to src/routers/badgeRouter.ts index c095b35..ad68c73 100644 --- a/src/routers/badgeRouter.js +++ b/src/routers/badgeRouter.ts @@ -1,6 +1,7 @@ +// @ts-nocheck import { Router } from 'express'; -import { BadgeService } from '../services/index.js'; -import asyncHandler from '../middlewares/asyncHandler.js'; +import { BadgeService } from '../services/index.ts'; +import asyncHandler from '../middlewares/asyncHandler.ts'; const badgeRouter = Router(); const badgeService = new BadgeService(); diff --git a/src/routers/index.js b/src/routers/index.ts similarity index 54% rename from src/routers/index.js rename to src/routers/index.ts index 9441d46..75044c1 100644 --- a/src/routers/index.js +++ b/src/routers/index.ts @@ -1,13 +1,14 @@ +// @ts-nocheck import { Router } from 'express'; -import userRouter from './userRouter.js'; -import todoCategoryRouter from './todoCategoryRouter.js'; -import todoContentRouter from './todoContentRouter.js'; -import inventoryRouter from './inventoryRouter.js'; -import itemRouter from './itemRouter.js'; -import myPetRouter from './myPetRouter.js'; -import petRouter from './petRouter.js'; -import badgeRouter from './badgeRouter.js'; +import userRouter from './userRouter.ts'; +import todoCategoryRouter from './todoCategoryRouter.ts'; +import todoContentRouter from './todoContentRouter.ts'; +import inventoryRouter from './inventoryRouter.ts'; +import itemRouter from './itemRouter.ts'; +import myPetRouter from './myPetRouter.ts'; +import petRouter from './petRouter.ts'; +import badgeRouter from './badgeRouter.ts'; // 버전1 라우터 const v1Router = Router(); diff --git a/src/routers/inventoryRouter.js b/src/routers/inventoryRouter.ts similarity index 95% rename from src/routers/inventoryRouter.js rename to src/routers/inventoryRouter.ts index a65546b..ecc0d61 100644 --- a/src/routers/inventoryRouter.js +++ b/src/routers/inventoryRouter.ts @@ -1,9 +1,10 @@ +// @ts-nocheck import { Router } from 'express'; -import { InventoryService, MyPetService } from '../services/index.js'; -import { buildResponse } from '../misc/utils.js'; -import asyncHandler from '../middlewares/asyncHandler.js'; -import signatureMiddleware from '../middlewares/signatureMiddleware.js'; -import { signatureRateLimiter } from '../config/security.js'; +import { InventoryService, MyPetService } from '../services/index.ts'; +import { buildResponse } from '../misc/utils.ts'; +import asyncHandler from '../middlewares/asyncHandler.ts'; +import signatureMiddleware from '../middlewares/signatureMiddleware.ts'; +import { signatureRateLimiter } from '../config/security.ts'; const inventoryRouter = Router(); const inventoryService = new InventoryService(); diff --git a/src/routers/itemRouter.js b/src/routers/itemRouter.ts similarity index 90% rename from src/routers/itemRouter.js rename to src/routers/itemRouter.ts index 19935ef..2eb653a 100644 --- a/src/routers/itemRouter.js +++ b/src/routers/itemRouter.ts @@ -1,7 +1,8 @@ +// @ts-nocheck import { Router } from 'express'; -import { ItemService } from '../services/index.js'; -import { buildResponse } from '../misc/utils.js'; -import asyncHandler from '../middlewares/asyncHandler.js'; +import { ItemService } from '../services/index.ts'; +import { buildResponse } from '../misc/utils.ts'; +import asyncHandler from '../middlewares/asyncHandler.ts'; const itemRouter = Router(); const itemService = new ItemService(); diff --git a/src/routers/myPetRouter.js b/src/routers/myPetRouter.ts similarity index 90% rename from src/routers/myPetRouter.js rename to src/routers/myPetRouter.ts index 704d2b2..2f88863 100644 --- a/src/routers/myPetRouter.js +++ b/src/routers/myPetRouter.ts @@ -1,9 +1,10 @@ +// @ts-nocheck import { Router } from 'express'; -import { MyPetService, PetService } from '../services/index.js'; -import { buildResponse } from '../misc/utils.js'; -import asyncHandler from '../middlewares/asyncHandler.js'; -import signatureMiddleware from '../middlewares/signatureMiddleware.js'; -import { signatureRateLimiter } from '../config/security.js'; +import { MyPetService, PetService } from '../services/index.ts'; +import { buildResponse } from '../misc/utils.ts'; +import asyncHandler from '../middlewares/asyncHandler.ts'; +import signatureMiddleware from '../middlewares/signatureMiddleware.ts'; +import { signatureRateLimiter } from '../config/security.ts'; const myPetRouter = Router(); const myPetService = new MyPetService(); diff --git a/src/routers/petRouter.js b/src/routers/petRouter.ts similarity index 91% rename from src/routers/petRouter.js rename to src/routers/petRouter.ts index 7418f42..dc531d1 100644 --- a/src/routers/petRouter.js +++ b/src/routers/petRouter.ts @@ -1,7 +1,8 @@ +// @ts-nocheck import { Router } from 'express'; -import { PetService } from '../services/index.js'; -import { buildResponse } from '../misc/utils.js'; -import asyncHandler from '../middlewares/asyncHandler.js'; +import { PetService } from '../services/index.ts'; +import { buildResponse } from '../misc/utils.ts'; +import asyncHandler from '../middlewares/asyncHandler.ts'; const petRouter = Router(); const petService = new PetService(); diff --git a/src/routers/todoCategoryRouter.js b/src/routers/todoCategoryRouter.ts similarity index 89% rename from src/routers/todoCategoryRouter.js rename to src/routers/todoCategoryRouter.ts index 2d7bef4..cd02419 100644 --- a/src/routers/todoCategoryRouter.js +++ b/src/routers/todoCategoryRouter.ts @@ -1,12 +1,13 @@ +// @ts-nocheck import { Router } from 'express'; -import { TodoCategoryService } from '../services/index.js'; -import asyncHandler from '../middlewares/asyncHandler.js'; -import requestValidator from '../middlewares/requestValidator.js'; +import { TodoCategoryService } from '../services/index.ts'; +import asyncHandler from '../middlewares/asyncHandler.ts'; +import requestValidator from '../middlewares/requestValidator.ts'; import { todoIdParamValidator, createCategoryValidator, updateCategoryValidator -} from '../validators/todoValidator.js'; +} from '../validators/todoValidator.ts'; const todoCategoryRouter = Router(); const todoCategoryService = new TodoCategoryService(); diff --git a/src/routers/todoContentRouter.js b/src/routers/todoContentRouter.ts similarity index 88% rename from src/routers/todoContentRouter.js rename to src/routers/todoContentRouter.ts index 0c0e10f..696290a 100644 --- a/src/routers/todoContentRouter.js +++ b/src/routers/todoContentRouter.ts @@ -1,15 +1,16 @@ +// @ts-nocheck import { Router } from 'express'; -import { TodoContentService } from '../services/index.js'; -import asyncHandler from '../middlewares/asyncHandler.js'; -import signatureMiddleware from '../middlewares/signatureMiddleware.js'; -import requestValidator from '../middlewares/requestValidator.js'; +import { TodoContentService } from '../services/index.ts'; +import asyncHandler from '../middlewares/asyncHandler.ts'; +import signatureMiddleware from '../middlewares/signatureMiddleware.ts'; +import requestValidator from '../middlewares/requestValidator.ts'; import { todoDateRangeValidator, todoIdParamValidator, createTodoValidator, updateTodoValidator -} from '../validators/todoValidator.js'; -import { signatureRateLimiter } from '../config/security.js'; +} from '../validators/todoValidator.ts'; +import { signatureRateLimiter } from '../config/security.ts'; const todoContentRouter = Router(); const todoContentService = new TodoContentService(); diff --git a/src/routers/userRouter.js b/src/routers/userRouter.ts similarity index 86% rename from src/routers/userRouter.js rename to src/routers/userRouter.ts index b691253..f5aec31 100644 --- a/src/routers/userRouter.js +++ b/src/routers/userRouter.ts @@ -1,14 +1,15 @@ +// @ts-nocheck import { Router } from 'express'; -import { HistoryService, UserService } from '../services/index.js'; -import { buildResponse } from '../misc/utils.js'; -import asyncHandler from '../middlewares/asyncHandler.js'; -import userAuthorization from '../middlewares/userAuthorization.js'; -import requestValidator from '../middlewares/requestValidator.js'; +import { HistoryService, UserService } from '../services/index.ts'; +import { buildResponse } from '../misc/utils.ts'; +import asyncHandler from '../middlewares/asyncHandler.ts'; +import userAuthorization from '../middlewares/userAuthorization.ts'; +import requestValidator from '../middlewares/requestValidator.ts'; import { rankCountValidator, nicknameValidator, membershipStatusValidator -} from '../validators/userValidator.js'; +} from '../validators/userValidator.ts'; const userRouter = Router(); const userService = new UserService(); diff --git a/src/services/badgeService.js b/src/services/badgeService.ts similarity index 89% rename from src/services/badgeService.js rename to src/services/badgeService.ts index 9c61ccd..7c8860a 100644 --- a/src/services/badgeService.js +++ b/src/services/badgeService.ts @@ -1,4 +1,5 @@ -import { BadgeModel } from '../db/models/index.js'; +// @ts-nocheck +import { BadgeModel } from '../db/models/index.ts'; class BadgeService { constructor() { diff --git a/src/services/historyService.js b/src/services/historyService.ts similarity index 96% rename from src/services/historyService.js rename to src/services/historyService.ts index 2b2274b..fedc7d6 100644 --- a/src/services/historyService.js +++ b/src/services/historyService.ts @@ -1,4 +1,5 @@ -import { HistoryModel, UserModel } from '../db/models/index.js'; +// @ts-nocheck +import { HistoryModel, UserModel } from '../db/models/index.ts'; import dayjs from 'dayjs'; class HistoryService { diff --git a/src/services/index.js b/src/services/index.js deleted file mode 100644 index 786f4c2..0000000 --- a/src/services/index.js +++ /dev/null @@ -1,23 +0,0 @@ -import UserService from './userService.js'; -import TodoCategoryService from './todoCategoryService.js'; -import TodoContentService from './todoContentService.js'; -import InventoryService from './inventoryService.js'; -import ItemService from './itemService.js'; -import MyPetService from './myPetService.js'; -import PetService from './petService.js'; -import HistoryService from './historyService.js'; -import RewardService from './rewardService.js'; -import BadgeService from './badgeService.js'; - -export { - UserService, - TodoCategoryService, - TodoContentService, - InventoryService, - ItemService, - MyPetService, - PetService, - HistoryService, - RewardService, - BadgeService -}; diff --git a/src/services/index.ts b/src/services/index.ts new file mode 100644 index 0000000..673f385 --- /dev/null +++ b/src/services/index.ts @@ -0,0 +1,24 @@ +// @ts-nocheck +import UserService from './userService.ts'; +import TodoCategoryService from './todoCategoryService.ts'; +import TodoContentService from './todoContentService.ts'; +import InventoryService from './inventoryService.ts'; +import ItemService from './itemService.ts'; +import MyPetService from './myPetService.ts'; +import PetService from './petService.ts'; +import HistoryService from './historyService.ts'; +import RewardService from './rewardService.ts'; +import BadgeService from './badgeService.ts'; + +export { + UserService, + TodoCategoryService, + TodoContentService, + InventoryService, + ItemService, + MyPetService, + PetService, + HistoryService, + RewardService, + BadgeService +}; diff --git a/src/services/inventoryService.js b/src/services/inventoryService.ts similarity index 98% rename from src/services/inventoryService.js rename to src/services/inventoryService.ts index fc33528..b96e260 100644 --- a/src/services/inventoryService.js +++ b/src/services/inventoryService.ts @@ -1,5 +1,6 @@ -import { InventoryModel, ItemModel } from '../db/models/index.js'; -import { ItemService } from './index.js'; +// @ts-nocheck +import { InventoryModel, ItemModel } from '../db/models/index.ts'; +import { ItemService } from './index.ts'; import mongoose from 'mongoose'; class InventoryService { diff --git a/src/services/itemService.js b/src/services/itemService.ts similarity index 92% rename from src/services/itemService.js rename to src/services/itemService.ts index 7db0cd2..a6ff9d2 100644 --- a/src/services/itemService.js +++ b/src/services/itemService.ts @@ -1,4 +1,5 @@ -import { ItemModel } from '../db/models/index.js'; +// @ts-nocheck +import { ItemModel } from '../db/models/index.ts'; class ItemService { constructor() { diff --git a/src/services/myPetService.js b/src/services/myPetService.ts similarity index 98% rename from src/services/myPetService.js rename to src/services/myPetService.ts index bc63f4b..006c3f2 100644 --- a/src/services/myPetService.js +++ b/src/services/myPetService.ts @@ -1,5 +1,6 @@ -import { MyPetModel, PetModel } from '../db/models/index.js'; -import { PetService, InventoryService } from './index.js'; +// @ts-nocheck +import { MyPetModel, PetModel } from '../db/models/index.ts'; +import { PetService, InventoryService } from './index.ts'; import mongoose from 'mongoose'; import dayjs from 'dayjs'; diff --git a/src/services/petService.js b/src/services/petService.ts similarity index 90% rename from src/services/petService.js rename to src/services/petService.ts index 8c74423..154f5fb 100644 --- a/src/services/petService.js +++ b/src/services/petService.ts @@ -1,4 +1,5 @@ -import { PetModel } from '../db/models/index.js'; +// @ts-nocheck +import { PetModel } from '../db/models/index.ts'; class PetService { constructor() { diff --git a/src/services/rewardService.js b/src/services/rewardService.ts similarity index 97% rename from src/services/rewardService.js rename to src/services/rewardService.ts index 2f57298..a8d41c5 100644 --- a/src/services/rewardService.js +++ b/src/services/rewardService.ts @@ -1,4 +1,5 @@ -import { InventoryService, ItemService } from './index.js'; +// @ts-nocheck +import { InventoryService, ItemService } from './index.ts'; class RewardService { constructor() { diff --git a/src/services/todoCategoryService.js b/src/services/todoCategoryService.ts similarity index 92% rename from src/services/todoCategoryService.js rename to src/services/todoCategoryService.ts index 9259c21..a88d495 100644 --- a/src/services/todoCategoryService.js +++ b/src/services/todoCategoryService.ts @@ -1,4 +1,5 @@ -import { TodoCategoryModel } from '../db/models/index.js'; +// @ts-nocheck +import { TodoCategoryModel } from '../db/models/index.ts'; class TodoCategoryService { constructor() { diff --git a/src/services/todoContentService.js b/src/services/todoContentService.ts similarity index 97% rename from src/services/todoContentService.js rename to src/services/todoContentService.ts index 0ebf377..6cd11c5 100644 --- a/src/services/todoContentService.js +++ b/src/services/todoContentService.ts @@ -1,10 +1,11 @@ -import { todoContentModel, TodoCategoryModel } from '../db/models/index.js'; +// @ts-nocheck +import { todoContentModel, TodoCategoryModel } from '../db/models/index.ts'; import { HistoryService, InventoryService, RewardService -} from '../services/index.js'; -import { maxVolume } from '../utils/common.js'; +} from '../services/index.ts'; +import { maxVolume } from '../utils/common.ts'; import dayjs from 'dayjs'; class TodoContentService { diff --git a/src/services/userService.js b/src/services/userService.ts similarity index 97% rename from src/services/userService.js rename to src/services/userService.ts index f70fc4e..b2c765f 100644 --- a/src/services/userService.js +++ b/src/services/userService.ts @@ -1,11 +1,12 @@ -import { UserModel, HistoryModel } from '../db/models/index.js'; +// @ts-nocheck +import { UserModel, HistoryModel } from '../db/models/index.ts'; import { InventoryService, MyPetService, TodoCategoryService, TodoContentService -} from './index.js'; -import { setKoreaDay, formatDateToString } from '../utils/common.js'; +} from './index.ts'; +import { setKoreaDay, formatDateToString } from '../utils/common.ts'; class UserService { constructor() { diff --git a/src/utils/common.js b/src/utils/common.ts similarity index 98% rename from src/utils/common.js rename to src/utils/common.ts index 4601c52..730f403 100644 --- a/src/utils/common.js +++ b/src/utils/common.ts @@ -1,3 +1,4 @@ +// @ts-nocheck // 인벤토리 최대 아이템 소지 갯수 export const maxVolume = 50; /** diff --git a/src/utils/jwt.js b/src/utils/jwt.ts similarity index 98% rename from src/utils/jwt.js rename to src/utils/jwt.ts index e37a165..8e7bf7f 100644 --- a/src/utils/jwt.js +++ b/src/utils/jwt.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import jwt from 'jsonwebtoken'; const getSecretKey = () => { diff --git a/src/validators/authValidator.js b/src/validators/authValidator.ts similarity index 95% rename from src/validators/authValidator.js rename to src/validators/authValidator.ts index 5ea90ef..f233e41 100644 --- a/src/validators/authValidator.js +++ b/src/validators/authValidator.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { query } from 'express-validator'; const oauthRedirectCodeValidator = [ diff --git a/src/validators/todoValidator.js b/src/validators/todoValidator.ts similarity index 99% rename from src/validators/todoValidator.js rename to src/validators/todoValidator.ts index 34f1d33..29158ab 100644 --- a/src/validators/todoValidator.js +++ b/src/validators/todoValidator.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { body, param, query } from 'express-validator'; const todoIdParamValidator = [ diff --git a/src/validators/userValidator.js b/src/validators/userValidator.ts similarity index 98% rename from src/validators/userValidator.js rename to src/validators/userValidator.ts index 8213d83..ddd027e 100644 --- a/src/validators/userValidator.js +++ b/src/validators/userValidator.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { body, param } from 'express-validator'; const rankCountValidator = [ diff --git a/tests/app.integration.test.js b/tests/app.integration.test.ts similarity index 93% rename from tests/app.integration.test.js rename to tests/app.integration.test.ts index 801231e..b519ea6 100644 --- a/tests/app.integration.test.js +++ b/tests/app.integration.test.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { beforeAll, describe, expect, it } from 'vitest'; import request from 'supertest'; @@ -9,8 +10,8 @@ beforeAll(async () => { process.env.JWT_SECRET = process.env.JWT_SECRET ?? 'test-jwt-secret'; process.env.SIGNATURE_SECRET = process.env.SIGNATURE_SECRET ?? 'test-signature-secret'; - ({ default: app } = await import('../app.js')); - ({ default: jwtUtil } = await import('../src/utils/jwt.js')); + ({ default: app } = await import('../app.ts')); + ({ default: jwtUtil } = await import('../src/utils/jwt.ts')); }); describe('App Integration', () => { diff --git a/tsconfig.json b/tsconfig.json index 559ef07..e05f177 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,12 +11,17 @@ "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "types": ["node", "express"], + "allowImportingTsExtensions": true, "noUnusedLocals": true, "noUnusedParameters": true, "noEmit": true }, "include": [ "app.ts", + "src/**/*.ts", + "api/**/*.ts", + "scripts/**/*.ts", + "tests/**/*.ts", "src/types/**/*.d.ts" ], "exclude": [