Skip to content

Latest commit

 

History

History
614 lines (493 loc) · 13.2 KB

File metadata and controls

614 lines (493 loc) · 13.2 KB

생성된 질문 저장

Request Parameters

Request Body

DTO 이름

Enum 이름 (없으면 삭제)

DRAFT,
PUBLISHED,
CLOSED

Example

image.png

{
  "date": "2025-10-13",
  "content": "환승연애 출연 이해 가능?",
  "choice_1": "가능!!! 끝난 사이에 뭐 어때",
  "choice_2": "불가능.. 꼴도보기 싫지않나",
  "publish_at": "2025-10-13T09:00:00+09:00",
  "close_at": "2025-10-13T23:59:59+09:00"
}

Response Body

DTO 이름

Example

201 Created

{
  "id": 101,
  "status": "DRAFT",
  "opens_at": "2025-10-13T09:00:00+09:00",
  "closes_at": "2025-10-13T23:59:59+09:00"
}

Draft 상태 질문 수정

Request Parameters

Request Body

  • status 필드만 빼고 보내주세요

    image.png

AdminQuestionUpdateRequest

OPTION

AGREE,
DISAGREE

STATUS

DRAFT, 
PUBLISHED, 
CLOSED

Response Body

AdminQuestionDetailResponse

Example

200 OK

{
  "id": 123,
  "status": "DRAFT",
  "content": "수정된 질문 본문",
  "options": ["AGREE", "DISAGREE"],
  "planned_publish_at": "2025-10-13T23:00:00Z",
  "created_at": "2025-10-10T00:00:00Z"
}

질문 공개 알림 발송 스케줄

Request Parameters

Request Body

DTO 이름

Response Body

DTO 이름

Example

200 OK

{
  "id": 101,
  "status": "PUBLISHED",
  "published_at": "2025-10-13T09:00:00+09:00",
  "notification_scheduled": false
}

질문 종료

Request Parameters

Request Body

DTO 이름

Response Body

DTO 이름

Example

200 OK

{
  "id": 101,
  "status": "CLOSED",
  "closed_at": "2025-10-13T23:59:59+09:00"
}

댓글 강제 삭제

Request Parameters

Request Body

제목 없음

Example

{ "reason": "욕설/비방" }

Response Body

제목 없음

Example

200 OK

{
  "timestamp": "2025-11-30T01:13:17.105925",
  "status": 200,
  "code": "SUCCESS",
  "message": "요청이 성공적으로 처리되었습니다.",
  "data": {
    "commentId": 10,
    "isSoftDeleted": true,
    "deletedAt": "2025-11-30T01:13:17.097226"
  }
}

댓글 전체 목록 조회

Request Parameters

Request Body

DTO 이름

Response Body

CommentListResponse

CommentResponse

CommentReplyResponse

Example

200 OK

{
  "page": 1,
  "size": 10,
  "has_next": true,
  "items": [
    {
      "comment_id": 501,
      "question_id": 101,
      "user_id": 12,
      "nickname": "꼼꼼한 왜문어",
      "content": "이건 무조건 가능 출연료가 얼만데 ㅋㅋㅋ",
      "is_deleted": false,
      "created_at": "2025-10-16T12:30:12+09:00",
      "updated_at": "2025-10-16T12:30:12+09:00",
      "replies": [
        {
          "comment_id": 502,
          "user_id": 34,
          "nickname": "순박한 퀴노아",
          "content": "맞긴해...",
          "is_deleted": false,
          "created_at": "2025-10-16T12:32:05+09:00"
        }
      ]
    }
  ]
}

// 실제 응답
{
  "timestamp": "2025-11-30T01:12:16.757742",
  "status": 200,
  "code": "SUCCESS",
  "message": "요청이 성공적으로 처리되었습니다.",
  "data": {
    "page": 1,
    "size": 10,
    "hasNext": true,
    "items": [
      {
        "commentId": 62,
        "questionId": 1,
        "parentId": null,
        "userId": 2,
        "userNickname": "나태한 아보카도",
        "userEmail": "iwbm312@gmail.com",
        "content": "string",
        "isDeleted": false,
        "createdAt": "2025-11-30T00:12:24.666798",
        "replies": []
      },
      {
        "commentId": 61,
        "questionId": 1,
        "parentId": null,
        "userId": 2,
        "userNickname": "나태한 아보카도",
        "userEmail": "iwbm312@gmail.com",
        "content": "string",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:45:14.795709",
        "replies": []
      },
      {
        "commentId": 60,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:23:19.565518",
        "replies": []
      },
      {
        "commentId": 59,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:23:19.256531",
        "replies": []
      },
      {
        "commentId": 58,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:23:19.087784",
        "replies": []
      },
      {
        "commentId": 57,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:23:18.938703",
        "replies": []
      },
      {
        "commentId": 56,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:23:18.653893",
        "replies": []
      },
      {
        "commentId": 55,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:23:18.413717",
        "replies": []
      },
      {
        "commentId": 54,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:23:18.203446",
        "replies": []
      },
      {
        "commentId": 53,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "createdAt": "2025-11-29T13:23:18.039692",
        "replies": []
      }
    ]
  }
}

신고된 댓글 목록 조회

처음에는 루트 댓글을 불러올 때 각 댓글의 대댓글까지 함께 내려주는 방식으로 개발하고, 추후 성능 문제 발생 시 변경 예정

Request Parameters

Request Body

DTO 이름

Response Body

CommentListResponse

CommentResponse

CommentReplyResponse

Example

200 OK

{
  "page": 1,
  "size": 10,
  "has_next": true,
  "items": [
    {
      "comment_id": 501,
      "question_id": 101,
      "user_id": 12,
      "nickname": "꼼꼼한 왜문어",
      "content": "이건 무조건 가능 출연료가 얼만데 ㅋㅋㅋ",
      "is_deleted": false,
      "created_at": "2025-10-16T12:30:12+09:00",
      "updated_at": "2025-10-16T12:30:12+09:00",
      "replies": [
        {
          "comment_id": 502,
          "user_id": 34,
          "nickname": "순박한 퀴노아",
          "content": "맞긴해...",
          "is_deleted": false,
          "created_at": "2025-10-16T12:32:05+09:00"
        }
      ]
    }
  ]
}

// 실제 응답
{
  "timestamp": "2025-11-30T01:14:35.838511",
  "status": 200,
  "code": "SUCCESS",
  "message": "요청이 성공적으로 처리되었습니다.",
  "data": {
    "page": 1,
    "size": 10,
    "hasNext": false,
    "items": [
      {
        "commentId": 5,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": true,
        "reportCount": 2,
        "createdAt": "2025-11-29T13:23:04.707444",
        "replies": []
      },
      {
        "commentId": 4,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "reportCount": 1,
        "createdAt": "2025-11-29T13:23:04.251709",
        "replies": []
      },
      {
        "commentId": 6,
        "questionId": 1,
        "parentId": null,
        "userId": 1,
        "userNickname": "냉혹한 솔개",
        "userEmail": "jinyshin.dev@gmail.com",
        "content": "테스트 대댓글",
        "isDeleted": false,
        "reportCount": 1,
        "createdAt": "2025-11-29T13:23:05.323896",
        "replies": []
      }
    ]
  }
}

질문별 푸시 발송 결과 조회

Request Parameters

Request Body

DTO 이름

Enum 이름 (없으면 삭제)

Example

Response Body

NotificationLogListResponse

Example

200 OK

{
  "items": [
    {
      "log_id": 9876,
      "question_id": 123,
      "scheduled_at": "2025-10-13T23:00:00Z",
      "sent_at": "2025-10-13T23:00:02Z",
      "target_count": 1500,
      "success_count": 1420,
      "fail_count": 80
    }
  ],
  "page": 1,
  "size": 20,
  "total": 8
}

투표/댓글 통계 조회

스크린샷 2025-12-21 오후 12.36.52.png

Request Parameters

Request Body

DTO 이름

Enum 이름 (없으면 삭제)

Example

Response Body

DTO 이름

Example

200 OK

{
  "date": "2025-10-10",
  "dau": 734,
  "vote_count": 1450,
  "comment_count": 380,
  "participation_rate": 197.6,
  "by_topic": [
    { "topic_id": 123, "votes": 200, "comments": 56, "agree": 120, "disagree": 80 }
  ],
  "access_by_hour": [23, 41, 52, 38, ...]
}

사용자별 누적 투표/댓글 횟수 조회

스크린샷 2025-12-21 오후 12.34.05.png

Request Parameters

Request Body

DTO 이름

Enum 이름 (없으면 삭제)

Example

Response Body

UserEngagementListResponse{ "items": [ { "user_id": 42, "nickname": "푸른참새", "votes": 87, "comments": 23, "last_active_at": "2025-10-10T15:02:00Z" } ], "page": 1, "size": 20, "total": 312 }

Example

200 OK

{
  "items": [
    {
      "user_id": 42,
      "nickname": "왕문어",
      "votes": 87,
      "comments": 23,
      "last_active_at": "2025-10-10T15:02:00Z"
    }
  ],
  "page": 1,
  "size": 20,
  "total": 312
}