Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 태그 생성 API (수정도 일괄 생성) (#132) #134

Closed
wants to merge 2 commits into from

Conversation

jjiinaaa
Copy link
Contributor

@jjiinaaa jjiinaaa commented Feb 1, 2025

Sweepic Server PR List

⚒️develop의 최신 커밋을 pull 받았나요?

  • 최신 커밋 업데이트

🔍️ 이 PR을 통해 해결하려는 문제가 무엇인가요?

어떤 기능을 구현한건지, 이슈 대응이라면 어떤 이슈인지 PR이 열리게 된 계기와 목적을 Reviewer 들이 쉽게 이해할 수 있도록 적어 주세요
일감 백로그 링크나 다이어그램, 피그마를 첨부해도 좋아요

  • 태그 생성 API 구현 (수정도 일괄 생성으로 구현)
  • 1차 배포 시에, 타입 스크립트에 본연의 목적에 위배되는 문법이 몇 개 보였는데, lint 시에 잡지를 못하여 따로 설정하여 적용

✨ 이 PR에서 핵심적으로 변경된 사항은 무엇일까요? (핵심 작업 내용)

문제를 해결하면서 주요하게 변경된 사항들을 적어 주세요

  • tag 레포지토리에 대부분 설정해두었습니다. 워낙 많은 경우의 수가 있어서 여러 함수를 컴포넌트화해서 사용했습니다.
  • 각 컴포넌트화 된 함수들이 어떤 역할을 하는지 봐주시기 바랍니다. 제가 경우의 수와 제가 설정한 프로세스는 아래에 적어두겠습니다.

공통

  • 태그들을 각 카테고리 별로 항상 4개 씩 request body에 받음. 빈 값이어도 동일하게
  • imageIdmediaId로 이미지 테이블에서 찾는 접근

태그가 비어있을 때

  • 이전에 해당 카테고리에 있던 이미지-태그에 해당 데이터를 비활성화

태그가 있을 때,

공통

  • 태그 테이블에 태그가 있는지 확인을 함.
  • 이전에 해당 카테고리의 이미지-태그 테이블의 태그가 위치한 데이터는 비활성화

태그가 태그 테이블에 동일한 것이 없을 시,

  • 태그 테이블에서 해당 태그를 생성
  • 이미지-태그 테이블에서 해당 매핑한 데이터 생성

태그가 태그 테이블에 동일한 것이 있을 시.

  • 공통에서 구한 tagData 정보를 가지고, 이미지-태그 테이블에 데이터 존재 여부 확인
  • 데이터가 있으면, 비활성화 -> 활성화
  • 데이터가 없으면, 이미지-태그 테이블에 데이터 생성

🤚 동작 확인

기능을 실행했을 때 정상 동작하는지 여부를 확인하고 스크린 샷을 올려주세요

  • 카테고리 별로 모든 태그를 넣었을 시,
// request Body
{
    "mediaId" : 10000002,
    "tags" : [
        {
            "content": "김상덕의 호박죽",
            "tag_category_id": 1
        }, 
        {
            "content": "박진하의 소머리국밥",
            "tag_category_id": 2
        },
        {
            "content": "박진하의 소머리국밥",
            "tag_category_id": 3
        },
        {
            "content": "박진하의 해수욕장",
            "tag_category_id": 4
        }
    ]    
}

image

  • 태그가 빈 값이 입력될 때,
{
    "mediaId" : 10000002,
    "tags" : [
        {
            "content": "",
            "tag_category_id": 1
        }, 
        {
            "content": "",
            "tag_category_id": 2
        },
        {
            "content": "박진하의 소머리국밥",
            "tag_category_id": 3
        },
        {
            "content": "박진하의 해수욕장",
            "tag_category_id": 4
        }
    ]    
}

image

  • 비활성화된 태그를 다시 입력할 때, (태그 id에 집중)
{
    "mediaId" : 10000002,
    "tags" : [
        {
            "content": "",
            "tag_category_id": 1
        }, 
        {
            "content": "박진하의 소머리국밥",
            "tag_category_id": 2
        },
        {
            "content": "박진하의 소머리국밥",
            "tag_category_id": 3
        },
        {
            "content": "박진하의 해수욕장",
            "tag_category_id": 4
        }
    ]    
}

image

  • 새로운 태그 생성 시
{
    "mediaId" : 10000002,
    "tags" : [
        {
            "content": "조나은의 설악산",
            "tag_category_id": 1
        }, 
        {
            "content": "",
            "tag_category_id": 2
        },
        {
            "content": "",
            "tag_category_id": 3
        },
        {
            "content": "",
            "tag_category_id": 4
        }
    ]    
}

image

🔖 핵심 변경 사항 외에 추가적으로 변경된 부분이 있나요?

없으면 "없음" 이라고 기재해 주세요

  • lint 규칙을 gts 규칙과 더불어, 타입스크립트에서 중시하는 것들을 포함하여 넣었습니다.
  • 총 약 25개 정도 경고나 에러가 나는데, 각 파일 별로 확인해보시면서 해결해주시기 바랍니다 ~
// eslint.config.js
rules: {
      semi: ['error', 'always'],
      quotes: ['error', 'single'],
      '@typescript-eslint/no-namespace': 'off', // namespace 허용
      '@typescript-eslint/no-explicit-any': 'warn', // 명시적 any 사용 경고
      'no-unused-vars': 'error', // 사용하지 않는 변수는 에러
      'no-console': 'warn', // console 사용 경고
      'prefer-const': 'warn', // let 대신 const 사용 권장
      'prefer-template': 'warn', // 문자열 연결 대신 템플릿 리터럴 사용 권장
      'no-shadow': 'warn', // 외부 변수와 중복 변수 선언 경고
      eqeqeq: ['error', 'always'], // == 대신 === 사용 권장
      'no-duplicate-imports': 'error', // 중복 import 경고
      'no-var': 'error', // var 사용 금지
      'no-undef': 'error', // 선언되지 않은 변수 사용 금지
      'no-const-assign': 'error', // const 재할당 금지
    },

🙏 Reviewer 분들이 이런 부분을 신경써서 봐 주시면 좋겠어요

개발 과정에서 다른 분들의 의견은 어떠한지 궁금했거나 크로스 체크가 필요하다고 느껴진 코드가 있다면 남겨주세요

API 관련

  • 매우 상황이 많습니다. 제가 세부사항에 적어둔, 세부 케이스 별로 해당 API가 진행되는데, 예외 사항이 또 있을지 생각해주시기 바랍니다.
  • 연산 속도가 많이 느립니다. hard delete를 하지 않기 위해 status 변화로 'soft delete' 방법으로 하다보니 prisma에 많이 접근되어서 연산 속도가 조금 느려집니다. 다른 방법이 있을지 고민 부탁드립니다.
  • 현재 생각되는 사안으로는 수정하든, 생성하든 매번 처음에 중복되지 않는다면 delete를 하여 재생성하는 'hard delete'를 하는 방법이 있습니다.

Lint 관련

  • eslint 변경 사항 및 제가 각 파트별로 일괄적으로 변경한 사항들이 많습니다. 혹시, 자신의 코드가 이상이 있을 거 같다면 말씀해주시기 바랍니다.

기타

  • 휴지통 기능이 일부 구현되었는데, 수정이 필요합니다. trust가 포함된 파일은 제외하시고 봐주시면 감사하겠습니다.

🩺 이 PR에서 테스트 혹은 검증이 필요한 부분이 있을까요?

테스트가 필요한 항목이나 테스트 코드가 추가되었다면 함께 적어주세요

  • lint 설정을 다시 했습니다. 그리고 너무 많은 경고와 에러가 떠서, 제가 간단한 것은 고쳤습니다. 그러나, 제 파트가 아니라서 실수할 수 있을 거 같아서 각자 한 번 보시고 머지하신 후에 테스트 해보시기 바랍니다.

📌 PR 진행 시 이러한 점들을 참고해 주세요

  • Reviewer 분들은 코드 리뷰 시 좋은 코드의 방향을 제시하되, 코드 수정을 강제하지 말아 주세요.
  • Reviewer 분들은 좋은 코드를 발견한 경우, 칭찬과 격려를 아끼지 말아 주세요.
  • Review는 특수한 케이스가 아니면 Reviewer로 지정된 시점 기준으로 2일 이내에 진행해 주세요.
  • Comment 작성 시 Prefix로 P1, P2, P3 를 적어 주시면 Assignee가 보다 명확하게 Comment에 대해 대응할 수 있어요
    • P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
    • P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
    • P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)


📝 Assignee를 위한 CheckList

  • To-Do Item

* [SWEP-28] GTS(Google Typescript Style) 연결결

* [SWEP-26] 리드미 파일 추가

* [SWEP-28] GTS 번역본 등록

* [SWEP-28] lint 실행 에러 해결결

* [SWEP-28] lint 에러 재해결

* [SWEP-28] yarn.cmd 수정정

* [SWEP-28] lint, fix 시 parser 에러 해결

* [SWEP-28] 컴파일 결과물 파일 미생성

* [SWEP-35] Swagger 도메인 연결 (/api-docs)

* [SWEP-35] Swagger 연결 에러 해결결

* fix: 불필요 라이브러리 해제

* [SWEP-35] Swagger host 변경

* [SWEP-35] build 에러 (swagger 미복사 문제)

* [SWEP-35] 워크플로 브랜치 변경 (test 시 develop으로 변경을 원위치)

* ai gitignore 설정

* datagrip gitignore 설정

* datagrip 설정정

* [SWEP-53] 라우터 설정

* [SWEP-53] 태그 생성 api 구현

* [SWEP-53] 태그 카테고리 불일치 시 에러

* [SWEP-53] 태그 수정 api 구현

* [SWEP-53] 스웨거 설정

* feature: 태그 생성 및 수정 api (#72)

* [SWEP-28] GTS(Google Typescript Style) 연결결

* [SWEP-26] 리드미 파일 추가

* [SWEP-28] GTS 번역본 등록

* [SWEP-28] lint 실행 에러 해결결

* [SWEP-28] lint 에러 재해결

* [SWEP-28] yarn.cmd 수정정

* [SWEP-28] lint, fix 시 parser 에러 해결

* [SWEP-28] 컴파일 결과물 파일 미생성

* [SWEP-35] Swagger 도메인 연결 (/api-docs)

* [SWEP-35] Swagger 연결 에러 해결결

* fix: 불필요 라이브러리 해제

* [SWEP-35] Swagger host 변경

* [SWEP-35] build 에러 (swagger 미복사 문제)

* [SWEP-35] 워크플로 브랜치 변경 (test 시 develop으로 변경을 원위치)

* ai gitignore 설정

* datagrip gitignore 설정

* datagrip 설정정

* [SWEP-53] 라우터 설정

* [SWEP-53] 태그 생성 api 구현

* [SWEP-53] 태그 카테고리 불일치 시 에러

* [SWEP-53] 태그 수정 api 구현

* [SWEP-53] 스웨거 설정

* [SWEP-58] 휴지통에 포함 시 이미지 상태 변경

* [SWEP-58] 휴지통 비우기 (이미지 데이터 삭제) API 구현

* [SWEP-58] 비활성화 이미지만 삭제

* [SWEP-58] 패키지 변경

* [SWEP-58] 휴지통 스웨거 주석 처리

* [SWEP-53] 태그 설정 api 구현

* [SWEP-53] 인증 미들웨어 및 로그인 주석 해제

* [SWEP-53] 태그 생성 시, 이미지-태그 테이블에 데이터 확인 api - 불필요 제거

* [SWEP-53] 에러 적용
@jjiinaaa jjiinaaa linked an issue Feb 1, 2025 that may be closed by this pull request
11 tasks
* [SWEP-28] GTS(Google Typescript Style) 연결결

* [SWEP-26] 리드미 파일 추가

* [SWEP-28] GTS 번역본 등록

* [SWEP-28] lint 실행 에러 해결결

* [SWEP-28] lint 에러 재해결

* [SWEP-28] yarn.cmd 수정정

* [SWEP-28] lint, fix 시 parser 에러 해결

* [SWEP-28] 컴파일 결과물 파일 미생성

* [SWEP-35] Swagger 도메인 연결 (/api-docs)

* [SWEP-35] Swagger 연결 에러 해결결

* fix: 불필요 라이브러리 해제

* [SWEP-35] Swagger host 변경

* [SWEP-35] build 에러 (swagger 미복사 문제)

* [SWEP-35] 워크플로 브랜치 변경 (test 시 develop으로 변경을 원위치)

* ai gitignore 설정

* datagrip gitignore 설정

* datagrip 설정정

* [SWEP-53] 라우터 설정

* [SWEP-53] 태그 생성 api 구현

* [SWEP-53] 태그 카테고리 불일치 시 에러

* [SWEP-53] 태그 수정 api 구현

* [SWEP-53] 스웨거 설정

* feature: 태그 생성 및 수정 api (#72)

* [SWEP-28] GTS(Google Typescript Style) 연결결

* [SWEP-26] 리드미 파일 추가

* [SWEP-28] GTS 번역본 등록

* [SWEP-28] lint 실행 에러 해결결

* [SWEP-28] lint 에러 재해결

* [SWEP-28] yarn.cmd 수정정

* [SWEP-28] lint, fix 시 parser 에러 해결

* [SWEP-28] 컴파일 결과물 파일 미생성

* [SWEP-35] Swagger 도메인 연결 (/api-docs)

* [SWEP-35] Swagger 연결 에러 해결결

* fix: 불필요 라이브러리 해제

* [SWEP-35] Swagger host 변경

* [SWEP-35] build 에러 (swagger 미복사 문제)

* [SWEP-35] 워크플로 브랜치 변경 (test 시 develop으로 변경을 원위치)

* ai gitignore 설정

* datagrip gitignore 설정

* datagrip 설정정

* [SWEP-53] 라우터 설정

* [SWEP-53] 태그 생성 api 구현

* [SWEP-53] 태그 카테고리 불일치 시 에러

* [SWEP-53] 태그 수정 api 구현

* [SWEP-53] 스웨거 설정

* [SWEP-58] 휴지통에 포함 시 이미지 상태 변경

* [SWEP-58] 휴지통 비우기 (이미지 데이터 삭제) API 구현

* [SWEP-58] 비활성화 이미지만 삭제

* [SWEP-58] 패키지 변경

* [SWEP-58] 휴지통 스웨거 주석 처리

* [SWEP-53] 태그 설정 api 구현

* [SWEP-53] 인증 미들웨어 및 로그인 주석 해제

* [SWEP-53] 태그 생성 시, 이미지-태그 테이블에 데이터 확인 api - 불필요 제거

* [SWEP-53] 에러 적용

* [SWEP-53] lint 설정 강화 및 lint 수정

* [SWEP-53] 로그인 시 블록 스코프에서 동일 변수 이름 금지 해결
@jjiinaaa jjiinaaa closed this Feb 1, 2025
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.

[SWEP-53] 태그 설정 API
1 participant