Skip to content

Refactor: Admin/Event/Ticket 미사용 컬럼·테이블 정리 (#327)#328

Merged
IISweetHeartII merged 1 commit intodevfrom
refactor/cleanup-unused-columns-#327
Mar 10, 2026
Merged

Refactor: Admin/Event/Ticket 미사용 컬럼·테이블 정리 (#327)#328
IISweetHeartII merged 1 commit intodevfrom
refactor/cleanup-unused-columns-#327

Conversation

@IISweetHeartII
Copy link
Contributor

Summary

DB 감사 결과 코드에서도 DB에서도 실제로 사용되지 않는 테이블, 컬럼, enum 값을 정리합니다.

Changes

테이블 삭제

  • event_feedback_submission 테이블 및 관련 코드 전체 삭제 (entity, service, repository, enum 5개 파일)

컬럼 삭제

  • event: description, max_participation, goal_config 삭제
  • event_participation: progress, is_completed, completed_at, last_progressed_at, granted_by, grant_reason 삭제

Enum 정리

  • EventRewardStatus: UNDER_REVIEW, REJECTED 제거

코드 정리

  • AdminEventRewardFacade: EventFeedbackSubmission 관련 로직 및 externalSubmissionId 제거
  • EventRewardLifecycleFacade: trackInsightChallengeProgress 제거 (미사용 진행형 이벤트 기능)
  • EventRewardReadService: getProgressCard 제거
  • EventController: progress-card 엔드포인트 제거
  • EventProgressCardResDTO 제거
  • InsightFacade: EventRewardLifecycleFacade 의존성 제거
  • AdminModule: TypeORM import 및 provider 정리
  • Modal.js: 외부 제출 ID 필드 제거

Type of Change

  • Refactoring (기능 변경 없이 코드 개선)

Target Environment

  • Dev (dev)

Related Issues

Testing

  • 로컬에서 빌드가 성공합니다 (pnpm run build — 0 issues)
  • 로컬에서 린트가 통과합니다 (pnpm run lint)
  • 삭제된 항목에 대한 코드 참조 전수 검사 완료 (grep 8항목 전부 No matches)
  • Dev/Prod DB 마이그레이션 적용 완료

Checklist

  • 코드 컨벤션을 준수했습니다 (docs/development/CODE_STYLE.md)
  • Git 컨벤션을 준수했습니다 (docs/development/GIT_CONVENTIONS.md)
  • 네이밍 컨벤션을 준수했습니다 (docs/development/NAMING_CONVENTIONS.md)
  • 로컬에서 빌드가 성공합니다 (pnpm run build)
  • 로컬에서 린트가 통과합니다 (pnpm run lint)
  • (API 변경 시) Swagger 문서가 업데이트되었습니다

Screenshots (Optional)

N/A

Additional Notes

  • ticket.paymentId, ticket.eventParticipationId, ticket.ticketGrantId는 감사 추적용으로 보류
  • DB 마이그레이션은 Dev/Prod 모두 이미 적용 완료 상태이므로, 코드 배포가 우선되어야 합니다
  • 21 files changed, 58 insertions(+), 479 deletions(-)

@IISweetHeartII IISweetHeartII self-assigned this Mar 10, 2026
@IISweetHeartII IISweetHeartII merged commit d092e9e into dev Mar 10, 2026
2 checks passed
IISweetHeartII added a commit that referenced this pull request Mar 10, 2026
* refactor: Admin/Event/Ticket 미사용 컬럼·테이블 정리 (#327) (#328)

* fix: 마이그레이션 enum 정리 멱등성 보장 (#327) (#329)
@gemini-code-assist
Copy link

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 데이터베이스 감사 결과 실제로 사용되지 않는 테이블, 컬럼, enum 값 및 관련 코드를 정리하여 시스템의 불필요한 부분을 제거하고 코드베이스를 간소화하는 것을 목표로 합니다. 이를 통해 유지보수성을 향상시키고 잠재적인 혼란을 줄이며, 애플리케이션의 효율성을 높입니다.

Highlights

  • 테이블 및 관련 코드 삭제: 사용되지 않는 event_feedback_submission 테이블과 이에 관련된 엔티티, 서비스, 레포지토리, enum 파일 5개가 완전히 제거되었습니다.
  • 컬럼 삭제: event 테이블에서 description, max_participation, goal_config 컬럼이, event_participation 테이블에서 progress, is_completed, completed_at, last_progressed_at, granted_by, grant_reason 컬럼이 제거되었습니다.
  • Enum 값 정리: EventRewardStatus enum에서 UNDER_REVIEWREJECTED 값이 제거되어 간소화되었습니다.
  • 코드 로직 및 의존성 제거: AdminEventRewardFacade에서 EventFeedbackSubmission 관련 로직 및 externalSubmissionId 필드가 제거되었고, EventRewardLifecycleFacade에서 미사용 진행형 이벤트 기능인 trackInsightChallengeProgress가 제거되었습니다. 또한 InsightFacade에서 EventRewardLifecycleFacade 의존성이 제거되었습니다.
  • API 엔드포인트 및 DTO 제거: EventRewardReadService에서 getProgressCard 메서드가 제거되었고, EventController에서 progress-card 엔드포인트가 제거되었으며, EventProgressCardResDTO 클래스도 함께 제거되었습니다.
  • 모듈 및 UI 정리: AdminModule에서 TypeORM 임포트 및 관련 프로바이더가 정리되었고, admin-client/assets/components/Modal.js에서 외부 제출 ID 필드가 제거되었습니다.
  • DB 마이그레이션 스크립트 추가: 사용되지 않는 테이블, 컬럼, enum을 데이터베이스에서 정리하는 SQL 마이그레이션 스크립트가 추가되었습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • admin-client/assets/components/Modal.js
    • 외부 제출 ID 관련 UI 필드가 제거됨
  • src/modules/admin/admin.module.ts
    • EventFeedbackSubmission 관련 TypeORM 모듈 임포트 및 프로바이더가 제거됨
  • src/modules/admin/application/dtos/admin-event-reward.dto.ts
    • externalSubmissionId 필드가 DTO에서 제거됨
  • src/modules/admin/application/facades/admin-event-reward.facade.ts
    • EventFeedbackSubmissionService 의존성 및 관련 로직이 제거됨
  • src/modules/admin/application/services/event-feedback-submission.service.ts
    • 파일이 제거됨
  • src/modules/admin/domain/entities/event-feedback-submission.entity.ts
    • 파일이 제거됨
  • src/modules/admin/domain/enums/event-feedback-review-status.enum.ts
    • 파일이 제거됨
  • src/modules/admin/domain/enums/event-feedback-source.enum.ts
    • 파일이 제거됨
  • src/modules/admin/infrastructure/event-feedback-submission.repository.ts
    • 파일이 제거됨
  • src/modules/event/application/dtos/event.dto.ts
    • EventProgressCardResDTO 클래스가 제거됨
  • src/modules/event/application/facades/event-reward-lifecycle.facade.ts
    • trackInsightChallengeProgress 메서드 및 관련 로직이 제거됨
  • src/modules/event/application/facades/event-reward.facade.ts
    • getProgressCardtrackInsightChallengeProgress 메서드가 제거됨
  • src/modules/event/application/services/event-participation.service.ts
    • 새로운 EventParticipation 생성 시 progress, isCompleted, lastProgressedAt 초기화 로직이 제거됨
  • src/modules/event/application/services/event-reward-read.service.ts
    • getProgressCard 메서드 및 관련 보간 로직이 제거됨
  • src/modules/event/domain/entities/event-participation.entity.ts
    • progress, isCompleted, completedAt, lastProgressed_at, grantedBy, grantReason 컬럼이 제거됨
  • src/modules/event/domain/entities/event.entity.ts
    • GoalConfig 인터페이스, EventUiConfig에서 progressCard 속성, description, maxParticipation, goalConfig 컬럼이 제거됨
  • src/modules/event/domain/enums/event-reward-status.enum.ts
    • UNDER_REVIEWREJECTED enum 값이 제거됨
  • src/modules/event/presentation/event.controller.ts
    • progress-card 엔드포인트가 제거됨
  • src/modules/insight/application/facades/insight.facade.ts
    • EventRewardLifecycleFacade 의존성 및 trackInsightChallengeProgress 호출이 제거됨
  • src/modules/insight/insight.module.ts
    • EventModule 임포트가 제거됨
  • supabase/migrations/20260311000000_cleanup_unused_columns_and_tables.sql
    • 사용되지 않는 DB 테이블, 타입, 컬럼을 삭제하는 마이그레이션 스크립트가 추가됨
Activity
  • 총 21개의 파일이 변경되었으며, 58줄이 추가되고 479줄이 삭제되었습니다.
  • 로컬 환경에서 빌드가 성공적으로 완료되었습니다.
  • 로컬 환경에서 린트 검사가 통과되었습니다.
  • 삭제된 항목에 대한 코드 참조 전수 검사가 완료되었으며, 8개 항목 모두 참조가 없음을 확인했습니다.
  • 개발 및 프로덕션 DB 마이그레이션이 적용 완료되었습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이 PR은 사용되지 않는 데이터베이스 테이블, 컬럼 및 관련 코드를 정리하는 대규모 리팩토링을 수행하여 코드베이스를 깔끔하게 단순화했습니다. 하지만 이벤트 보상 청구 로직에서 중요한 보안 회귀가 확인되었습니다. isCompleted 플래그와 같은 자격 확인이 제거되어, 어떤 사용자든 필요한 기준을 충족하지 않고도 활성 이벤트에 대한 보상을 청구할 수 있습니다. 보상 시스템의 잠재적 남용을 방지하기 위해 병합 전에 이 문제를 해결해야 합니다. 또한, AdminEventRewardFacade의 메서드 이름이 변경된 기능과 일치하지 않아 명확성 개선이 필요하며, InsightFacade의 역할이 축소되어 아키텍처 단순화를 위해 제거를 고려할 수 있습니다.

Comment on lines +110 to 113
private async grantFeedbackRewardByUserId(
eventCode: string,
params: GrantRewardByUserIdParams
): Promise<{ userId: number; rewardStatus: EventRewardStatus; rewardGrantedAt: Date }> {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

❌ 문제: 이 메서드의 이름인 grantFeedbackRewardByUserId는 피드백 제출(EventFeedbackSubmission) 관련 기능이 제거된 현재 컨텍스트와 맞지 않아 혼란을 줄 수 있습니다.

✅ 제안: 메서드의 역할이 수동 이벤트 보상 지급으로 변경되었으므로, grantManualRewardByUserId와 같이 그 역할을 더 명확하게 나타내는 이름으로 변경하는 것을 고려해 보세요. 이 메서드를 호출하는 grantReward 메서드 내부에서도 함께 수정이 필요합니다.

Suggested change
private async grantFeedbackRewardByUserId(
eventCode: string,
params: GrantRewardByUserIdParams
): Promise<{ userId: number; rewardStatus: EventRewardStatus; rewardGrantedAt: Date }> {
private async grantManualRewardByUserId(
eventCode: string,
params: GrantRewardByUserIdParams
): Promise<{ userId: number; rewardStatus: EventRewardStatus; rewardGrantedAt: Date }> {
References
  1. 리뷰 포커스 우선순위 '중간'에 해당하는 '네이밍 컨벤션' 관련 사항입니다. 메서드의 이름이 실제 기능을 명확하게 반영하지 못하고 있어 수정이 필요합니다. (link)

Comment on lines 1 to 12
import { Injectable } from '@nestjs/common';
import { CreateInsightLogReqDTO, InsightLogResDTO } from '../dtos/insight-log.dto';
import { InsightService } from '../services/insight.service';
import { EventRewardLifecycleFacade } from 'src/modules/event/application/facades/event-reward-lifecycle.facade';
import { Transactional } from 'typeorm-transactional';

@Injectable()
export class InsightFacade {
constructor(
private readonly insightService: InsightService,
private readonly eventRewardLifecycleFacade: EventRewardLifecycleFacade
) {}
constructor(private readonly insightService: InsightService) {}

@Transactional()
async createInsight(userId: number, body: CreateInsightLogReqDTO): Promise<InsightLogResDTO> {
const insight = await this.insightService.createInsight(userId, body);
await this.eventRewardLifecycleFacade.trackInsightChallengeProgress(userId);
return insight;
return this.insightService.createInsight(userId, body);
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

❌ 문제: EventRewardLifecycleFacade 의존성 제거 후 InsightFacadeInsightService를 그대로 호출만 하는 불필요한 레이어로 남게 되었습니다.

✅ 제안: InsightFacade를 제거하고 InsightControllerInsightService를 직접 사용하도록 리팩토링하는 것을 고려해 보세요. 아키텍처 가이드라인(93라인)에 따르면 Controller가 Service를 직접 의존하는 것이 허용됩니다. 이를 통해 불필요한 추상화 계층을 제거하고 코드를 단순화할 수 있습니다.

References
  1. 아키텍처 규칙에 따라 Facade는 여러 도메인 서비스를 조율하는 역할을 하지만, 현재 InsightFacade는 단순 호출 전달 역할만 하고 있어 불필요한 계층이 되었습니다. 아키텍처를 단순화하고 가독성을 높이기 위해 제거하는 것이 좋습니다. (link)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Refactor] Admin/Event/Ticket 미사용 컬럼·테이블 정리

1 participant