From c94ce69e4ff4dcecb9ea41676f1d831cdb6da78d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A4=EC=A0=95=EB=AF=BC?= Date: Wed, 6 May 2026 16:17:51 +0900 Subject: [PATCH] Remove redundant .js extensions from import paths. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TypeScript 소스 파일 내 모든 import 구문에서 불필요한 `.js` 확장자를 제거하여 모듈 참조 방식을 표준화했습니다. - 핸들러, 서비스, 리포지토리 및 테스트 코드를 포함한 프로젝트 전반의 import 경로를 일관성 있게 정리했습니다. --- src/constants/judgment.ts | 2 +- src/constants/tiers.ts | 2 +- src/handlers/adminHandlers.ts | 6 ++--- src/handlers/debugHandlers.ts | 8 +++---- src/handlers/kboHandlers.ts | 12 +++++----- src/handlers/predictionHandlers.ts | 8 +++---- src/handlers/statsHandlers.ts | 6 ++--- src/handlers/userHandlers.ts | 6 ++--- src/kbo/aspnet-client.ts | 2 +- src/kbo/cli.ts | 20 ++++++++--------- src/kbo/game-detail.ts | 8 +++---- src/kbo/game-list.ts | 2 +- src/kbo/player/common.ts | 6 ++--- src/kbo/player/defense.ts | 2 +- src/kbo/player/hitter.ts | 2 +- src/kbo/player/pitcher.ts | 2 +- src/kbo/player/runner.ts | 2 +- src/kbo/schedule.ts | 6 ++--- src/kbo/team-rank.ts | 4 ++-- src/middleware/admin.ts | 4 ++-- src/middleware/auth.ts | 4 ++-- src/repositories/gameRepository.ts | 6 ++--- src/repositories/kboCacheRepository.ts | 2 +- src/repositories/kboRepository.ts | 14 ++++++------ src/repositories/nicknameRepository.ts | 4 ++-- src/repositories/scoreboardCacheRepository.ts | 8 +++---- src/repositories/voteHistoryRepository.ts | 6 ++--- src/repositories/voteRepository.ts | 6 ++--- src/scheduled/dailyArchive.ts | 22 +++++++++---------- src/scheduled/kboRefresh.ts | 8 +++---- src/services/gameDetailService.ts | 4 ++-- src/services/gameListService.ts | 4 ++-- src/services/gameResultService.ts | 14 ++++++------ src/services/gameSyncService.ts | 12 +++++----- src/services/judgmentService.ts | 12 +++++----- src/services/playerService.ts | 14 ++++++------ src/services/predictionService.ts | 12 +++++----- src/services/rankService.ts | 4 ++-- src/services/rankSnapshotService.ts | 14 ++++++------ src/services/scheduleService.ts | 8 +++---- src/services/scoreboardHelpers.ts | 4 ++-- src/services/scoreboardService.ts | 16 +++++++------- src/services/statsService.ts | 18 +++++++-------- src/services/userService.ts | 10 ++++----- src/triggers/onGameCompleted.ts | 12 +++++----- src/types/kbo.ts | 18 +++++++-------- src/types/panit.ts | 2 +- src/types/scoreboard.ts | 2 +- tests/repositories/gameRepository.test.ts | 6 ++--- tests/repositories/kboRepository.test.ts | 4 ++-- .../voteHistoryRepository.test.ts | 8 +++---- tests/repositories/voteRepository.test.ts | 6 ++--- tests/services/gameDetailService.test.ts | 4 ++-- tests/services/gameSyncService.test.ts | 8 +++---- tests/services/judgmentService.test.ts | 10 ++++----- tests/services/scoreboardService.test.ts | 10 ++++----- tests/services/statsService.test.ts | 8 +++---- tests/services/userService.test.ts | 8 +++---- 58 files changed, 221 insertions(+), 221 deletions(-) diff --git a/src/constants/judgment.ts b/src/constants/judgment.ts index 2cadfd7..a9ff2ec 100644 --- a/src/constants/judgment.ts +++ b/src/constants/judgment.ts @@ -1,4 +1,4 @@ -import type { DailyJudgment } from "../types/panit.js"; +import type { DailyJudgment } from "../types/panit"; export interface Thresholds { success: number; diff --git a/src/constants/tiers.ts b/src/constants/tiers.ts index bc20dec..2cd762e 100644 --- a/src/constants/tiers.ts +++ b/src/constants/tiers.ts @@ -1,4 +1,4 @@ -import type { TierName } from "../types/panit.js"; +import type { TierName } from "../types/panit"; interface TierStep { name: TierName; diff --git a/src/handlers/adminHandlers.ts b/src/handlers/adminHandlers.ts index 99af996..cd58417 100644 --- a/src/handlers/adminHandlers.ts +++ b/src/handlers/adminHandlers.ts @@ -1,7 +1,7 @@ import { onRequest } from "firebase-functions/https"; -import { requireAdmin } from "../middleware/admin.js"; -import { sendError } from "../middleware/errors.js"; -import { markGameEnded } from "../services/gameResultService.js"; +import { requireAdmin } from "../middleware/admin"; +import { sendError } from "../middleware/errors"; +import { markGameEnded } from "../services/gameResultService"; export const admin = onRequest(async (req, res) => { const segs = req.path.replace(/^\/+|\/+$/g, "").split("/"); diff --git a/src/handlers/debugHandlers.ts b/src/handlers/debugHandlers.ts index da6e188..2ad6b12 100644 --- a/src/handlers/debugHandlers.ts +++ b/src/handlers/debugHandlers.ts @@ -1,9 +1,9 @@ import { onRequest } from "firebase-functions/https"; import { logger } from "firebase-functions"; -import { runDailyArchive } from "../scheduled/dailyArchive.js"; -import { syncYesterdayFromLive } from "../services/gameSyncService.js"; -import { sendError } from "../middleware/errors.js"; -import { daysAgoKst, parseDateString } from "../types/dateString.js"; +import { runDailyArchive } from "../scheduled/dailyArchive"; +import { syncYesterdayFromLive } from "../services/gameSyncService"; +import { sendError } from "../middleware/errors"; +import { daysAgoKst, parseDateString } from "../types/dateString"; /** * 임시 디버그 핸들러. 인증 없음 — 운영 안정화 후 제거할 것. diff --git a/src/handlers/kboHandlers.ts b/src/handlers/kboHandlers.ts index 6cf2309..b7f2a86 100644 --- a/src/handlers/kboHandlers.ts +++ b/src/handlers/kboHandlers.ts @@ -1,10 +1,10 @@ import { onRequest } from "firebase-functions/https"; -import { getRank } from "../services/rankService.js"; -import { getSchedule } from "../services/scheduleService.js"; -import { getPlayerStats, getValidPlayerTypes } from "../services/playerService.js"; -import { getGameList } from "../services/gameListService.js"; -import { getGameDetail } from "../services/gameDetailService.js"; -import { TeamCode } from "../types/panit.js"; +import { getRank } from "../services/rankService"; +import { getSchedule } from "../services/scheduleService"; +import { getPlayerStats, getValidPlayerTypes } from "../services/playerService"; +import { getGameList } from "../services/gameListService"; +import { getGameDetail } from "../services/gameDetailService"; +import { TeamCode } from "../types/panit"; enum KboPath { Rank = "rank", diff --git a/src/handlers/predictionHandlers.ts b/src/handlers/predictionHandlers.ts index 016bc6b..65bda9b 100644 --- a/src/handlers/predictionHandlers.ts +++ b/src/handlers/predictionHandlers.ts @@ -1,14 +1,14 @@ import { onRequest } from "firebase-functions/https"; -import { requireAuth } from "../middleware/auth.js"; -import { HttpError, sendError } from "../middleware/errors.js"; +import { requireAuth } from "../middleware/auth"; +import { HttpError, sendError } from "../middleware/errors"; import { createPrediction, updatePrediction, getMyVotes, getSummary, listGamesByDate, -} from "../services/predictionService.js"; -import { getScoreboard } from "../services/scoreboardService.js"; +} from "../services/predictionService"; +import { getScoreboard } from "../services/scoreboardService"; export const prediction = onRequest(async (req, res) => { const segs = req.path.replace(/^\/+|\/+$/g, "").split("/"); diff --git a/src/handlers/statsHandlers.ts b/src/handlers/statsHandlers.ts index b3897f6..2b2af0e 100644 --- a/src/handlers/statsHandlers.ts +++ b/src/handlers/statsHandlers.ts @@ -1,7 +1,7 @@ import { onRequest } from "firebase-functions/https"; -import { requireAuth } from "../middleware/auth.js"; -import { sendError } from "../middleware/errors.js"; -import { getStats, getHistory } from "../services/statsService.js"; +import { requireAuth } from "../middleware/auth"; +import { sendError } from "../middleware/errors"; +import { getStats, getHistory } from "../services/statsService"; export const stats = onRequest(async (req, res) => { const segs = req.path.replace(/^\/+|\/+$/g, "").split("/"); diff --git a/src/handlers/userHandlers.ts b/src/handlers/userHandlers.ts index 87dcb69..98745ad 100644 --- a/src/handlers/userHandlers.ts +++ b/src/handlers/userHandlers.ts @@ -1,13 +1,13 @@ import { onRequest } from "firebase-functions/https"; -import { requireAuthToken } from "../middleware/auth.js"; -import { sendError } from "../middleware/errors.js"; +import { requireAuthToken } from "../middleware/auth"; +import { sendError } from "../middleware/errors"; import { checkNickname, createMe, deleteMe, getMe, updateMe, -} from "../services/userService.js"; +} from "../services/userService"; export const user = onRequest(async (req, res) => { try { diff --git a/src/kbo/aspnet-client.ts b/src/kbo/aspnet-client.ts index bc7267d..66fc612 100644 --- a/src/kbo/aspnet-client.ts +++ b/src/kbo/aspnet-client.ts @@ -1,4 +1,4 @@ -import { extractHiddenField } from "./html-utils.js"; +import { extractHiddenField } from "./html-utils"; export const PREFIX = "ctl00$ctl00$ctl00$cphContents$cphContents$cphContents$"; diff --git a/src/kbo/cli.ts b/src/kbo/cli.ts index 75614da..d82bbe2 100644 --- a/src/kbo/cli.ts +++ b/src/kbo/cli.ts @@ -14,7 +14,7 @@ * --series=값 시리즈 필터 (schedule: 정규/시범/포스트) */ -import { padCell } from "./html-utils.js"; +import { padCell } from "./html-utils"; import { fetchTeamRankInitial, fetchTeamRank, @@ -22,7 +22,7 @@ import { type TeamVsRecord, type TeamRankResult, type WinLossDraw, -} from "./team-rank.js"; +} from "./team-rank"; import { fetchPlayerStatsInitial, fetchPlayerStats, @@ -31,25 +31,25 @@ import { type PlayerPageConfig, type PlayerFilters, type PlayerStatsResult, -} from "./player/common.js"; -import { HITTER_CONFIG } from "./player/hitter.js"; -import { PITCHER_CONFIG } from "./player/pitcher.js"; -import { DEFENSE_CONFIG } from "./player/defense.js"; -import { RUNNER_CONFIG } from "./player/runner.js"; +} from "./player/common"; +import { HITTER_CONFIG } from "./player/hitter"; +import { PITCHER_CONFIG } from "./player/pitcher"; +import { DEFENSE_CONFIG } from "./player/defense"; +import { RUNNER_CONFIG } from "./player/runner"; import { fetchSchedule, SERIES_CODES, type ScheduleGame, type ScheduleResult, -} from "./schedule.js"; +} from "./schedule"; import { fetchGameList, LEAGUE_CODES, LeagueCode, type GameListRecord, type GameListResult, -} from "./game-list.js"; -import { fetchGameDetail, type GameDetail } from "./game-detail.js"; +} from "./game-list"; +import { fetchGameDetail, type GameDetail } from "./game-detail"; const PLAYER_CONFIGS: Record = { hitter: HITTER_CONFIG, diff --git a/src/kbo/game-detail.ts b/src/kbo/game-detail.ts index e1463fe..7c6a991 100644 --- a/src/kbo/game-detail.ts +++ b/src/kbo/game-detail.ts @@ -1,7 +1,7 @@ -import { stripTags, decodeHtmlEntities } from "./html-utils.js"; -import { LeagueCode, LEAGUE_CODES } from "./game-list.js"; -import { SERIES_ID } from "./schedule.js"; -import { fetchScoringPlays, type GameScoringPlays } from "./play-by-play.js"; +import { stripTags, decodeHtmlEntities } from "./html-utils"; +import { LeagueCode, LEAGUE_CODES } from "./game-list"; +import { SERIES_ID } from "./schedule"; +import { fetchScoringPlays, type GameScoringPlays } from "./play-by-play"; const BASE_URL = "https://www.koreabaseball.com/ws/Schedule.asmx"; diff --git a/src/kbo/game-list.ts b/src/kbo/game-list.ts index d220fe0..8eee67f 100644 --- a/src/kbo/game-list.ts +++ b/src/kbo/game-list.ts @@ -1,4 +1,4 @@ -import { SERIES_CODES } from "./schedule.js"; +import { SERIES_CODES } from "./schedule"; export { SERIES_CODES }; diff --git a/src/kbo/player/common.ts b/src/kbo/player/common.ts index c3037a1..bef484c 100644 --- a/src/kbo/player/common.ts +++ b/src/kbo/player/common.ts @@ -1,11 +1,11 @@ -import { stripTags, decodeHtmlEntities } from "../html-utils.js"; +import { stripTags, decodeHtmlEntities } from "../html-utils"; import { PREFIX, postback, getInitialPageState, type PageState, type PostbackResponse, -} from "../aspnet-client.js"; +} from "../aspnet-client"; const SM_KEY = `${PREFIX}smData`; const UPDATE_PANEL = `${PREFIX}udpContent`; @@ -39,7 +39,7 @@ export interface PlayerPageConfig { * 구체적인 컬럼 타입이 필요하면 각 페이지 모듈의 타입으로 캐스팅한다. * * @example - * import type { HitterStats } from "./hitter.js"; + * import type { HitterStats } from "./hitter"; * const hitter = record as HitterStats; * console.log(hitter.avg, hitter.hr); */ diff --git a/src/kbo/player/defense.ts b/src/kbo/player/defense.ts index 3660425..deffa43 100644 --- a/src/kbo/player/defense.ts +++ b/src/kbo/player/defense.ts @@ -1,4 +1,4 @@ -import type { PlayerPageConfig, PlayerValue } from "./common.js"; +import type { PlayerPageConfig, PlayerValue } from "./common"; export const DEFENSE_COLUMNS = [ "rank", "player", "team", "pos", "games", "gs", "ip", diff --git a/src/kbo/player/hitter.ts b/src/kbo/player/hitter.ts index c81b7b3..4da87b9 100644 --- a/src/kbo/player/hitter.ts +++ b/src/kbo/player/hitter.ts @@ -1,4 +1,4 @@ -import type { PlayerPageConfig, PlayerValue } from "./common.js"; +import type { PlayerPageConfig, PlayerValue } from "./common"; export const HITTER_COLUMNS = [ "rank", "player", "team", "avg", "games", "pa", "ab", diff --git a/src/kbo/player/pitcher.ts b/src/kbo/player/pitcher.ts index 9e7491a..32c1887 100644 --- a/src/kbo/player/pitcher.ts +++ b/src/kbo/player/pitcher.ts @@ -1,4 +1,4 @@ -import type { PlayerPageConfig, PlayerValue } from "./common.js"; +import type { PlayerPageConfig, PlayerValue } from "./common"; export const PITCHER_COLUMNS = [ "rank", "player", "team", "era", "games", "wins", "losses", diff --git a/src/kbo/player/runner.ts b/src/kbo/player/runner.ts index 24426db..1488b34 100644 --- a/src/kbo/player/runner.ts +++ b/src/kbo/player/runner.ts @@ -1,4 +1,4 @@ -import type { PlayerPageConfig, PlayerValue } from "./common.js"; +import type { PlayerPageConfig, PlayerValue } from "./common"; export const RUNNER_COLUMNS = [ "rank", "player", "team", "games", "sba", "sb", "cs", diff --git a/src/kbo/schedule.ts b/src/kbo/schedule.ts index a757f6c..7d0a780 100644 --- a/src/kbo/schedule.ts +++ b/src/kbo/schedule.ts @@ -1,6 +1,6 @@ -import { stripTags, decodeHtmlEntities } from "./html-utils.js"; -import { TEAM_CODES } from "./player/common.js"; -import { fetchGameList, type PersonRef } from "./game-list.js"; +import { stripTags, decodeHtmlEntities } from "./html-utils"; +import { TEAM_CODES } from "./player/common"; +import { fetchGameList, type PersonRef } from "./game-list"; function toTeamCode(name: string): string { return TEAM_CODES[name] ?? name; diff --git a/src/kbo/team-rank.ts b/src/kbo/team-rank.ts index 486523b..ce71533 100644 --- a/src/kbo/team-rank.ts +++ b/src/kbo/team-rank.ts @@ -1,11 +1,11 @@ -import { stripTags, decodeHtmlEntities } from "./html-utils.js"; +import { stripTags, decodeHtmlEntities } from "./html-utils"; import { PREFIX, postback, getInitialPageState, type PageState, type PostbackResponse, -} from "./aspnet-client.js"; +} from "./aspnet-client"; const PAGE_URL = "https://www.koreabaseball.com/Record/TeamRank/TeamRank.aspx"; diff --git a/src/middleware/admin.ts b/src/middleware/admin.ts index ea69e7a..22854af 100644 --- a/src/middleware/admin.ts +++ b/src/middleware/admin.ts @@ -1,6 +1,6 @@ import type { Request } from "firebase-functions/https"; -import { auth } from "../firebase.js"; -import { HttpError } from "./errors.js"; +import { auth } from "../firebase"; +import { HttpError } from "./errors"; export async function requireAdmin(req: Request): Promise { const header = req.get("authorization") ?? req.get("Authorization"); diff --git a/src/middleware/auth.ts b/src/middleware/auth.ts index 3e98ed6..6e05a53 100644 --- a/src/middleware/auth.ts +++ b/src/middleware/auth.ts @@ -1,7 +1,7 @@ import type { Request } from "firebase-functions/https"; import type { DecodedIdToken } from "firebase-admin/auth"; -import { auth } from "../firebase.js"; -import { HttpError } from "./errors.js"; +import { auth } from "../firebase"; +import { HttpError } from "./errors"; export async function requireAuthToken(req: Request): Promise { const header = req.get("authorization") ?? req.get("Authorization"); diff --git a/src/repositories/gameRepository.ts b/src/repositories/gameRepository.ts index a58300c..cf5c4c3 100644 --- a/src/repositories/gameRepository.ts +++ b/src/repositories/gameRepository.ts @@ -1,7 +1,7 @@ import { Timestamp } from "firebase-admin/firestore"; -import { firestore } from "../firebase.js"; -import type { Game } from "../types/panit.js"; -import { startOfDayKst, type DateString } from "../types/dateString.js"; +import { firestore } from "../firebase"; +import type { Game } from "../types/panit"; +import { startOfDayKst, type DateString } from "../types/dateString"; const COLLECTION = "games"; diff --git a/src/repositories/kboCacheRepository.ts b/src/repositories/kboCacheRepository.ts index 0a9b9bc..c395059 100644 --- a/src/repositories/kboCacheRepository.ts +++ b/src/repositories/kboCacheRepository.ts @@ -1,5 +1,5 @@ import { FieldValue } from "firebase-admin/firestore"; -import { firestore } from "../firebase.js"; +import { firestore } from "../firebase"; const CACHE_COLLECTION = "kboCache"; const LOCK_COLLECTION = "kboLocks"; diff --git a/src/repositories/kboRepository.ts b/src/repositories/kboRepository.ts index 9d8b8e4..8e07177 100644 --- a/src/repositories/kboRepository.ts +++ b/src/repositories/kboRepository.ts @@ -2,14 +2,14 @@ import { fetchTeamRankInitial, fetchTeamRank, type TeamRankResult, -} from "../kbo/team-rank.js"; +} from "../kbo/team-rank"; import { fetchSchedule, type ScheduleFilters, type ScheduleResult, type ScheduleGame, type GameStatus, -} from "../kbo/schedule.js"; +} from "../kbo/schedule"; import { fetchPlayerStatsInitial, fetchPlayerStats, @@ -17,17 +17,17 @@ import { type PlayerPageConfig, type PlayerFilters, type PlayerStatsResult, -} from "../kbo/player/common.js"; +} from "../kbo/player/common"; import { encodeKey, getOrFetch, setCached, acquireLock, releaseLock, -} from "./kboCacheRepository.js"; -import { firestore } from "../firebase.js"; -import { getGameList } from "../services/gameListService.js"; -import type { GameListRecord } from "../kbo/game-list.js"; +} from "./kboCacheRepository"; +import { firestore } from "../firebase"; +import { getGameList } from "../services/gameListService"; +import type { GameListRecord } from "../kbo/game-list"; const TTL_MS = 60 * 60 * 1000; // 1 hour diff --git a/src/repositories/nicknameRepository.ts b/src/repositories/nicknameRepository.ts index 44973aa..33f2174 100644 --- a/src/repositories/nicknameRepository.ts +++ b/src/repositories/nicknameRepository.ts @@ -1,5 +1,5 @@ -import { rtdb } from "../firebase.js"; -import { HttpError } from "../middleware/errors.js"; +import { rtdb } from "../firebase"; +import { HttpError } from "../middleware/errors"; export const RESERVATION_TTL_MS = 10 * 60 * 1000; diff --git a/src/repositories/scoreboardCacheRepository.ts b/src/repositories/scoreboardCacheRepository.ts index 4b6756c..35609ba 100644 --- a/src/repositories/scoreboardCacheRepository.ts +++ b/src/repositories/scoreboardCacheRepository.ts @@ -1,7 +1,7 @@ -import { rtdb } from "../firebase.js"; -import type { DateString } from "../types/dateString.js"; -import type { TeamCode } from "../types/panit.js"; -import type { ScoreboardScopeCache } from "../types/scoreboard.js"; +import { rtdb } from "../firebase"; +import type { DateString } from "../types/dateString"; +import type { TeamCode } from "../types/panit"; +import type { ScoreboardScopeCache } from "../types/scoreboard"; const BASE = "/scoreboardCache"; diff --git a/src/repositories/voteHistoryRepository.ts b/src/repositories/voteHistoryRepository.ts index 1e6dc6e..2f01bc2 100644 --- a/src/repositories/voteHistoryRepository.ts +++ b/src/repositories/voteHistoryRepository.ts @@ -1,6 +1,6 @@ -import { firestore } from "../firebase.js"; -import type { VoteHistoryDoc } from "../types/panit.js"; -import type { DateString } from "../types/dateString.js"; +import { firestore } from "../firebase"; +import type { VoteHistoryDoc } from "../types/panit"; +import type { DateString } from "../types/dateString"; /** * 특정 유저의 voteHistory 서브컬렉션 레퍼런스를 반환한다. diff --git a/src/repositories/voteRepository.ts b/src/repositories/voteRepository.ts index 8b52c72..36f2297 100644 --- a/src/repositories/voteRepository.ts +++ b/src/repositories/voteRepository.ts @@ -1,7 +1,7 @@ import { ServerValue } from "firebase-admin/database"; -import { rtdb } from "../firebase.js"; -import type { VoteEntry } from "../types/panit.js"; -import type { DateString } from "../types/dateString.js"; +import { rtdb } from "../firebase"; +import type { VoteEntry } from "../types/panit"; +import type { DateString } from "../types/dateString"; /** * 특정 경기의 해당 유저 투표를 조회한다. diff --git a/src/scheduled/dailyArchive.ts b/src/scheduled/dailyArchive.ts index a69f412..c98bfef 100644 --- a/src/scheduled/dailyArchive.ts +++ b/src/scheduled/dailyArchive.ts @@ -1,23 +1,23 @@ import { onSchedule } from "firebase-functions/scheduler"; import { logger } from "firebase-functions"; -import { rtdb } from "../firebase.js"; -import { setDay } from "../repositories/voteHistoryRepository.js"; -import { invalidateStats } from "../services/statsService.js"; -import { judgeDay, judgeWeekIfNeeded } from "../services/judgmentService.js"; +import { rtdb } from "../firebase"; +import { setDay } from "../repositories/voteHistoryRepository"; +import { invalidateStats } from "../services/statsService"; +import { judgeDay, judgeWeekIfNeeded } from "../services/judgmentService"; import { precomputeScoreboardCache, snapshotRankForUser, -} from "../services/rankSnapshotService.js"; -import { todayKst } from "../types/dateString.js"; -import { getGame } from "../repositories/gameRepository.js"; -import { deleteUserVoteGame } from "../repositories/voteRepository.js"; -import { processGameEndWithGame } from "../services/gameResultService.js"; -import type { VoteHistoryDoc } from "../types/panit.js"; +} from "../services/rankSnapshotService"; +import { todayKst } from "../types/dateString"; +import { getGame } from "../repositories/gameRepository"; +import { deleteUserVoteGame } from "../repositories/voteRepository"; +import { processGameEndWithGame } from "../services/gameResultService"; +import type { VoteHistoryDoc } from "../types/panit"; import { dayOfWeekKst, daysAgoKst, type DateString, -} from "../types/dateString.js"; +} from "../types/dateString"; interface RawVote { team: string; diff --git a/src/scheduled/kboRefresh.ts b/src/scheduled/kboRefresh.ts index a439e8a..959b632 100644 --- a/src/scheduled/kboRefresh.ts +++ b/src/scheduled/kboRefresh.ts @@ -1,15 +1,15 @@ import { onSchedule } from "firebase-functions/scheduler"; import { logger } from "firebase-functions"; -import { firestore } from "../firebase.js"; +import { firestore } from "../firebase"; import { fetchRankFromKbo, fetchScheduleFromKbo, -} from "../repositories/kboRepository.js"; +} from "../repositories/kboRepository"; import { syncGamesForMonth, syncYesterdayFromLive, -} from "../services/gameSyncService.js"; -import { daysAgoKst } from "../types/dateString.js"; +} from "../services/gameSyncService"; +import { daysAgoKst } from "../types/dateString"; const CACHE_COLLECTION = "kboCache"; diff --git a/src/services/gameDetailService.ts b/src/services/gameDetailService.ts index 8e37965..ca8de8a 100644 --- a/src/services/gameDetailService.ts +++ b/src/services/gameDetailService.ts @@ -3,14 +3,14 @@ import { type GameDetail, type GameDetailFilters, type ScoreBoardMeta, -} from "../kbo/game-detail.js"; +} from "../kbo/game-detail"; import { encodeKey, getCached, setCached, acquireLock, releaseLock, -} from "../repositories/kboCacheRepository.js"; +} from "../repositories/kboCacheRepository"; const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000; const ONE_HOUR_MS = 60 * 60 * 1000; diff --git a/src/services/gameListService.ts b/src/services/gameListService.ts index 33f88f4..f626767 100644 --- a/src/services/gameListService.ts +++ b/src/services/gameListService.ts @@ -4,8 +4,8 @@ import { LeagueCode, SERIES_CODES, type GameListResult, -} from "../kbo/game-list.js"; -import { MemCache } from "../lib/memCache.js"; +} from "../kbo/game-list"; +import { MemCache } from "../lib/memCache"; // 게임센터(GetKboGameList)는 다른 KBO 데이터와 달리 Firestore 공유 캐시 // (kboCacheRepository) 대신 인스턴스 단위 인메모리 캐시를 쓴다. diff --git a/src/services/gameResultService.ts b/src/services/gameResultService.ts index 6ab2f47..5c7dc64 100644 --- a/src/services/gameResultService.ts +++ b/src/services/gameResultService.ts @@ -1,12 +1,12 @@ import { FieldValue } from "firebase-admin/firestore"; import { logger } from "firebase-functions"; -import { firestore, rtdb } from "../firebase.js"; -import { HttpError } from "../middleware/errors.js"; -import { getGame } from "../repositories/gameRepository.js"; -import { getAllUserVotes, deleteGameVotes } from "../repositories/voteRepository.js"; -import { invalidateStats } from "./statsService.js"; -import { fromTimestamp } from "../types/dateString.js"; -import type { Game } from "../types/panit.js"; +import { firestore, rtdb } from "../firebase"; +import { HttpError } from "../middleware/errors"; +import { getGame } from "../repositories/gameRepository"; +import { getAllUserVotes, deleteGameVotes } from "../repositories/voteRepository"; +import { invalidateStats } from "./statsService"; +import { fromTimestamp } from "../types/dateString"; +import type { Game } from "../types/panit"; export async function processGameEnd(gameId: string): Promise<{ processed: number }> { const game = await getGame(gameId); diff --git a/src/services/gameSyncService.ts b/src/services/gameSyncService.ts index 6d14372..90e1789 100644 --- a/src/services/gameSyncService.ts +++ b/src/services/gameSyncService.ts @@ -1,13 +1,13 @@ import { Timestamp } from "firebase-admin/firestore"; -import { firestore } from "../firebase.js"; +import { firestore } from "../firebase"; import { fetchScheduleFromKbo, statusFromRecord, -} from "../repositories/kboRepository.js"; -import { getGameList } from "./gameListService.js"; -import type { GameListRecord } from "../kbo/game-list.js"; -import type { ScheduleGame, GameStatus } from "../kbo/schedule.js"; -import type { Game } from "../types/panit.js"; +} from "../repositories/kboRepository"; +import { getGameList } from "./gameListService"; +import type { GameListRecord } from "../kbo/game-list"; +import type { ScheduleGame, GameStatus } from "../kbo/schedule"; +import type { Game } from "../types/panit"; const COLLECTION = "games"; diff --git a/src/services/judgmentService.ts b/src/services/judgmentService.ts index f11b399..64835f0 100644 --- a/src/services/judgmentService.ts +++ b/src/services/judgmentService.ts @@ -1,18 +1,18 @@ import { logger } from "firebase-functions"; -import { listByDate } from "../repositories/gameRepository.js"; -import { getRange, setDay } from "../repositories/voteHistoryRepository.js"; +import { listByDate } from "../repositories/gameRepository"; +import { getRange, setDay } from "../repositories/voteHistoryRepository"; import { applyDailyJudgmentTx, applyWeeklyMasterTx, getUser, -} from "../repositories/userRepository.js"; +} from "../repositories/userRepository"; import { judgeByCounts, streakBonus, thresholdsFor, -} from "../constants/judgment.js"; -import type { DailyJudgment, VoteHistoryDoc } from "../types/panit.js"; -import { addDaysKst, tuesdayOf, type DateString } from "../types/dateString.js"; +} from "../constants/judgment"; +import type { DailyJudgment, VoteHistoryDoc } from "../types/panit"; +import { addDaysKst, tuesdayOf, type DateString } from "../types/dateString"; /** * `(lastJudged, upTo)` 구간(양 끝 제외)에 **실제 판정 가능한 경기일**(=`thresholdsFor`가 diff --git a/src/services/playerService.ts b/src/services/playerService.ts index b1fb756..119b425 100644 --- a/src/services/playerService.ts +++ b/src/services/playerService.ts @@ -1,10 +1,10 @@ -import { fetchPlayerFromKbo } from "../repositories/kboRepository.js"; -import type { PlayerFilters, PlayerPageConfig, PlayerStatsResult } from "../types/kbo.js"; -import { TeamCode } from "../types/panit.js"; -import { HITTER_CONFIG } from "../kbo/player/hitter.js"; -import { PITCHER_CONFIG } from "../kbo/player/pitcher.js"; -import { DEFENSE_CONFIG } from "../kbo/player/defense.js"; -import { RUNNER_CONFIG } from "../kbo/player/runner.js"; +import { fetchPlayerFromKbo } from "../repositories/kboRepository"; +import type { PlayerFilters, PlayerPageConfig, PlayerStatsResult } from "../types/kbo"; +import { TeamCode } from "../types/panit"; +import { HITTER_CONFIG } from "../kbo/player/hitter"; +import { PITCHER_CONFIG } from "../kbo/player/pitcher"; +import { DEFENSE_CONFIG } from "../kbo/player/defense"; +import { RUNNER_CONFIG } from "../kbo/player/runner"; const PLAYER_CONFIGS: Record = { hitter: HITTER_CONFIG, diff --git a/src/services/predictionService.ts b/src/services/predictionService.ts index b75a9d0..a434fff 100644 --- a/src/services/predictionService.ts +++ b/src/services/predictionService.ts @@ -1,15 +1,15 @@ -import { HttpError } from "../middleware/errors.js"; -import { getGame, listByDate, type GameWithId } from "../repositories/gameRepository.js"; +import { HttpError } from "../middleware/errors"; +import { getGame, listByDate, type GameWithId } from "../repositories/gameRepository"; import { getUserVote, submitVote, changeVote, getCounts, getUserDateVotes, -} from "../repositories/voteRepository.js"; -import type { Game, VoteEntry } from "../types/panit.js"; -import { fromTimestamp, parseDateString, type DateString } from "../types/dateString.js"; -import { MemCache } from "../lib/memCache.js"; +} from "../repositories/voteRepository"; +import type { Game, VoteEntry } from "../types/panit"; +import { fromTimestamp, parseDateString, type DateString } from "../types/dateString"; +import { MemCache } from "../lib/memCache"; type SummaryCounts = { homeCount: number; awayCount: number }; diff --git a/src/services/rankService.ts b/src/services/rankService.ts index 86dd453..6d8c5d7 100644 --- a/src/services/rankService.ts +++ b/src/services/rankService.ts @@ -1,5 +1,5 @@ -import { fetchRankFromKbo } from "../repositories/kboRepository.js"; -import type { TeamRankResult } from "../types/kbo.js"; +import { fetchRankFromKbo } from "../repositories/kboRepository"; +import type { TeamRankResult } from "../types/kbo"; export async function getRank(years: number[]): Promise { return fetchRankFromKbo(years); diff --git a/src/services/rankSnapshotService.ts b/src/services/rankSnapshotService.ts index 90037f0..c39a906 100644 --- a/src/services/rankSnapshotService.ts +++ b/src/services/rankSnapshotService.ts @@ -1,20 +1,20 @@ import { logger } from "firebase-functions"; -import { firestore } from "../firebase.js"; +import { firestore } from "../firebase"; import { countRankedUsers, countUsersAboveTierPoints, getUser, listTopByTierPoints, type ScoreboardUserEntry, -} from "../repositories/userRepository.js"; -import { writeScope, type Scope } from "../repositories/scoreboardCacheRepository.js"; -import { computePercentile, deltaFor } from "./scoreboardHelpers.js"; -import type { DateString } from "../types/dateString.js"; -import { TeamCode, type RankSnapshot } from "../types/panit.js"; +} from "../repositories/userRepository"; +import { writeScope, type Scope } from "../repositories/scoreboardCacheRepository"; +import { computePercentile, deltaFor } from "./scoreboardHelpers"; +import type { DateString } from "../types/dateString"; +import { TeamCode, type RankSnapshot } from "../types/panit"; import type { ScoreboardEntry, ScoreboardScopeCache, -} from "../types/scoreboard.js"; +} from "../types/scoreboard"; /** * 유저 1명의 현재 `tierPoints` 기반 rank를 count aggregation으로 계산해 diff --git a/src/services/scheduleService.ts b/src/services/scheduleService.ts index dbf124a..9585a22 100644 --- a/src/services/scheduleService.ts +++ b/src/services/scheduleService.ts @@ -1,7 +1,7 @@ -import { fetchScheduleFromKbo } from "../repositories/kboRepository.js"; -import { SERIES_CODES } from "../types/kbo.js"; -import type { ScheduleResult } from "../types/kbo.js"; -import type { TeamCode } from "../types/panit.js"; +import { fetchScheduleFromKbo } from "../repositories/kboRepository"; +import { SERIES_CODES } from "../types/kbo"; +import type { ScheduleResult } from "../types/kbo"; +import type { TeamCode } from "../types/panit"; export async function getSchedule( year: number, diff --git a/src/services/scoreboardHelpers.ts b/src/services/scoreboardHelpers.ts index 63a92b3..53c85f0 100644 --- a/src/services/scoreboardHelpers.ts +++ b/src/services/scoreboardHelpers.ts @@ -1,5 +1,5 @@ -import type { Scope } from "../repositories/scoreboardCacheRepository.js"; -import type { RankSnapshot } from "../types/panit.js"; +import type { Scope } from "../repositories/scoreboardCacheRepository"; +import type { RankSnapshot } from "../types/panit"; export function computePercentile(rank: number, totalCount: number): number { if (totalCount <= 0) return 0; diff --git a/src/services/scoreboardService.ts b/src/services/scoreboardService.ts index dc1d8f2..68f5c36 100644 --- a/src/services/scoreboardService.ts +++ b/src/services/scoreboardService.ts @@ -1,22 +1,22 @@ -import { MemCache } from "../lib/memCache.js"; +import { MemCache } from "../lib/memCache"; import { countUsersAboveTierPoints, getUser, -} from "../repositories/userRepository.js"; +} from "../repositories/userRepository"; import { readScope, type Scope, -} from "../repositories/scoreboardCacheRepository.js"; -import { HttpError } from "../middleware/errors.js"; -import { computePercentile, deltaFor } from "./scoreboardHelpers.js"; -import { todayKst } from "../types/dateString.js"; -import { type TeamCode } from "../types/panit.js"; +} from "../repositories/scoreboardCacheRepository"; +import { HttpError } from "../middleware/errors"; +import { computePercentile, deltaFor } from "./scoreboardHelpers"; +import { todayKst } from "../types/dateString"; +import { type TeamCode } from "../types/panit"; import type { ScoreboardEntry, ScoreboardResponse, ScoreboardScopeCache, ScoreboardType, -} from "../types/scoreboard.js"; +} from "../types/scoreboard"; const BURST_TTL_MS = 30_000; diff --git a/src/services/statsService.ts b/src/services/statsService.ts index 6956d52..9fe847d 100644 --- a/src/services/statsService.ts +++ b/src/services/statsService.ts @@ -1,11 +1,11 @@ -import {rtdb} from "../firebase.js"; -import {HttpError} from "../middleware/errors.js"; -import {computeLevel} from "../constants/levels.js"; -import {tierOf} from "../constants/tiers.js"; -import {getAll, getDay} from "../repositories/voteHistoryRepository.js"; -import {getUser} from "../repositories/userRepository.js"; -import {hasMissedGameDayBetween} from "./judgmentService.js"; -import type {DailyJudgment, StatsResponse, VoteHistoryDoc} from "../types/panit.js"; +import {rtdb} from "../firebase"; +import {HttpError} from "../middleware/errors"; +import {computeLevel} from "../constants/levels"; +import {tierOf} from "../constants/tiers"; +import {getAll, getDay} from "../repositories/voteHistoryRepository"; +import {getUser} from "../repositories/userRepository"; +import {hasMissedGameDayBetween} from "./judgmentService"; +import type {DailyJudgment, StatsResponse, VoteHistoryDoc} from "../types/panit"; import { addDaysKst, parseDateString, @@ -14,7 +14,7 @@ import { todayKst, tuesdayOf as tuesdayOfUtil, type DateString, -} from "../types/dateString.js"; +} from "../types/dateString"; type Period = | "current" diff --git a/src/services/userService.ts b/src/services/userService.ts index 87c1544..6f12227 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -1,27 +1,27 @@ import type { DecodedIdToken } from "firebase-admin/auth"; import { FieldValue } from "firebase-admin/firestore"; -import { HttpError } from "../middleware/errors.js"; -import { auth } from "../firebase.js"; +import { HttpError } from "../middleware/errors"; +import { auth } from "../firebase"; import { createUser, deleteUser, findUidByDisplayName, getUser, updateUser, -} from "../repositories/userRepository.js"; +} from "../repositories/userRepository"; import { deleteReservation, releaseReservation, reserveNickname, verifyReservation, -} from "../repositories/nicknameRepository.js"; +} from "../repositories/nicknameRepository"; import { KnowledgeLevel, TeamCode, type Provider, type User, type UserProfile, -} from "../types/panit.js"; +} from "../types/panit"; /** * 내부 User 문서를 클라이언트 응답용 프로필로 변환한다. diff --git a/src/triggers/onGameCompleted.ts b/src/triggers/onGameCompleted.ts index f949efb..c682d80 100644 --- a/src/triggers/onGameCompleted.ts +++ b/src/triggers/onGameCompleted.ts @@ -1,14 +1,14 @@ import {onDocumentUpdated} from "firebase-functions/firestore"; import {logger} from "firebase-functions"; -import {rtdb} from "../firebase.js"; -import {processGameEndWithGame} from "../services/gameResultService.js"; +import {rtdb} from "../firebase"; +import {processGameEndWithGame} from "../services/gameResultService"; import { getAllUserVotes, deleteGameVotes, -} from "../repositories/voteRepository.js"; -import {invalidateStats} from "../services/statsService.js"; -import {fromTimestamp} from "../types/dateString.js"; -import type {Game} from "../types/panit.js"; +} from "../repositories/voteRepository"; +import {invalidateStats} from "../services/statsService"; +import {fromTimestamp} from "../types/dateString"; +import type {Game} from "../types/panit"; /** * `games/{gameId}` 문서 업데이트를 받아 유저 투표를 정리하는 Firestore 트리거. diff --git a/src/types/kbo.ts b/src/types/kbo.ts index 11f46fd..a03b45a 100644 --- a/src/types/kbo.ts +++ b/src/types/kbo.ts @@ -6,32 +6,32 @@ export type { WinLossDraw, TeamVsRecord, TeamRankResult, -} from "../kbo/team-rank.js"; +} from "../kbo/team-rank"; export type { GameStatus, ScheduleGame, ScheduleFilters, ScheduleResult, -} from "../kbo/schedule.js"; +} from "../kbo/schedule"; export type { PlayerPageConfig, PlayerRecord, PlayerFilters, PlayerStatsResult, -} from "../kbo/player/common.js"; +} from "../kbo/player/common"; -export { SERIES_CODES } from "../kbo/schedule.js"; +export { SERIES_CODES } from "../kbo/schedule"; export type { GameListFilters, GameListRecord, GameListResult, PersonRef, -} from "../kbo/game-list.js"; +} from "../kbo/game-list"; -export { LeagueCode, LEAGUE_CODES } from "../kbo/game-list.js"; +export { LeagueCode, LEAGUE_CODES } from "../kbo/game-list"; export type { GameDetail, @@ -50,7 +50,7 @@ export type { KeyPlayerRanking, KeyPlayerItem, KeyPlayerGroup, -} from "../kbo/game-detail.js"; +} from "../kbo/game-detail"; export type { GameScoringPlays, @@ -61,6 +61,6 @@ export type { ScoringOutcome, BaseState, BaseRunner, -} from "../kbo/play-by-play.js"; +} from "../kbo/play-by-play"; -export { SERIES_ID } from "../kbo/schedule.js"; +export { SERIES_ID } from "../kbo/schedule"; diff --git a/src/types/panit.ts b/src/types/panit.ts index 2cd4fb6..64a87c0 100644 --- a/src/types/panit.ts +++ b/src/types/panit.ts @@ -1,5 +1,5 @@ import type { Timestamp } from "firebase-admin/firestore"; -import type { DateString } from "./dateString.js"; +import type { DateString } from "./dateString"; export type Provider = "google" | "apple"; diff --git a/src/types/scoreboard.ts b/src/types/scoreboard.ts index b67b96a..2215e9c 100644 --- a/src/types/scoreboard.ts +++ b/src/types/scoreboard.ts @@ -1,4 +1,4 @@ -import type { TeamCode } from "./panit.js"; +import type { TeamCode } from "./panit"; export interface ScoreboardEntry { uid: string; diff --git a/tests/repositories/gameRepository.test.ts b/tests/repositories/gameRepository.test.ts index 37a3eec..7afbcd1 100644 --- a/tests/repositories/gameRepository.test.ts +++ b/tests/repositories/gameRepository.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it } from "vitest"; import { Timestamp } from "firebase-admin/firestore"; -import { firestore } from "../../src/firebase.js"; -import { getGame, listByDate } from "../../src/repositories/gameRepository.js"; -import type { DateString } from "../../src/types/dateString.js"; +import { firestore } from "../../src/firebase"; +import { getGame, listByDate } from "../../src/repositories/gameRepository"; +import type { DateString } from "../../src/types/dateString"; describe("gameRepository", () => { beforeEach(async () => { diff --git a/tests/repositories/kboRepository.test.ts b/tests/repositories/kboRepository.test.ts index d377dac..767f375 100644 --- a/tests/repositories/kboRepository.test.ts +++ b/tests/repositories/kboRepository.test.ts @@ -1,9 +1,9 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { firestore } from "../../src/firebase.js"; +import { firestore } from "../../src/firebase"; import { fetchRankFromKbo, fetchScheduleFromKbo, -} from "../../src/repositories/kboRepository.js"; +} from "../../src/repositories/kboRepository"; describe("kboRepository (실제 KBO 사이트 호출)", () => { beforeEach(async () => { diff --git a/tests/repositories/voteHistoryRepository.test.ts b/tests/repositories/voteHistoryRepository.test.ts index 078406a..2ce058b 100644 --- a/tests/repositories/voteHistoryRepository.test.ts +++ b/tests/repositories/voteHistoryRepository.test.ts @@ -1,13 +1,13 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { firestore } from "../../src/firebase.js"; +import { firestore } from "../../src/firebase"; import { getAll, getDay, getRange, setDay, -} from "../../src/repositories/voteHistoryRepository.js"; -import type { DateString } from "../../src/types/dateString.js"; -import type { VoteHistoryDoc } from "../../src/types/panit.js"; +} from "../../src/repositories/voteHistoryRepository"; +import type { DateString } from "../../src/types/dateString"; +import type { VoteHistoryDoc } from "../../src/types/panit"; const uid = "test-uid-1"; diff --git a/tests/repositories/voteRepository.test.ts b/tests/repositories/voteRepository.test.ts index c85d831..11f9ca1 100644 --- a/tests/repositories/voteRepository.test.ts +++ b/tests/repositories/voteRepository.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { rtdb } from "../../src/firebase.js"; +import { rtdb } from "../../src/firebase"; import { changeVote, deleteGameVotes, @@ -8,8 +8,8 @@ import { getUserDateVotes, getUserVote, submitVote, -} from "../../src/repositories/voteRepository.js"; -import type { DateString } from "../../src/types/dateString.js"; +} from "../../src/repositories/voteRepository"; +import type { DateString } from "../../src/types/dateString"; const gameId = "20260412HTLG0"; const gameId2 = "20260412WOSK0"; diff --git a/tests/services/gameDetailService.test.ts b/tests/services/gameDetailService.test.ts index fc46cfb..b356d00 100644 --- a/tests/services/gameDetailService.test.ts +++ b/tests/services/gameDetailService.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { firestore } from "../../src/firebase.js"; -import { getGameDetail } from "../../src/services/gameDetailService.js"; +import { firestore } from "../../src/firebase"; +import { getGameDetail } from "../../src/services/gameDetailService"; // 실제 KBO 게임센터 + Firestore 에뮬레이터를 함께 사용한다. // nested-array Firestore 거부, parseGameStartTs NPE 등 회귀를 잡기 위함. diff --git a/tests/services/gameSyncService.test.ts b/tests/services/gameSyncService.test.ts index 5dd4d5c..4740c21 100644 --- a/tests/services/gameSyncService.test.ts +++ b/tests/services/gameSyncService.test.ts @@ -1,13 +1,13 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { firestore } from "../../src/firebase.js"; +import { firestore } from "../../src/firebase"; import { toGameDoc, toTime, syncGamesForMonth, gameUpdateFromRecord, -} from "../../src/services/gameSyncService.js"; -import type { ScheduleGame } from "../../src/kbo/schedule.js"; -import type { GameListRecord } from "../../src/kbo/game-list.js"; +} from "../../src/services/gameSyncService"; +import type { ScheduleGame } from "../../src/kbo/schedule"; +import type { GameListRecord } from "../../src/kbo/game-list"; function baseGame(overrides: Partial = {}): ScheduleGame { return { diff --git a/tests/services/judgmentService.test.ts b/tests/services/judgmentService.test.ts index 8b28d01..64e3087 100644 --- a/tests/services/judgmentService.test.ts +++ b/tests/services/judgmentService.test.ts @@ -1,19 +1,19 @@ import { beforeEach, describe, expect, it } from "vitest"; import { Timestamp } from "firebase-admin/firestore"; -import { firestore } from "../../src/firebase.js"; +import { firestore } from "../../src/firebase"; import { judgeDay, judgeWeekIfNeeded, -} from "../../src/services/judgmentService.js"; -import { setDay } from "../../src/repositories/voteHistoryRepository.js"; -import type { DateString } from "../../src/types/dateString.js"; +} from "../../src/services/judgmentService"; +import { setDay } from "../../src/repositories/voteHistoryRepository"; +import type { DateString } from "../../src/types/dateString"; import type { DailyJudgment, Game, GameStatus, User, VoteHistoryDoc, -} from "../../src/types/panit.js"; +} from "../../src/types/panit"; const uid = "judge-uid"; diff --git a/tests/services/scoreboardService.test.ts b/tests/services/scoreboardService.test.ts index 8aa9671..5cd1539 100644 --- a/tests/services/scoreboardService.test.ts +++ b/tests/services/scoreboardService.test.ts @@ -1,15 +1,15 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { firestore, rtdb } from "../../src/firebase.js"; +import { firestore, rtdb } from "../../src/firebase"; import { __resetScoreboardCaches, getScoreboard, -} from "../../src/services/scoreboardService.js"; +} from "../../src/services/scoreboardService"; import { precomputeScoreboardCache, snapshotRankForUser, -} from "../../src/services/rankSnapshotService.js"; -import { todayKst } from "../../src/types/dateString.js"; -import { TeamCode, type RankSnapshot } from "../../src/types/panit.js"; +} from "../../src/services/rankSnapshotService"; +import { todayKst } from "../../src/types/dateString"; +import { TeamCode, type RankSnapshot } from "../../src/types/panit"; interface SeedUser { uid: string; diff --git a/tests/services/statsService.test.ts b/tests/services/statsService.test.ts index 1c583b1..3b11932 100644 --- a/tests/services/statsService.test.ts +++ b/tests/services/statsService.test.ts @@ -1,18 +1,18 @@ import { beforeEach, describe, expect, it } from "vitest"; import { Timestamp } from "firebase-admin/firestore"; -import { firestore, rtdb } from "../../src/firebase.js"; -import { getStats } from "../../src/services/statsService.js"; +import { firestore, rtdb } from "../../src/firebase"; +import { getStats } from "../../src/services/statsService"; import { addDaysKst, todayKst, type DateString, -} from "../../src/types/dateString.js"; +} from "../../src/types/dateString"; import type { Game, GameStatus, StatsResponse, User, -} from "../../src/types/panit.js"; +} from "../../src/types/panit"; const uid = "stats-uid"; diff --git a/tests/services/userService.test.ts b/tests/services/userService.test.ts index c2c46c0..593e296 100644 --- a/tests/services/userService.test.ts +++ b/tests/services/userService.test.ts @@ -1,18 +1,18 @@ import { beforeEach, describe, expect, it } from "vitest"; import type { DecodedIdToken } from "firebase-admin/auth"; -import { firestore, rtdb } from "../../src/firebase.js"; +import { firestore, rtdb } from "../../src/firebase"; import { checkNickname, createMe, deleteMe, getMe, updateMe, -} from "../../src/services/userService.js"; -import { HttpError } from "../../src/middleware/errors.js"; +} from "../../src/services/userService"; +import { HttpError } from "../../src/middleware/errors"; import { RESERVATION_TTL_MS, reserveNickname, -} from "../../src/repositories/nicknameRepository.js"; +} from "../../src/repositories/nicknameRepository"; const uid = "user-1";