NAJUHA V2 ERD

Generated by typeorm-markdown-generator

Table of Contents

User

erDiagram
  policy {
    uuid id PK
    integer version
    varchar type
    boolean isMandatory
    varchar title
    text content
    timestamptz createdAt
  }
  policy_consent {
    uuid id PK
    timestamptz createdAt
    uuid userId FK
    uuid policyId FK
  }
  user_profile_image {
    uuid id PK
    uuid userId FK
    uuid imageId FK
    timestamptz createdAt
    timestamptz deletedAt "nullable"
  }
  user {
    uuid id PK
    varchar role
    varchar snsAuthProvider
    varchar snsId
    varchar email
    varchar name
    varchar phoneNumber
    varchar nickname
    varchar gender
    varchar birth
    varchar belt
    varchar status
    timestamptz createdAt
    timestamptz updatedAt
  }
  image {
    uuid id PK
    varchar path
    varchar format
    timestamptz createdAt
    timestamptz linkedAt "nullable"
    uuid userId FK
  }
  policy_consent }o--|| user: user
  policy_consent }o--|| policy: policy
  user_profile_image }o--|| user: user
  user_profile_image }o--|| image: image
  image }o--|| user: user

policy

Policy.

  • ๊ฐ™์€ ํƒ€์ž…์˜ ์•ฝ๊ด€์ˆ˜์ •์ด ํ•„์š”ํ• ๋•Œ๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ์•„๋‹Œ ์ƒˆ๋กœ์šด ์•ฝ๊ด€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ์•ฝ๊ด€์ด ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ๋ฒ„์ „์„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
    @namespace User

Properties

  • id: UUID v7.
  • version: ์•ฝ๊ด€์˜ ๋ฒ„์ „.
  • type

    ์•ฝ๊ด€์˜ ์ข…๋ฅ˜.

    • TERMS_OF_SERVICE: ์„œ๋น„์Šค ์ด์šฉ ์•ฝ๊ด€.
    • PRIVACY: ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ ๋ฐฉ์นจ.
    • REFUND: ํ™˜๋ถˆ ์ •์ฑ….
    • ADVERTISEMENT: ๊ด‘๊ณ ์ •์ฑ….
  • isMandatory

    ์•ฝ๊ด€๋™์˜ ํ•„์ˆ˜์—ฌ์ˆ˜.

    • true: ํ•„์ˆ˜.
    • false: ์„ ํƒ.
  • title

    ์•ฝ๊ด€์˜ ์ œ๋ชฉ.

    • ex) ์„œ๋น„์Šค ์ด์šฉ ์•ฝ๊ด€, ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ ๋ฐฉ์นจ, ํ™˜๋ถˆ ์ •์ฑ….
  • content

    ์•ฝ๊ด€์˜ ๋‚ด์šฉ.

    • ex) ์„œ๋น„์Šค ์ด์šฉ ์•ฝ๊ด€, ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ ๋ฐฉ์นจ, ํ™˜๋ถˆ ์ •์ฑ….
  • createdAt

PolicyConsent

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋™์˜ํ•œ ์•ฝ๊ด€ ์ •๋ณด.
    @namespace User

Properties

  • id: UUID v7.
  • createdAt: ์•ฝ๊ด€ ๋™์˜ ๋‚ ์งœ.
  • userId
  • policyId: - policyId.

user_profile_image

UserProfileImage.

์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ •๋ณด.

  • ImageEntity ์™€ UserEntity ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ.
  • ์‹ค์ œ ์ด๋ฏธ์ง€ ์ •๋ณด๋Š” ImageEntity ์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

@namespace User
@erd Image

Properties

  • id: UUID v7.
  • userId: userId
  • imageId

    imageId

    • u-9-1 createImage ๋กœ ์ƒ์„ฑ๋œ image์˜ id
  • createdAt
  • deletedAt

user

User.

์‚ฌ์šฉ์ž ์ •๋ณด.
@namespace User

Properties

  • id: UUID v7.
  • role

    User ์—ญํ• . User์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    • ADMIN: ๊ด€๋ฆฌ์ž ๊ถŒํ•œ.
    • HOST: ๋Œ€ํšŒ ์ฃผ์ตœ์ž ๊ถŒํ•œ.
    • USER: ์ผ๋ฐ˜ User ๊ถŒํ•œ.
    • TEMPORARY_USER: ํšŒ์›๊ฐ€์ž…์„ ์™„๋ฃŒํ•˜์ง€ ์•Š์€ User ๊ถŒํ•œ.
  • snsAuthProvider

    SNS ๊ณต๊ธ‰์ž. User๊ฐ€ ๋กœ๊ทธ์ธํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ SNS ํ”Œ๋žซํผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    • KAKAO: ์นด์นด์˜ค.
    • NAVER: ๋„ค์ด๋ฒ„.
    • GOOGLE: ๊ตฌ๊ธ€.
    • APPLE: ์• ํ”Œ.
  • snsId: SNS ID. ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
  • email: User ์ด๋ฉ”์ผ ์ฃผ์†Œ.
  • name

    User ์ด๋ฆ„.

    • ์ปฌ๋Ÿผ๊ธธ์ด๋Š” 256์œผ๋กœ ์„ค์ •ํ•˜์˜€์œผ๋‚˜, ์ž…๋ ฅ๊ฐ’ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ๋Š” 64์ž ์ด๋‚ด๋กœ ์„ค์ •ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • User ์ด๋ฆ„์€ ํ•œ๊ธ€, ์˜๋ฌธ, ์ˆซ์ž๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • phoneNumber

    User ์ „ํ™”๋ฒˆํ˜ธ.

    • ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉด ์ธ์ฆ๋œ ์ „ํ™”๋ฒˆํ˜ธ ์ž…๋‹ˆ๋‹ค.
    • ex) 01012345678.
  • nickname

    User ๋ณ„๋ช….

    • ์˜๋ฌธ, ํ•œ๊ธ€, ์ˆซ์ž๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • gender: User ์„ฑ๋ณ„.
  • birth: User ์ƒ๋…„์›”์ผ (BirtDate YYYYMMDD).
  • belt: User ์ฃผ์ง“์ˆ˜ ๋ฒจํŠธ.
  • status

    User ์ƒํƒœ.

    • ACTIVE: ํ™œ์„ฑ.
    • INACTIVE: ๋น„ํ™œ์„ฑ.
  • createdAt
  • updatedAt

Application

erDiagram
  player_snapshot {
    uuid id PK
    varchar name
    varchar gender
    varchar birth
    varchar phoneNumber
    varchar belt
    varchar network
    varchar team
    varchar masterName
    timestamptz createdAt
    uuid applicationId FK
  }
  application_order {
    uuid id PK
    timestamptz createdAt
    varchar orderId
    varchar paymentKey "nullable"
    varchar orderName
    varchar customerName
    varchar customerEmail
    varchar status
    boolean isPayed
    uuid applicationId FK
    uuid earlybirdDiscountSnapshotId FK "nullable"
    uuid combinationDiscountSnapshotId FK "nullable"
  }
  application_order_payment_snapshot {
    uuid id PK
    timestamptz createdAt
    integer normalAmount
    integer earlybirdDiscountAmount
    integer combinationDiscountAmount
    integer totalAmount
    uuid applicationOrderId FK
  }
  participation_division_info_snapshot {
    uuid id PK
    timestamptz createdAt
    uuid participationDivisionInfoId FK
    uuid divisionId FK
  }
  participation_division_info {
    uuid id PK
    timestamptz createdAt
    varchar status
    uuid applicationId FK
  }
  participation_division_info_payment {
    uuid id PK
    timestamptz createdAt
    varchar status
    uuid applicationOrderPaymentSnapshotId FK
    uuid participationDivisionInfoId FK
    uuid divisionId FK
    uuid priceSnapshotId FK
  }
  price_snapshot {
    uuid id PK
    integer price
    timestamptz createdAt
    uuid divisionId FK
  }
  division {
    uuid id PK
    varchar category
    varchar uniform
    varchar gender
    varchar belt
    varchar weight
    varchar birthYearRangeStart
    varchar birthYearRangeEnd
    varchar status
    timestamptz createdAt
    timestamptz updatedAt
    uuid competitionId FK
  }
  additional_info {
    uuid id PK
    timestamptz createdAt
    timestamptz updatedAt
    varchar type
    varchar value
    uuid applicationId FK
  }
  application {
    uuid id PK
    timestamptz createdAt
    timestamptz updatedAt
    timestamptz deletedAt "nullable"
    varchar type
    varchar status
    uuid competitionId FK
    uuid userId FK
  }
  player_snapshot }|--|| application: application
  application_order }o--|| application: application
  application_order_payment_snapshot }o--|| application_order: applicationOrder
  participation_division_info_snapshot }|--|| participation_division_info: participationDivisionInfo
  participation_division_info_snapshot }o--|| division: division
  participation_division_info }|--|| application: application
  participation_division_info_payment }o--|| application_order_payment_snapshot: applicationOrderPaymentSnapshot
  participation_division_info_payment }o--|| participation_division_info: participationDivisionInfo
  participation_division_info_payment }o--|| division: division
  participation_division_info_payment }o--|| price_snapshot: priceSnapshot
  price_snapshot }|--|| division: division
  additional_info }o--|| application: application

Indexes

TableIndex NameColumnsUniqueSpatialWhere
player_snapshotIDX_PlayerSnapshot_applicationIdapplicationIdfalsefalse
application_orderIDX_ApplicationOrder_applicationIdapplicationIdfalsefalse
application_order_payment_snapshotIDX_ApplicationOrderPaymentSnapshot_applicationOrderIdapplicationOrderIdfalsefalse
participation_division_info_snapshotIDX_ParticipationDivisionInfoSnapshot_participationDivisionInfoIdparticipationDivisionInfoIdfalsefalse
participation_division_infoIDX_ParticipationDivisionInfo_applicationIdapplicationIdfalsefalse
participation_division_info_paymentIDX_ParticipationDivisionInfoPayment_applicationOrderPaymentSnapshotIdapplicationOrderPaymentSnapshotIdfalsefalse
price_snapshotIDX_PriceSnapshot_divisionIddivisionIdfalsefalse
divisionIDX_Division_competitionIdcompetitionIdfalsefalse
additional_infoIDX_AddtionalInfo_applicationIdapplicationIdfalsefalse
applicationIDX_Application_userId_createdAtuserId, createdAtfalsefalse

player_snapshot

PlayerSnapshot.

์ฃผ์ง“์ˆ˜ ๋Œ€ํšŒ ์ฐธ๊ฐ€์ž์˜ ์ •๋ณด ์Šค๋ƒ…์ƒท.

  • ๋Œ€ํšŒ ์ฐธ๊ฐ€์ž์˜ ์ •๋ณด๋ฅผ ์Šค๋ƒ…์ƒทํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€ํšŒ ์ฐธ๊ฐ€์ž์˜ ์ •๋ณด๋Š” ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. (๋ณ€๊ฒฝ ์ด๋ ฅ ์ถ”์ )
    @namespace Application

Properties

  • id: UUID v7.
  • name: ์„ ์ˆ˜ ์ด๋ฆ„. (ํ•œ๊ธ€, ์˜๋ฌธ, ์ˆซ์ž, ๊ณต๋ฐฑ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค).
  • gender: ์„ ์ˆ˜ ์„ฑ๋ณ„.
  • birth: ์„ ์ˆ˜ ์ƒ๋…„์›”์ผ (BirtDate YYYYMMDD).
  • phoneNumber: ์„ ์ˆ˜ ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ. ex) 01012345678.
  • belt: ์„ ์ˆ˜ ์ฃผ์ง“์ˆ˜ ๋ฒจํŠธ.
  • network: ์ฃผ์ง“์ˆ˜ ๋„คํŠธ์›Œํฌ. (ํ•œ๊ธ€, ์˜๋ฌธ, ์ˆซ์ž, ๊ณต๋ฐฑ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค).
  • team: ์†Œ์† ํŒ€. (ํ•œ๊ธ€, ์˜๋ฌธ, ์ˆซ์ž, ๊ณต๋ฐฑ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค).
  • masterName: ๊ด€์žฅ๋‹˜ ์„ฑํ•จ.
  • createdAt
  • applicationId

application_order

ApplicationOrder.

์ฐธ๊ฐ€์‹ ์ฒญ ์ฃผ๋ฌธ ์ •๋ณด.

  • ์ฐธ๊ฐ€์‹ ์ฒญ์— ๋Œ€ํ•œ ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ฐธ๊ฐ€์‹ ์ฒญ์— ๋Œ€ํ•ด ๊ฒฐ์ œ ์‹คํŒจ ๋“ฑ์˜ ์ด์œ ๋กœ ์—ฌ๋ ค๊ฐœ์˜ ์ฃผ๋ฌธ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    @namespace Application

Properties

  • id: UUID v7.
  • createdAt
  • orderId
    • ์ฃผ๋ฌธ๋ฒˆํ˜ธ(์ด 63์ž)
    • ${applicationOrder.id}_${competition.competitionPaymentId} ํ˜•ํƒœ๋กœ ์ƒ์„ฑ.
    • 36์ž์˜ applicationOrder.id(uuidv7)์™€ 26์ž์˜ competition.competitionPaymentId(ULID)๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ƒ์„ฑ.
    • ex) 123e4567-e89b-12d3-a456-426614174000_01ARYZ6S41MK3W7DMT3RZR9K9Z

    Q. ์™œ applicationOrder.id์™€ competition.competitionPaymentId๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๋‚˜์š”? A. ์ •์‚ฐ๊ณผ์ •์—์„œ ๋™์ผํ•œ ๋Œ€ํšŒ์˜ ์ฃผ๋ฌธ ๋ฒˆํ˜ธ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

  • paymentKey

    tosspayments์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ๊ฒฐ์ œํ‚ค.

    • ๊ฒฐ์ œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋ฐœ๊ธ‰๋ฐ›์€ ๊ฒฐ์ œํ‚ค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฒฐ์ œ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ null.
    • ๊ณ ์œ ํ•œ ๊ฒฐ์ œ์ •๋ณด๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค์ž…๋‹ˆ๋‹ค.
  • orderName

    ์ฃผ๋ฌธ๋ช…(์ด 100์ž)

    • ์‹ ์ฒญํ•œ ๋Œ€ํšŒ์˜ title์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • customerName: ์ฃผ๋ฌธ์ž ์ด๋ฆ„(์ด 64์ž)
  • customerEmail: ์ฃผ๋ฌธ์ž ์ด๋ฉ”์ผ(์ด 320์ž)
  • status

    ์ฃผ๋ฌธ ์ƒํƒœ.

    • READY: ๊ฒฐ์ œ ๋Œ€๊ธฐ์ค‘
    • DONE: ๊ฒฐ์ œ ์™„๋ฃŒ
    • FAIL: ๊ฒฐ์ œ ์‹คํŒจ
    • PARTIAL_CANCELED: ๋ถ€๋ถ„ ์ทจ์†Œ
    • CANCELED: ์ „์ฒด ์ทจ์†Œ
  • isPayed: ๊ฒฐ์ œ ์—ฌ๋ถ€.
  • applicationId
  • earlybirdDiscountSnapshotId
  • combinationDiscountSnapshotId

application_order_payment_snapshot

ApplicationOrderPaymentSnapshot.

์ฐธ๊ฐ€์‹ ์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ์ œ ์ •๋ณด.
@namespace Application

Properties

  • id: UUID v7.
  • createdAt: createdAt.
  • normalAmount: ํ• ์ธ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์ด ๊ธˆ์•ก (์›).
  • earlybirdDiscountAmount: ์–ผ๋ฆฌ๋ฒ„๋“œ ํ• ์ธ ๊ทœ์น™์—์˜ํ•ด ํ• ์ธ๋œ ๊ธˆ์•ก. (์›).
  • combinationDiscountAmount: ์กฐํ•ฉํ• ์ธ ๊ทœ์น™์—์˜ํ•ด ํ• ์ธ๋œ ๊ธˆ์•ก. (์›).
  • totalAmount

    ํ• ์ธ์ด ์ ์šฉ๋œ ์ตœ์ข…๊ธˆ์•ก. (์›).

    • ๊ณ„์‚ฐ ๋ฐฉ๋ฒ• : normalAmount - earlybirdDiscountAmount - combinationDiscountAmount.
  • applicationOrderId: - application id.

participation_division_info_snapshot

ParticipationDivisionInfoSnapshot.

์ฐธ๊ฐ€์‹ ์ฒญ์— ๋Œ€ํ•œ ๋ถ€๋ฌธ ์ •๋ณด.

  • ์ฐธ๊ฐ€์‹ ์ฒญ์— ๋Œ€ํ•œ ๋ถ€๋ฌธ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ฒฐ์ œ ์ดํ›„์—๋งŒ ์Šค๋ƒ…์ƒท์ด ์ €์žฅ๋˜๊ณ , ๊ฒฐ์ œ ์ด์ „์— ์ฐธ๊ฐ€ ๋ถ€๋ฌธ ์ˆ˜์ •์‹œ, Application์ž์ฒด๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
  • ํ•ด๋‹น entity ๋ฅผ ํฌํ•จํ•˜๋Š” Application์ด DONE ์ƒํƒœ๋ผ๋ฉด, ์ตœ์ดˆ์˜ ์Šค๋ƒ…์ƒท์ด ๊ฒฐ์ œ์ •๋ณด๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์Šค๋ƒ…์ƒท์ด ํ˜„์ œ์˜ ์ฐธ๊ฐ€ ๋ถ€๋ฌธ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    @namespace Application

Properties

  • id: UUID v7.
  • createdAt
  • participationDivisionInfoId
  • divisionId: ์œ ์ €๊ฐ€ ์ฐธ๊ฐ€ํ•  ๋ถ€๋ฌธ ID.

participation_division_info

ParticipationDivisionInfo.

์ฐธ๊ฐ€์‹ ์ฒญ์— ๋Œ€ํ•œ ๋ถ€๋ฌธ ์ •๋ณด ์‹๋ณ„ํ•˜๋Š” Entity.

  • ์ฐธ๊ฐ€์‹ ์ฒญ์— ๋Œ€ํ•œ ๋ถ€๋ฌธ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ํ•˜์œ„ entity์ธ ParticipationDivisionInfoSnapshot์„ ์ƒ์„ฑํ•œ๋‹ค.
    @namespace Application

Properties

  • id: UUID v7.
  • createdAt
  • status

    ์ฐธ๊ฐ€๋ถ€๋ฌธ ์ •๋ณด ์ƒํƒœ.

    • READY: ๊ฒฐ์ œ ๋Œ€๊ธฐ์ค‘
    • DONE: ๊ฒฐ์ œ ์™„๋ฃŒ
    • CANCELED: ๊ฒฐ์ œ ์ทจ์†Œ
  • applicationId

participation_division_info_payment

ParticipationDivisionInfoPayment.

ParticipationDivisionInfo ์— ๋Œ€ํ•œ ๊ฒฐ์ œ ์ •๋ณด.
@namespace Application

Properties

  • id: UUID v7.
  • createdAt
  • status

    ๊ฒฐ์ œ ์ƒํƒœ.

    • READY: ๊ฒฐ์ œ ๋Œ€๊ธฐ์ค‘
    • DONE: ๊ฒฐ์ œ ์™„๋ฃŒ
    • CANCELED: ๊ฒฐ์ œ ์ทจ์†Œ
  • applicationOrderPaymentSnapshotId
  • participationDivisionInfoId
  • divisionId
  • priceSnapshotId

additional_info

AdditionalInfo.

๋Œ€ํšŒ์‚ฌ๊ฐ€ ์ฐธ๊ฐ€์ž์—๊ฒŒ ์š”๊ตฌํ•˜๋Š” ์ถ”๊ฐ€ ์ •๋ณด. ex) ์ฃผ์†Œ, ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ ๋“ฑ
๋Œ€ํšŒ์‚ฌ๊ฐ€ ์š”์ฒญํ•˜์ง€ ์•Š์€๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
@namespace Application

Properties

  • id: UUID v7.
  • createdAt: createdAt.
  • updatedAt: updatedAt
  • type

    type.

    • SOCIAL_SECURITY_NUMBER: ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ
    • ADDRESS: ์ฃผ์†Œ
  • value

    value. ๊ฐ type์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’.

    • SOCIAL_SECURITY_NUMBER: โ€˜123456-1234567โ€™
    • ADDRESS: โ€˜์„œ์šธ์‹œ ๊ฐ•๋‚จ๊ตฌ ํ…Œํ—ค๋ž€๋กœ 123โ€™
  • applicationId: Application id.

application

Application.

๋Œ€ํšŒ ์ฐธ๊ฐ€ ์‹ ์ฒญ ์ •๋ณด.
@namespace Application

Properties

  • id: UUID v7.
  • createdAt
  • updatedAt
  • deletedAt
  • type

    ๋ณธ์ธ์‹ ์ฒญ๊ณผ ๋Œ€๋ฆฌ์‹ ์ฒญ์„ ๊ตฌ๋ณ„ํ•˜๋Š” type.

    • SELF: ๋ณธ์ธ ์‹ ์ฒญ
    • PROXY: ๋Œ€๋ฆฌ ์‹ ์ฒญ
  • status

    ๋Œ€ํšŒ ์‹ ์ฒญ ์ƒํƒœ.

    • READY: ๊ฒฐ์ œ ๋Œ€๊ธฐ์ค‘
    • DONE: ๊ฒฐ์ œ ์™„๋ฃŒ
    • PARTIAL_CANCELED: ๋ถ€๋ถ„ ์ทจ์†Œ
    • CANCELED: ์ „์ฒด ์ทจ์†Œ
  • competitionId: ์ฐธ๊ฐ€ ๋Œ€ํšŒ id
  • userId: ์‹ ์ฒญ์ž ๊ณ„์ •์˜ userId

Competition

erDiagram
  earlybird_discount_snapshot {
    uuid id PK
    timestamptz earlybirdStartDate
    timestamptz earlybirdEndDate
    integer discountAmount
    timestamptz createdAt
    uuid competitionId FK
  }
  combination_discount_snapshot {
    uuid id PK
    jsonb combinationDiscountRules
    timestamptz createdAt
    uuid competitionId FK
  }
  price_snapshot {
    uuid id PK
    integer price
    timestamptz createdAt
    uuid divisionId FK
  }
  division {
    uuid id PK
    varchar category
    varchar uniform
    varchar gender
    varchar belt
    varchar weight
    varchar birthYearRangeStart
    varchar birthYearRangeEnd
    varchar status
    timestamptz createdAt
    timestamptz updatedAt
    uuid competitionId FK
  }
  required_additional_info {
    uuid id PK
    varchar type
    varchar description
    timestamptz createdAt
    timestamptz deletedAt "nullable"
    uuid competitionId FK
  }
  competition_host_map {
    uuid id PK
    uuid hostId FK
    uuid competitionId FK
  }
  competition_poster_image {
    uuid id PK
    uuid competitionId FK
    uuid imageId FK
    timestamptz createdAt
    timestamptz deletedAt "nullable"
  }
  competition {
    uuid id PK
    varchar competitionPaymentId
    varchar title
    varchar address
    timestamptz competitionDate "nullable"
    timestamptz registrationStartDate "nullable"
    timestamptz registrationEndDate "nullable"
    timestamptz refundDeadlineDate "nullable"
    timestamptz soloRegistrationAdjustmentStartDate "nullable"
    timestamptz soloRegistrationAdjustmentEndDate "nullable"
    timestamptz registrationListOpenDate "nullable"
    timestamptz bracketOpenDate "nullable"
    text description
    boolean isPartnership
    integer viewCount
    varchar status
    timestamptz createdAt
    timestamptz updatedAt
  }
  image {
    uuid id PK
    varchar path
    varchar format
    timestamptz createdAt
    timestamptz linkedAt "nullable"
    uuid userId FK
  }
  earlybird_discount_snapshot }o--|| competition: competition
  combination_discount_snapshot }o--|| competition: competition
  price_snapshot }|--|| division: division
  division }o--|| competition: competition
  required_additional_info }o--|| competition: competition
  competition_host_map }o--|| competition: competition
  competition_poster_image }o--|| competition: competition
  competition_poster_image }o--|| image: image

Indexes

TableIndex NameColumnsUniqueSpatialWhere
earlybird_discount_snapshotIDX_EarlybirdDiscountSnapshot_competitionIdcompetitionIdfalsefalse
combination_discount_snapshotIDX_CombinationDiscountSnapshot_competitionIdcompetitionIdfalsefalse
price_snapshotIDX_PriceSnapshot_divisionIddivisionIdfalsefalse
divisionIDX_Division_competitionIdcompetitionIdfalsefalse
required_additional_infoIDX_RequiredAdditionalInfo_competitionIdcompetitionIdfalsefalse
competition_host_mapIDX_CompetitionHostMap_competitionIdcompetitionIdfalsefalse
competitionIDX_Competition_statusstatusfalsefalse
competitionIDX_Competition_competitionDatecompetitionDatefalsefalse

earlybird_discount_snapshot

EarlybirdDiscountSnapshot.

์–ผ๋ฆฌ๋ฒ„๋“œ ํ• ์ธ ์Šค๋ƒ…์ƒท.

  • ์–ผ๋ฆฌ๋ฒ„๋“œ ํ• ์ธ ๊ทœ์น™์ด ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•œ๋‹ค.
    @namespace Competition

Properties

  • id: UUID v7.
  • earlybirdStartDate: ์–ผ๋ฆฌ๋ฒ„๋“œ ํ• ์ธ ์‹œ์ž‘์ผ.
  • earlybirdEndDate: ์–ผ๋ฆฌ๋ฒ„๋“œ ํ• ์ธ ๋งˆ๊ฐ์ผ.
  • discountAmount

    ์–ผ๋ฆฌ๋ฒ„๋“œ ํ• ์ธ ๊ฐ€๊ฒฉ.

    • ex) 10000.
    • ๋‹จ์œ„ : ์›.
    • ์Œ์ˆ˜ ๊ฐ’์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • createdAt
  • competitionId

combination_discount_snapshot

CombinationDiscountSnapshot.

๋ถ€๋ฌธ ์กฐํ•ฉ ํ• ์ธ ์Šค๋ƒ…์ƒท.

  • ์กฐํ•ฉ ํ• ์ธ ๊ทœ์น™์ด ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•œ๋‹ค.
    @namespace Competition

Properties

  • id: UUID v7.
  • combinationDiscountRules: ์กฐํ•ฉ ํ• ์ธ ๊ทœ์น™.
  • createdAt
  • competitionId

price_snapshot

PriceSnapshot.

๋Œ€ํšŒ ๋ถ€๋ฌธ์ด ๊ฐ€๊ฒฉ ์Šค๋ƒ…์ƒท.

  • ๋Œ€ํšŒ ๋ถ€๋ฌธ์˜ ๊ฐ€๊ฒฉ์ด ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•œ๋‹ค.
    @namespace Competition
    @erd Application

Properties

  • id: UUID v7.
  • price: price, (์›).
  • createdAt
  • divisionId

division

Division.

  • ๋Œ€ํšŒ์˜ ๋ถ€๋ฌธ ์ •๋ณด.
  • ๋Œ€ํšŒ์˜ ๋ถ€๋ฌธ์˜ ๊ฐ€๊ฒฉ ์ •๋ณด๋Š” PriceSnapshot Entity๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€๊ฒฉ์ด ์ˆ˜์ •๋ ๋•Œ๋งˆ๋‹ค PriceSnapshot Entity์— ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    @namespace Competition
    @erd Application

Properties

  • id: UUID v7.
  • category

    ๋ถ€๋ฌธ ์นดํ…Œ๊ณ ๋ฆฌ.

    • ex) โ€˜์ดˆ๋“ฑ๋ถ€โ€™, โ€˜์ค‘๋“ฑ๋ถ€โ€™, โ€˜์–ด๋œํŠธโ€™.
  • uniform: ์œ ๋‹ˆํผ.
  • gender: ๋ถ€๋ฌธ ์„ฑ๋ณ„.
  • belt

    ์ฃผ์ง“์ˆ˜๋ฒจํŠธ.

    • ex) โ€˜ํ™”์ดํŠธโ€™, โ€˜๋ธ”๋ฃจโ€™, โ€˜ํผํ”Œโ€™, โ€˜๋ธŒ๋ผ์šดโ€™, โ€˜๋ธ”๋ž™โ€™.
  • weight

    ์ฒด๊ธ‰.

    • weight type: โ€˜-45โ€™, โ€˜+45โ€™, โ€˜-60.5โ€™, โ€˜+60.5โ€™
    • absolute type: โ€˜-45_ABSOLUTEโ€™, โ€˜+45_ABSOLUTEโ€™, โ€˜-60.5_ABSOLUTEโ€™, โ€˜+60.5_ABSOLUTEโ€™, โ€˜ABSOLUTEโ€™
  • birthYearRangeStart: ์ถœ์ƒ๋…„๋„ ๋ฒ”์œ„ ์‹œ์ž‘. YYYY.
  • birthYearRangeEnd: ์ถœ์ƒ๋…„๋„ ๋ฒ”์œ„ ๋. YYYY.
  • status

    ํ™œ์„ฑ ์ƒํƒœ.

    • ACTIVE: ํ•ด๋‹น ๋ถ€๋ฌธ์— ์‹ ์ฒญ ๊ฐ€๋Šฅ. (USER ์—๊ฒŒ ๋…ธ์ถœ๋จ.)
    • INACTIVE: ํ•ด๋‹น ๋ถ€๋ฌธ์— ์‹ ์ฒญ ๋ถˆ๊ฐ€๋Šฅ. (USER ์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ.)
  • createdAt
  • updatedAt
  • competitionId

required_additional_info

RequiredAdditionalInfo.

๋Œ€ํšŒ์‹ ์ฒญ์‹œ ์ถ”๊ฐ€ ์ •๋ณด ์ž…๋ ฅ ๊ทœ์น™.

  • ๋Œ€ํšŒ์‚ฌ๊ฐ€ ์š”์ฒญํ•œ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น Entity๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    @namespace Competition

Properties

  • id: UUID v7.
  • type

    ์ถ”๊ฐ€์ •๋ณด ํƒ€์ž…๊ฐ€

    • SOCIAL_SECURITY_NUMBER : ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ
    • ADDRESS : ์ฃผ์†Œ
  • description

    ์ถ”๊ฐ€์ •๋ณด ์„ค๋ช….

    • ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์ด์œ ๋“ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค๋“ฑ
  • createdAt
  • deletedAt
  • competitionId

competition_host_map

Competition Host Map Entity
@namespace Competition

Properties

  • id: UUID v7.
  • hostId: ์ฃผ์ตœ์ž User ID.
  • competitionId: ์ฃผ์ฒด ๋Œ€ํšŒ ID.

competition_poster_image

CompetitionPosterImage.

  • ์‹ค์ œ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋Š” Image Entity๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ด๋‹น Entity๋Š” ๋Œ€ํšŒ ํฌ์Šคํ„ฐ ์ด๋ฏธ์ง€์™€ ๋Œ€ํšŒ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    @namespace Competition
    @erd Image

Properties

  • id: UUID v7.
  • competitionId: competitionId
  • imageId

    imageId

    • u-9-1 createImage ๋กœ ์ƒ์„ฑ๋œ image์˜ id
  • createdAt
  • deletedAt

competition

Competition.

๋Œ€ํšŒ ์ •๋ณด.
@namespace Competition

Properties

  • id: UUID v7.
  • competitionPaymentId

    ๋Œ€ํšŒ ๊ฒฐ์ œ ID.

    • ๊ฒฐ์ œ ID๋Š” 26์ž๋ฆฌ ULID ํ˜•์‹์ž…๋‹ˆ๋‹ค.
    • ๊ฐ ๋Œ€ํšŒ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๊ฒฐ์ œ ID๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • ํ•ด๋‹น ๋Œ€ํšŒ์‹ ์ฒญ์„ ๊ฒฐ์ œํ• ๋•Œ ํ•„์š”ํ•œ orderId์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ${orderId}_${competitionPaymentId} (63์ž)
    • tosspayments์—์„œ ํ•ด๋‹น ๋Œ€ํšŒ์˜ ๊ฒฐ์ œ ์ •๋ณด๋ฅผ ์กฐํšŒํ• ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • title: ๋Œ€ํšŒ๋ช….
  • address: ๋Œ€ํšŒ๊ฐ€ ์—ด๋ฆฌ๋Š” ์œ„์น˜ (๋„๋กœ๋ช… ์ฃผ์†Œ).
  • competitionDate: ๋Œ€ํšŒ ๋‚ ์งœ.
  • registrationStartDate: ์ฐธ๊ฐ€ ์‹ ์ฒญ ์‹œ์ž‘์ผ.
  • registrationEndDate: ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋งˆ๊ฐ์ผ.
  • refundDeadlineDate: ํ™˜๋ถˆ ๊ฐ€๋Šฅ ๊ธฐ๊ฐ„ ๋งˆ๊ฐ์ผ.
  • soloRegistrationAdjustmentStartDate

    ๋‹จ๋… ์ฐธ๊ฐ€์ž์˜ ๋ถ€๋ฌธ ์กฐ์ • ์‹œ์ž‘์ผ.

    • ๋ถ€๋ฌธ์— ์ฐธ๊ฐ€์ž๊ฐ€ ํ•œ ๋ช…๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ฐธ๊ฐ€์ž๋ฅผ ๋‹ค๋ฅธ ์ฒด๊ธ‰์ด๋‚˜ ๋ถ€๋ฌธ์œผ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ฐ„์˜ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • soloRegistrationAdjustmentEndDate: ๋‹จ๋… ์ฐธ๊ฐ€์ž์˜ ๋ถ€๋ฌธ ์กฐ์ • ๋งˆ๊ฐ์ผ.
  • registrationListOpenDate: ์ฐธ๊ฐ€์ž ๋ช…๋‹จ ๊ณต๊ฐœ์ผ.
  • bracketOpenDate: ๋Œ€์ง„ํ‘œ ๊ณต๊ฐœ์ผ.
  • description: ๋Œ€ํšŒ ์ƒ์„ธ ์ •๋ณด.
  • isPartnership: ํ˜‘์•ฝ ๋Œ€ํšŒ ์—ฌ๋ถ€.
  • viewCount: ์กฐํšŒ์ˆ˜.
  • status

    ๋Œ€ํšŒ์˜ ์ƒํƒœ.

    • ACTIVE: ํ™œ์„ฑํ™”๋œ ๋Œ€ํšŒ ์œ ์ €์—๊ฒŒ ๋…ธ์ถœ, ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ฐ€๋Šฅ.
    • INACTIVE: ๋น„ํ™œ์„ฑํ™”๋œ ๋Œ€ํšŒ ์œ ์ €์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ, ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋ถˆ๊ฐ€๋Šฅ.
  • createdAt
  • updatedAt

Post

erDiagram
  comment_report {
    uuid id PK
    varchar type
    varchar status
    uuid userId FK
    timestamptz createdAt
    uuid commentId FK
  }
  comment_snapshot {
    uuid id PK
    text body
    timestamptz createdAt
    uuid commentId FK
  }
  comment {
    uuid id PK
    uuid userId FK
    uuid parentId FK "nullable"
    varchar status
    timestamptz createdAt
    timestamptz deletedAt "nullable"
    uuid postId FK
  }
  comment_like {
    uuid id PK
    uuid userId FK
    timestamptz createdAt
    uuid commentId FK
  }
  post_like {
    uuid id PK
    uuid userId FK
    timestamptz createdAt
    uuid postId FK
  }
  post_report {
    uuid id PK
    varchar type
    varchar status
    uuid userId FK
    uuid postId FK
    timestamptz createdAt
  }
  image {
    uuid id PK
    varchar path
    varchar format
    timestamptz createdAt
    timestamptz linkedAt "nullable"
    uuid userId FK
  }
  post_snapshot_image {
    uuid id PK
    uuid postSnapshotId FK
    uuid imageId FK
    integer sequence
    timestamptz createdAt
  }
  post_snapshot {
    uuid id PK
    varchar title
    text body
    timestamptz createdAt
    uuid postId FK
  }
  post {
    uuid id PK
    uuid userId FK
    integer viewCount
    varchar status
    varchar category
    timestamptz createdAt
    timestamptz deletedAt "nullable"
  }
  comment_report }o--|| comment: comment
  comment_snapshot }|--|| comment: comment
  comment }o--|| comment: parent
  comment }o--|| post: post
  comment_like }o--|| comment: comment
  post_like }o--|| post: post
  post_report }o--|| post: post
  post_snapshot_image }o--|| post_snapshot: postSnapshot
  post_snapshot_image }o--|| image: image
  post_snapshot }|--|| post: post

comment_report

CommentReport.

๋Œ“๊ธ€์˜ ์‹ ๊ณ ์ •๋ณด๋ฅผ ๋‹ด๋Š” Entity์ž…๋‹ˆ๋‹ค.
์‹ ๊ณ  ํšŸ์ˆ˜๊ฐ€ 10ํšŒ ์ด์ƒ์ด๋ฉด ํ•ด๋‹น ๋Œ“๊ธ€์ด INACTIVE ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜๊ณ , ์œ ์ €์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋™์ผํ•œ ์œ ์ €๊ฐ€ ๋™์ผํ•œ ๋Œ“๊ธ€์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹ ๊ณ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (์ค‘๋ณต์‹ ๊ณ  ๋ถˆ๊ฐ€๋Šฅ)

@namespace Post

Properties

  • id: UUID v7.
  • type

    ์‹ ๊ณ  ํƒ€์ž….

    • SPAM_CLICKBAIT: ๋‚š์‹œ / ๋†€๋žŒ / ๋„๋ฐฐ
    • COMMERCIAL_ADVERTISING: ์ƒ์—…์  ๊ด‘๊ณ  ๋ฐ ํŒ๋งค
    • SEXUAL_CONTENT: ์Œ๋ž€์„ฑ / ์„ ์ •์ 
    • ABUSE_HARASSMENT: ์š•์„ค/๋น„ํ•˜
    • POLITICAL_DISPARAGEMENT: ์ •๋‹น/์ •์น˜์ธ ๋น„ํ•˜ ๋ฐ ์„ ๊ฑฐ์šด๋™
    • IMPERSONATION_FRAUD: ์œ ์ถœ/์‚ฌ์นญ/์‚ฌ๊ธฐ
    • ILLEGAL_DISTRIBUTION: ๋ถˆ๋ฒ•์ดฌ์˜๋ฌผ ๋“ฑ์˜ ์œ ํ†ต
    • RELIGIOUS_PROSELYTIZING: ์ข…๊ต ํฌ๊ต ์‹œ๋„
    • INAPPROPRIATE_CONTENT: ๊ฒŒ์‹œํŒ ์„ฑ๊ฒฉ์— ๋ถ€์ ์ ˆํ•จ
  • status

    ์‹ ๊ณ  ์ƒํƒœ. ACCEPTED์ƒํƒœ์˜ ์‹ ๊ณ ๊ฐ€ 10ํšŒ ์ด์ƒ์ด๋ฉด ํ•ด๋‹น ๋Œ“๊ธ€์ด INACTIVE ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

    • ACCEPTED: ์‹ ๊ณ  ์Šน์ธ.
    • REJECTED: ์‹ ๊ณ  ๊ฑฐ๋ถ€.
  • userId: ์‹ ๊ณ ์ž UserId.
  • createdAt: ์‹ ๊ณ ์ผ์ž.
  • commentId: ์‹ ๊ณ ๋œ ๋Œ“๊ธ€์˜ Id.

comment_snapshot

CommentSnapshot.

๋Œ“๊ธ€์˜ ์Šค๋ƒ…์ƒท ์ •๋ณด๋ฅผ ๋‹ด๋Š” Entity์ž…๋‹ˆ๋‹ค.
comment์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฆ๊ฑฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์‚ฌ๊ธฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ“๊ธ€ ๋ ˆ์ฝ”๋“œ์—์„œ ๋Œ“๊ธ€ ๋‚ด์šฉ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

@namespace Post

Properties

  • id: UUID v7.
  • body: ๋Œ“๊ธ€ ๋‚ด์šฉ.
  • createdAt: ๋Œ“๊ธ€ ์ž‘์„ฑ์ผ์ž.
  • commentId: ๋Œ“๊ธ€ Id.

comment

Comment, CommentReply.
๋Œ“๊ธ€ or ๋Œ€๋Œ“๊ธ€์„ ์‹๋ณ„ํ•˜๋Š” ์ตœ์ƒ์œ„ ์—”ํ‹ฐํ‹ฐ๋กœ์„œ ๊ฐœ๋ณ„ ๋Œ“๊ธ€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€์˜ ๋‚ด์šฉ(body) comment์— ์กด์žฌํ•˜์ง€ ์•Š๊ณ , comment_snapshot์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
comment์™€ comment_snapshot๋Š” 1:N ๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋Œ“๊ธ€์ด ์ˆ˜์ •๋ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šค๋ƒ…์ƒท ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€์ด ์ˆ˜์ •๋ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šค๋ƒ…์ƒท ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ด์œ ๋Š” ์ฆ๊ฑฐ๋ฅผ ๋ณด์กด ๋ฐ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํŠน์„ฑ์ƒ ์ฐธ์—ฌ์ž ๊ฐ„์—๋Š” ํ•ญ์ƒ ๋ถ„์Ÿ์˜ ์œ„ํ—˜์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ถ„์Ÿ์€ ๊ธ€์ด๋‚˜ ๋Œ“๊ธ€์„ ํ†ตํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ์กด ๋Œ“๊ธ€์„ ์ˆ˜์ •ํ•˜์—ฌ ์ƒํ™ฉ์„ ์กฐ์ž‘ํ•˜๋Š” ๋“ฑ์˜ ํ–‰์œ„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ฆ๊ฑฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์‚ฌ๊ธฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€๋Œ“๊ธ€์€ ๋ถ€๋ชจ ๋Œ“๊ธ€์˜ id๋ฅผ parentId์— ์ €์žฅํ•˜์—ฌ ๊ด€๊ณ„๋ฅผ ๋งบ์Šต๋‹ˆ๋‹ค. ๋Œ€๋Œ“๊ธ€์˜ depth๋Š” 1๋กœ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ๋Œ€๋Œ“๊ธ€์˜ ๋Œ€๋Œ“๊ธ€์€ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@namespace Post

Properties

  • id: UUID v7.
  • userId: ๋Œ“๊ธ€ ์ž‘์„ฑ์ž UserId.
  • parentId

    ๋ถ€๋ชจ ๋Œ“๊ธ€ Id.

    • ๋Œ“๊ธ€์˜ ๊ฒฝ์šฐ null์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋Œ€๋Œ“๊ธ€์˜ ๊ฒฝ์šฐ ๋ถ€๋ชจ ๋Œ“๊ธ€์˜ id๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • status

    ๋Œ“๊ธ€ ์ƒํƒœ. default: ACTIVE.

    • ACTIVE: ์œ ์ €์—๊ฒŒ ๋…ธ์ถœ.
    • INACTIVE: ์œ ์ €์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ. ๊ด€๋ฆฌ์ž์˜ ํŒ๋‹จ ํ•˜์— INACTIVE๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๊ณ  ํšŒ์ˆ˜๊ฐ€ 10ํšŒ ์ด์ƒ์ด๋ฉด ์ž๋™์œผ๋กœ INACTIVE ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์˜ ํŒ๋‹จ ํ•˜์— ACTIVE๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • createdAt: ๋Œ“๊ธ€ ์ž‘์„ฑ์ผ์ž.
  • deletedAt: ๋Œ“๊ธ€ ์‚ญ์ œ์ผ์ž.
  • postId: ๊ฒŒ์‹œ๊ธ€ Id.

comment_like

CommentLike.

๋Œ“๊ธ€ ์ข‹์•„์š” ์ •๋ณด๋ฅผ ๋‹ด๋Š” Entity์ž…๋‹ˆ๋‹ค.
๋™์ผํ•œ ์œ ์ €๊ฐ€ ๋™์ผํ•œ ๋Œ“๊ธ€์— ์—ฌ๋Ÿฌ ๋ฒˆ ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (์ค‘๋ณต ์ข‹์•„์š” ๋ถˆ๊ฐ€๋Šฅ)

@namespace Post

Properties

  • id: UUID v7.
  • userId: ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅธ UserId.
  • createdAt: ์ข‹์•„์š” ๋ˆ„๋ฅธ ์ผ์ž.
  • commentId: ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅธ ๋Œ“๊ธ€์˜ Id.

post_like

PostLike.

๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š” ์ •๋ณด๋ฅผ ๋‹ด๋Š” Entity์ž…๋‹ˆ๋‹ค.
๋™์ผํ•œ ์œ ์ €๊ฐ€ ๋™์ผํ•œ ๊ฒŒ์‹œ๊ธ€์— ์—ฌ๋Ÿฌ ๋ฒˆ ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (์ค‘๋ณต ์ข‹์•„์š” ๋ถˆ๊ฐ€๋Šฅ)

@namespace Post

Properties

  • id: UUID v7.
  • userId: ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅธ UserId.
  • createdAt: ์ข‹์•„์š” ๋ˆ„๋ฅธ ์ผ์ž.
  • postId: ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅธ ๊ฒŒ์‹œ๊ธ€์˜ Id.

post_report

PostReport.

๊ฒŒ์‹œ๊ธ€์˜ ์‹ ๊ณ ์ •๋ณด๋ฅผ ๋‹ด๋Š” Entity์ž…๋‹ˆ๋‹ค.
์‹ ๊ณ  ํšŸ์ˆ˜๊ฐ€ 10ํšŒ ์ด์ƒ์ด๋ฉด ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์ด INACTIVE ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜๊ณ , ์œ ์ €์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋™์ผํ•œ ์œ ์ €๊ฐ€ ๋™์ผํ•œ ๊ฒŒ์‹œ๊ธ€์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹ ๊ณ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (์ค‘๋ณต์‹ ๊ณ  ๋ถˆ๊ฐ€๋Šฅ)

@namespace Post

Properties

  • id: UUID v7.
  • type

    ์‹ ๊ณ  ํƒ€์ž….

    • SPAM_CLICKBAIT: ๋‚š์‹œ / ๋†€๋žŒ / ๋„๋ฐฐ
    • COMMERCIAL_ADVERTISING: ์ƒ์—…์  ๊ด‘๊ณ  ๋ฐ ํŒ๋งค
    • SEXUAL_CONTENT: ์Œ๋ž€์„ฑ / ์„ ์ •์ 
    • ABUSE_HARASSMENT: ์š•์„ค/๋น„ํ•˜
    • POLITICAL_DISPARAGEMENT: ์ •๋‹น/์ •์น˜์ธ ๋น„ํ•˜ ๋ฐ ์„ ๊ฑฐ์šด๋™
    • IMPERSONATION_FRAUD: ์œ ์ถœ/์‚ฌ์นญ/์‚ฌ๊ธฐ
    • ILLEGAL_DISTRIBUTION: ๋ถˆ๋ฒ•์ดฌ์˜๋ฌผ ๋“ฑ์˜ ์œ ํ†ต
    • RELIGIOUS_PROSELYTIZING: ์ข…๊ต ํฌ๊ต ์‹œ๋„
    • INAPPROPRIATE_CONTENT: ๊ฒŒ์‹œํŒ ์„ฑ๊ฒฉ์— ๋ถ€์ ์ ˆํ•จ
  • status

    ์‹ ๊ณ  ์ƒํƒœ. ACCEPTED์ƒํƒœ์˜ ์‹ ๊ณ ๊ฐ€ 10ํšŒ ์ด์ƒ์ด๋ฉด ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์ด INACTIVE ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

    • ACCEPTED: ์‹ ๊ณ  ์Šน์ธ.
    • REJECTED: ์‹ ๊ณ  ๊ฑฐ๋ถ€.
  • userId: ์‹ ๊ณ ์ž UserId.
  • postId: ์‹ ๊ณ ๋œ ๊ฒŒ์‹œ๊ธ€์˜ Id.
  • createdAt: ์‹ ๊ณ ์ผ์ž.

post_snapshot_image

PostSnapshotImage.

@namespace Post

Properties

  • id: UUID v7.
  • postSnapshotId: postSnapshotId.
  • imageId

    imageId.

    • u-9-1 createImage ๋กœ ์ƒ์„ฑ๋œ image์˜ id
  • sequence

    sequence.

    • ๊ฒŒ์‹œ๋ฌผ ์ด๋ฏธ์ง€์˜ ์ˆœ์„œ.
    • 0๋ถ€ํ„ฐ ์‹œ์ž‘.
  • createdAt

post_snapshot

PostSnapshot.

๊ฒŒ์‹œ๊ธ€์˜ ์Šค๋ƒ…์ƒท ์ •๋ณด๋ฅผ ๋‹ด๋Š” Entity์ž…๋‹ˆ๋‹ค.
post์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฆ๊ฑฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์‚ฌ๊ธฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฒŒ์‹œ๊ธ€ ๋ ˆ์ฝ”๋“œ์—์„œ ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

@namespace Post

Properties

  • id: UUID v7.
  • title: ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ.
  • body: ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ.
  • createdAt: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ผ์ž.
  • postId: ๊ฒŒ์‹œ๊ธ€ Id.

post

Post.
๊ฒŒ์‹œ๊ธ€์„ ์‹๋ณ„ํ•˜๋Š” ์ตœ์ƒ์œ„ ์—”ํ‹ฐํ‹ฐ๋กœ์„œ ๊ฐœ๋ณ„ ๊ฒŒ์‹œ๊ธ€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์‹œ๊ธ€์˜ ํ•„์ˆ˜ ์š”์†Œ title, body ๋“ฑ์€ post์— ์กด์žฌํ•˜์ง€ ์•Š๊ณ , post_snapshot์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
post์™€ post_snapshot๋Š” 1:N ๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ๊ธ€์ด ์ˆ˜์ •๋ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šค๋ƒ…์ƒท ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฒŒ์‹œ๊ธ€์ด ์ˆ˜์ •๋ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šค๋ƒ…์ƒท ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ด์œ ๋Š” ์ฆ๊ฑฐ๋ฅผ ๋ณด์กด ๋ฐ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํŠน์„ฑ์ƒ ์ฐธ์—ฌ์ž ๊ฐ„์—๋Š” ํ•ญ์ƒ ๋ถ„์Ÿ์˜ ์œ„ํ—˜์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ถ„์Ÿ์€ ๊ธ€์ด๋‚˜ ๋Œ“๊ธ€์„ ํ†ตํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ์กด ๊ธ€์„ ์ˆ˜์ •ํ•˜์—ฌ ์ƒํ™ฉ์„ ์กฐ์ž‘ํ•˜๋Š” ๋“ฑ์˜ ํ–‰์œ„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ฆ๊ฑฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์‚ฌ๊ธฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@namespace Post

Properties

  • id: UUID v7.
  • userId: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ž UserId.
  • viewCount: ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ์ˆ˜.
  • status

    ๊ฒŒ์‹œ๊ธ€ ์ƒํƒœ. default: ACTIVE.

    • ACTIVE: ์œ ์ €์—๊ฒŒ ๋…ธ์ถœ.
    • INACTIVE: ์œ ์ €์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ. ๊ด€๋ฆฌ์ž์˜ ํŒ๋‹จ ํ•˜์— INACTIVE๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๊ณ  ํšŒ์ˆ˜๊ฐ€ 10ํšŒ ์ด์ƒ์ด๋ฉด ์ž๋™์œผ๋กœ INACTIVE ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์˜ ํŒ๋‹จ ํ•˜์— ACTIVE๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • category

    Post category.

    • FREE: ์ž์œ  ๊ฒŒ์‹œํŒ.
    • COMPETITION: ๋Œ€ํšŒ ๊ฒŒ์‹œํŒ.
    • SEMINAR: ์„ธ๋ฏธ๋‚˜ ๊ฒŒ์‹œํŒ.
    • OPEN_MAT: ์˜คํ”ˆ ๋งคํŠธ ๊ฒŒ์‹œํŒ.
  • createdAt: ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์ผ์ž.
  • deletedAt: ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ์ผ์ž.

Image

erDiagram
  competition_poster_image {
    uuid id PK
    uuid competitionId FK
    uuid imageId FK
    timestamptz createdAt
    timestamptz deletedAt "nullable"
  }
  user_profile_image {
    uuid id PK
    uuid userId FK
    uuid imageId FK
    timestamptz createdAt
    timestamptz deletedAt "nullable"
  }
  image {
    uuid id PK
    varchar path
    varchar format
    timestamptz createdAt
    timestamptz linkedAt "nullable"
    uuid userId FK
  }
  competition_poster_image }o--|| image: image
  user_profile_image }o--|| image: image

image

Image.

์ด๋ฏธ์ง€ ์ •๋ณด.

  • bucket์— ์ €์žฅ๋˜๋Š” ์ด๋ฏธ์ง€ ์ •๋ณด.
  • UserImage, CompetitionPosterImage, PostImage ๋“ฑ ์— ๋งคํ•‘๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€๋Š” 10๋ถ„ ์ดํ›„์—๋„ UserImage, CompetitionPosterImage, PostImage ๋“ฑ ์— ๋งคํ•‘๋˜์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€๊ฐ€ ๋งคํ•‘๋œ๋‹ค๋ฉด linkedAt ์— ๋งคํ•‘๋œ ์‹œ๊ฐ„์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

@namespace Image
@erd Competition
@erd Post
@erd User

Properties

  • id

    UUID v7.

  • path

    s3 bucket์— ์ €์žฅ๋˜๋Š” ์ด๋ฏธ์ง€์˜ ๊ฒฝ๋กœ

    • user ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ: user-profile ๋กœ ์„ค๋กœ
    • competition ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ: competition ๋กœ ์„ค์ •
    • post ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ: post ๋กœ ์„ค์ •
  • format

    image format.

    • โ€˜image/jpeg'
    • 'image/png'
    • 'image/webpโ€™;
  • createdAt

    createdAt.

    • ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋œ ์‹œ๊ฐ„
  • linkedAt

    linkedAt.

    • ์ด๋ฏธ์ง€๋ฅผ ์†Œ์œ ํ•œ entity์— FK๋กœ ์—ฐ๊ฒฐ๋œ ์‹œ๊ฐ„.
    • null ์ด๋ฉด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€.
    • createdAt + 10๋ถ„ ์ดํ›„์—๋„ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • userId

    userId.

    • ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•œ ๊ณ„์ •์˜ userId.

TemporaryUser

erDiagram
  temporary_user {
    uuid id PK
    varchar role
    varchar snsAuthProvider
    varchar snsId
    varchar email
    varchar name
    varchar phoneNumber "nullable"
    varchar nickname "nullable"
    varchar gender "nullable"
    varchar birth "nullable"
    varchar belt "nullable"
    varchar status
    timestamptz createdAt
    timestamptz updatedAt
  }
  

temporary_user

TemporaryUser.

ํšŒ์›๊ฐ€์ž…์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž.

  • ํšŒ์›๊ฐ€์ž…์ด ์™„๋ฃŒ๋˜๋ฉด User๋กœ ์ด๋™ํ•œ๋‹ค.
    @namespace TemporaryUser

Properties

  • id
  • role
  • snsAuthProvider
  • snsId
  • email
  • name
  • phoneNumber
  • nickname
  • gender
  • birth
  • belt
  • status
  • createdAt
  • updatedAt