From 0f29fc145b15fa1351b9ee706795596750d49778 Mon Sep 17 00:00:00 2001 From: Nuung Date: Fri, 14 Mar 2025 01:02:26 +0900 Subject: [PATCH 1/2] =?UTF-8?q?delete:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EC=A0=81=20=EA=B4=80=EB=A0=A8=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/tracking.controller.ts | 40 ---------- src/repositories/tracking.repository.ts | 41 ----------- src/routes/tracking.router.ts | 73 ------------------- src/services/tracking.service.ts | 29 -------- src/types/dto/requests/eventRequest.type.ts | 49 ------------- src/types/dto/requests/stayTimeRequest.dto.ts | 37 ---------- src/types/index.ts | 3 - src/types/models/PageVisits.type.ts | 6 -- src/types/models/UserEventTracking.type.ts | 8 -- src/types/userEvent.type.ts | 7 -- 10 files changed, 293 deletions(-) delete mode 100644 src/controllers/tracking.controller.ts delete mode 100644 src/repositories/tracking.repository.ts delete mode 100644 src/routes/tracking.router.ts delete mode 100644 src/services/tracking.service.ts delete mode 100644 src/types/dto/requests/eventRequest.type.ts delete mode 100644 src/types/dto/requests/stayTimeRequest.dto.ts delete mode 100644 src/types/models/PageVisits.type.ts delete mode 100644 src/types/models/UserEventTracking.type.ts delete mode 100644 src/types/userEvent.type.ts diff --git a/src/controllers/tracking.controller.ts b/src/controllers/tracking.controller.ts deleted file mode 100644 index 5a115b8..0000000 --- a/src/controllers/tracking.controller.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NextFunction, Request, RequestHandler, Response } from 'express'; -import logger from '@/configs/logger.config'; -import { TrackingService } from '@/services/tracking.service'; -import { EmptyResponseDto } from '@/types'; - -export class TrackingController { - constructor(private trackingService: TrackingService) {} - - event: RequestHandler = async (req: Request, res: Response, next: NextFunction) => { - try { - const { eventType } = req.body; - const { id } = req.user; - - await this.trackingService.tracking(eventType, id, req.headers); - - const response = new EmptyResponseDto(true, '이벤트 데이터 저장완료', {}, null); - - res.status(200).json(response); - } catch (error) { - logger.error('user tracking 실패 : ', error); - next(error); - } - }; - - stay: RequestHandler = async (req: Request, res: Response, next: NextFunction) => { - try { - const { loadDate, unloadDate } = req.body; - const { id } = req.user; - - await this.trackingService.stay({ loadDate, unloadDate }, id); - - const response = new EmptyResponseDto(true, '체류시간 데이터 저장 완료', {}, null); - - res.status(200).json(response); - } catch (error) { - logger.error('user stay time 저장 실패 : ', error); - next(error); - } - }; -} diff --git a/src/repositories/tracking.repository.ts b/src/repositories/tracking.repository.ts deleted file mode 100644 index 2e10aab..0000000 --- a/src/repositories/tracking.repository.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Pool } from 'pg'; -import logger from '@/configs/logger.config'; -import { DBError } from '@/exception'; -import { EventRequestDto } from '@/types'; - -export class TrackingRepository { - constructor(private readonly pool: Pool) {} - - async createEvent(type: EventRequestDto, id: number, req_headers: object) { - try { - const result = await this.pool.query( - ` - INSERT INTO tracking_usereventtracking (event_type, user_id, request_header, created_at) - VALUES ($1, $2, $3, CURRENT_TIMESTAMP) - RETURNING *; - `, - [type, id, req_headers], - ); - return result.rows[0]; - } catch (error) { - logger.error('User Tracking 정보 저장 중 오류 : ', error); - throw new DBError('User Tracking 정보 저장 중 문제가 발생하였습니다.'); - } - } - - async createStayTime(loadDate: Date, unloadDate: Date, userId: number) { - try { - await this.pool.query( - ` - INSERT INTO tracking_userstaytime (loaded_at, unloaded_at, user_id) - VALUES ($1, $2, $3) - RETURNING *; - `, - [loadDate, unloadDate, userId], - ); - } catch (error) { - logger.error('User Stay Time 정보 저장 중 오류 : ', error); - throw new DBError('User의 체류시간 정보 저장 중 문제가 발생하였습니다.'); - } - } -} diff --git a/src/routes/tracking.router.ts b/src/routes/tracking.router.ts deleted file mode 100644 index 665e4c9..0000000 --- a/src/routes/tracking.router.ts +++ /dev/null @@ -1,73 +0,0 @@ -import express, { Router } from 'express'; -import pool from '@/configs/db.config'; -import dotenv from 'dotenv'; -import { TrackingRepository } from '@/repositories/tracking.repository'; -import { TrackingService } from '@/services/tracking.service'; -import { TrackingController } from '@/controllers/tracking.controller'; -import { validateRequestDto } from '@/middlewares/validation.middleware'; -import { EventRequestDto } from '@/types'; -import { authMiddleware } from '@/middlewares/auth.middleware'; -import { StayTimeRequestDto } from '@/types'; - -const router: Router = express.Router(); -dotenv.config(); - -const trackingRepository = new TrackingRepository(pool); -const trackingService = new TrackingService(trackingRepository); -const trackingController = new TrackingController(trackingService); - -/** - * @swagger - * /event: - * post: - * tags: - * - Tracking - * summary: 사용자 이벤트 등록 - * requestBody: - * required: true - * content: - * application/json: - * schema: - * $ref: '#/components/schemas/EventRequestDto' - * responses: - * '200': - * description: 성공 - * content: - * application/json: - * schema: - * $ref: '#/components/schemas/EmptyResponseDto' - * '400': - * description: DTO 검증 실패 / BadRequestError - * '500': - * description: 서버 오류 / 데이터 베이스 조회 오류 - */ -router.post('/event', authMiddleware.verify, validateRequestDto(EventRequestDto, 'body'), trackingController.event); - -/** - * @swagger - * /stay: - * post: - * tags: - * - Tracking - * summary: 사용자 체류 시간 등록 - * requestBody: - * required: true - * content: - * application/json: - * schema: - * $ref: '#/components/schemas/StayTimeRequestDto' - * responses: - * '200': - * description: 성공 - * content: - * application/json: - * schema: - * $ref: '#/components/schemas/EmptyResponseDto' - * '400': - * description: DTO 검증 실패 - * '500': - * description: 서버 오류 / 데이터 베이스 조회 오류 - */ -router.post('/stay', authMiddleware.verify, validateRequestDto(StayTimeRequestDto, 'body'), trackingController.stay); - -export default router; diff --git a/src/services/tracking.service.ts b/src/services/tracking.service.ts deleted file mode 100644 index 86187bd..0000000 --- a/src/services/tracking.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { EventRequestDto, StayTimeRequestDto } from '@/types'; -import { TrackingRepository } from '@/repositories/tracking.repository'; -import logger from '@/configs/logger.config'; -import { BadRequestError } from '@/exception'; - -export class TrackingService { - constructor(private trackingRepo: TrackingRepository) {} - - async tracking(eventType: EventRequestDto, id: number, req_headers: object) { - return await this.trackingRepo.createEvent(eventType, id, req_headers); - } - - async stay(data: StayTimeRequestDto, userId: number) { - try { - const { loadDate, unloadDate } = data; - if (new Date(loadDate) > new Date(unloadDate)) { - throw new BadRequestError('시간 정보가 올바르지 않습니다.'); - } - - const stayTime = new Date(unloadDate).getTime() - new Date(loadDate).getTime(); - await this.trackingRepo.createStayTime(loadDate, unloadDate, userId); - - return stayTime; - } catch (error) { - logger.error('Tracking Service stay error : ', error); - throw error; - } - } -} diff --git a/src/types/dto/requests/eventRequest.type.ts b/src/types/dto/requests/eventRequest.type.ts deleted file mode 100644 index 1d6642e..0000000 --- a/src/types/dto/requests/eventRequest.type.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { IsEnum, IsNotEmpty } from 'class-validator'; - -/** - * @swagger - * components: - * schemas: - * UserEventType: - * type: string - * enum: ['11', '12', '13', '21', '22', '23', '31', '99'] - * description: | - * 사용자 이벤트 타입 코드 - * * '11' - 로그인 성공 - * * '12' - 페이지 이동 - * * '13' - 로그아웃 - * * '21' - 메인 페이지 - 통계 블록 열림/닫힘 - * * '22' - 메인 페이지 - 정렬(오름차순, 방식) 선택 - * * '23' - 메인 페이지 - 새로고침 버튼 - * * '31' - 리더보드 페이지 - 정렬 방식 선택 - * * '99' - 해당 없음 - * EventRequestDto: - * type: object - * required: - * - eventType - * properties: - * eventType: - * $ref: '#/components/schemas/UserEventType' - * example: - * eventType: '01' - */ -export enum UserEventType { - LOGIN = '11', - NAVIGATE = '12', - LOGOUT = '13', - SECTION_INTERACT_MAIN = '21', - SORT_INTERACT_MAIN = '22', - REFRESH_INTERACT_MAIN = '23', - SORT_INTERACT_BOARD = '31', - NOTHING = '99', -} - -export class EventRequestDto { - @IsEnum(UserEventType) - @IsNotEmpty() - eventType: UserEventType; - - constructor(eventType: UserEventType) { - this.eventType = eventType; - } -} diff --git a/src/types/dto/requests/stayTimeRequest.dto.ts b/src/types/dto/requests/stayTimeRequest.dto.ts deleted file mode 100644 index 14777de..0000000 --- a/src/types/dto/requests/stayTimeRequest.dto.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { IsISO8601, IsNotEmpty } from 'class-validator'; - -/** - * @swagger - * components: - * schemas: - * StayTimeRequestDto: - * type: object - * required: - * - loadDate - * - unloadDate - * properties: - * loadDate: - * type: string - * format: date-time - * description: 시작 날짜 - * example: '2024-01-01' - * unloadDate: - * type: string - * format: date-time - * description: 종료 날짜 - * example: '2024-01-03' - */ -export class StayTimeRequestDto { - @IsISO8601() - @IsNotEmpty() - loadDate: Date; - - @IsISO8601() - @IsNotEmpty() - unloadDate: Date; - - constructor(loadDate: Date, unloadDate: Date) { - this.loadDate = loadDate; - this.unloadDate = unloadDate; - } -} diff --git a/src/types/index.ts b/src/types/index.ts index d5cf39d..c2b2f49 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -2,12 +2,10 @@ export type { User, SampleUser } from '@/types/models/User.type'; export type { Post } from '@/types/models/Post.type'; export type { PostDailyStatistics } from '@/types/models/PostDailyStatistics.type'; export type { PostStatistics } from '@/types/models/PostStatistics.type'; -export type { UserEventTracking } from '@/types/models/UserEventTracking.type'; export type { VelogUserLoginResponse } from '@/types/velog.type'; export type { GetAllPostsQuery } from '@/types/dto/requests/getAllPostsQuery.type'; export type { GetPostQuery, PostParam } from '@/types/dto/requests/getPostQuery.type'; -export { StayTimeRequestDto } from '@/types/dto/requests/stayTimeRequest.dto'; export { GetAllPostsQueryDto } from '@/types/dto/requests/getAllPostsQuery.type'; export { GetPostQueryDto } from '@/types/dto/requests/getPostQuery.type'; export { LoginResponseDto } from '@/types/dto/responses/loginResponse.type'; @@ -18,6 +16,5 @@ export { PostStatisticsResponseDto, RawPostType, } from '@/types/dto/responses/postResponse.type'; -export { EventRequestDto } from '@/types/dto/requests/eventRequest.type'; export { UserWithTokenDto } from '@/types/dto/userWithToken.type'; export { VelogUserLoginDto } from '@/types/dto/velogUser.type'; diff --git a/src/types/models/PageVisits.type.ts b/src/types/models/PageVisits.type.ts deleted file mode 100644 index 55c43fa..0000000 --- a/src/types/models/PageVisits.type.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface PageVisits { - id: number; - loaded_at: Date; - unload_at: Date; - user_id: number; -} diff --git a/src/types/models/UserEventTracking.type.ts b/src/types/models/UserEventTracking.type.ts deleted file mode 100644 index a58e450..0000000 --- a/src/types/models/UserEventTracking.type.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { UserEventType } from '@/types/userEvent.type'; - -export interface UserEventTracking { - id: number; - type: UserEventType; - user_id: number; - created_at: Date; -} diff --git a/src/types/userEvent.type.ts b/src/types/userEvent.type.ts deleted file mode 100644 index fa59303..0000000 --- a/src/types/userEvent.type.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum UserEventType { - LOGIN = '01', - POST_CLICK = '02', - POST_GRAPH_CLICK = '03', - EXIT = '04', - NOTHING = '99', -} From b428152d74db74b7e49f514b3e6783d04ded7128 Mon Sep 17 00:00:00 2001 From: Nuung Date: Fri, 14 Mar 2025 01:02:46 +0900 Subject: [PATCH 2/2] =?UTF-8?q?delete:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EC=A0=81=20=EA=B4=80=EB=A0=A8=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/routes/index.ts b/src/routes/index.ts index 053be54..351fecc 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,6 +1,5 @@ import express, { Router } from 'express'; import UserRouter from './user.router'; -import TrackingRouter from './tracking.router'; import PostRouter from './post.router'; import NotiRouter from './noti.router'; @@ -11,7 +10,6 @@ router.use('/ping', (req, res) => { }); router.use('/', UserRouter); -router.use('/', TrackingRouter); router.use('/', PostRouter); router.use('/', NotiRouter); export default router;