openapi: 3.0.3 info: title: CEC USER API Documentation version: 1.0.12 tags: - name: 1-1. 대여 신청 / 장비 분류 - name: 1-2. 대여 신청 / 장비 모델 - name: 1-3. 대여 신청 / 장비 - name: 1-4. 대여 신청 / 강의실 - name: 2. 게시판 - name: 2. 게시판 / 댓글 - name: 3-1. 유저 프로필 / 내 정보 수정 - name: 3-2. 유저 프로필 / 1:1 문의하기 - name: 공지사항 paths: /api/equipment-categories/{id}: get: tags: - 1-1. 대여 신청 / 장비 분류 summary: 카테고리 단일 조회 operationId: getCategoryById parameters: - name: id in: path description: 조회할 장비 카테고리의 ID required: true schema: type: integer format: int64 example: 1 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseEquipmentCategoryResponse' /api/equipment-categories/countbycategory: get: tags: - 1-1. 대여 신청 / 장비 분류 summary: 카테고리 전체 조회와 각 카테고리 별 장비 개수 통계 operationId: countEquipment responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseListEquipmentCountByCategoryResponse' /api/equipment-models: get: tags: - 1-2. 대여 신청 / 장비 모델 summary: 장비 모델 목록 조회 operationId: getAllModels parameters: - name: categoryId in: query description: 장비 카테고리 ID required: false schema: type: string description: 장비 카테고리 ID example: 1 example: 1 - name: keyword in: query description: 검색어 (모델명 또는 영문코드에 대해 부분 일치 검색) required: false schema: type: string description: 검색어 (모델명 또는 영문코드에 대해 부분 일치 검색) example: 카메라 example: 카메라 - name: sortBy in: query description: " 정렬할 필드 이름 (대문자로 전달해야 함)\n - NAME: 모델명 기준 정렬\n - ID:\ \ 모델 ID 기준 정렬\n" required: false schema: type: string enum: - NAME - ID example: ID - name: page in: query description: 페이지 번호 (기본값 0) required: false schema: type: integer description: 페이지 번호 (기본값 0) example: 0 example: 0 - name: size in: query description: 페이지당 크기 (기본값 = 10) required: false schema: type: integer description: 페이지당 크기 (기본값 = 10) example: 10 example: 10 - name: sortDirection in: query description: 정렬 방법 required: false schema: type: string enum: - ASC - DESC responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseEquipmentModelListResponse' /api/equipment-models/{id}: get: tags: - 1-2. 대여 신청 / 장비 모델 summary: 장비 모델 단일 조회 operationId: getModel parameters: - name: id in: path description: 조회할 장비 모델의 고유 ID required: true schema: type: integer format: int64 example: 1 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseEquipmentModelResponse' /api/user/equipments/cart: get: tags: - 1-3. 대여 신청 / 장비 summary: 장비 장바구니 조회 operationId: getCartItems responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseListEquipmentResponse' post: tags: - 1-3. 대여 신청 / 장비 summary: 장비 장바구니 추가 operationId: addToCart requestBody: content: application/json: schema: type: array items: type: integer format: int64 required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseVoid' /api/user/equipments/action: patch: tags: - 1-3. 대여 신청 / 장비 summary: 장비 상태 변경 요청 (대여/반납 요청 및 취소) description: 날짜는 대여 요청 시에만 필요 operationId: handleEquipmentAction requestBody: content: application/json: schema: $ref: '#/components/schemas/EquipmentActionRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseVoid' /api/user/equipments: get: tags: - 1-3. 대여 신청 / 장비 summary: 장비 목록 조회 operationId: getEquipments parameters: - name: categoryId in: query description: 카테고리 ID로 정렬 required: false schema: type: string description: 카테고리 ID로 정렬 example: 1 example: 1 - name: keyword in: query description: 검색 키워드 (모델명, 대여자명, 일련번호, 카테고리명) required: false schema: type: string description: 검색 키워드 (모델명, 대여자명, 일련번호, 카테고리명) example: SONY example: SONY - name: searchType in: query description: 검색 타입 (ALL, MODEL_NAME, CATEGORY_NAME, SERIAL_NUMBER, RENTER_NAME) required: false schema: type: string enum: - ALL - MODEL_NAME - CATEGORY_NAME - RENTER_NAME example: ALL - name: status in: query description: 장비 상태 (ALL, AVAILABLE, IN_USE, BROKEN, RENTAL_PENDING, RETURN_PENDING 중 선택) required: false schema: type: string enum: - ALL - AVAILABLE - IN_USE - BROKEN - RENTAL_PENDING - RETURN_PENDING example: AVAILABLE - name: sortBy in: query description: 정렬할 필드 (id, createdAt, name 등) required: false schema: type: string enum: - NAME - ID example: id - name: page in: query description: 페이지 번호 (기본값 0) required: false schema: type: integer description: 페이지 번호 (기본값 0) example: 0 example: 0 - name: size in: query description: 페이지당 크기 (기본값 = 10) required: false schema: type: integer description: 페이지당 크기 (기본값 = 10) example: 10 example: 10 - name: sortDirection in: query description: 정렬 방법 required: false schema: type: string enum: - ASC - DESC responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseEquipmentListResponse' /api/user/equipments/{id}: get: tags: - 1-3. 대여 신청 / 장비 summary: 장비 단일 조회 operationId: getEquipment parameters: - name: id in: path description: 장비 ID required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseEquipmentResponse' /api/classroom/{id}/rental: patch: tags: - 1-4. 대여 신청 / 강의실 summary: 강의실 대여 신청 operationId: rental parameters: - name: id in: path required: true schema: type: integer format: int64 requestBody: content: application/json: schema: $ref: '#/components/schemas/ClassroomRentalRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseLong' /api/classroom/{id}/cancel: patch: tags: - 1-4. 대여 신청 / 강의실 summary: 강의실 대여 취소 operationId: cancel parameters: - name: id in: path required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseLong' /api/classroom: get: tags: - 1-4. 대여 신청 / 강의실 summary: 강의실 목록 조회 operationId: getAllClassroom responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseListClassroomResponse' /api/classroom/schedule: get: tags: - 1-4. 대여 신청 / 강의실 summary: 휴일 + 특강 + 수업 + 대여 시간표 조회 description: "**일정이 시작되는 시간순으로 정렬해서 조회됩니다.**\n\n- **요청 파라미터**\n - **date**\ \ : yyyy-HH-dd 형식. 조회할 주차의 아무 날짜.\n - **classroomId** : 강의실 id" operationId: getSchedule parameters: - name: date in: query required: true schema: type: string format: date - name: classroomId in: query required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseListScheduleResponse' /api/user/community/{id}: get: tags: - 2. 게시판 summary: 게시판 단일 조회 operationId: getCommunityPostById parameters: - name: id in: path required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/CommunityResponse' put: tags: - 2. 게시판 summary: 게시판 글 수정 operationId: updateCommunityPost parameters: - name: id in: path required: true schema: type: integer format: int64 requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdatePostRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/CommunityResponse' delete: tags: - 2. 게시판 summary: 게시판 글 삭제 operationId: deleteCommunityPost parameters: - name: id in: path required: true schema: type: integer format: int64 responses: '200': description: OK /api/user/community: get: tags: - 2. 게시판 summary: 게시판 목록 조회 operationId: getCommunityPosts parameters: - name: pageable in: query required: true schema: $ref: '#/components/schemas/Pageable' - name: typeId in: query required: false schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/CommunityListResponse' post: tags: - 2. 게시판 summary: 게시판 글 쓰기 operationId: createCommunityPost requestBody: content: application/json: schema: $ref: '#/components/schemas/CreatePostRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/CommunityResponse' /api/user/community/{id}/recommend: post: tags: - 2. 게시판 summary: 게시판 글 따1봉 operationId: recommendCommunityPost parameters: - name: id in: path required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/CommunityResponse' /api/comments: get: tags: - 2. 게시판 / 댓글 summary: 댓글 목록 조회 operationId: getComments parameters: - name: type in: query description: BOARD, NOTICE, INQUIRY 중 1 required: false schema: type: string enum: - ID - name: targetId in: query description: 대댓글 대상 required: false schema: type: string enum: - ID - name: sortBy in: query description: 정렬 기준 required: false schema: type: string enum: - ID - name: page in: query description: 페이지 번호 (기본값 0) required: false schema: type: integer description: 페이지 번호 (기본값 0) example: 0 example: 0 - name: size in: query description: 페이지당 크기 (기본값 = 10) required: false schema: type: integer description: 페이지당 크기 (기본값 = 10) example: 10 example: 10 - name: sortDirection in: query description: 정렬 방법 required: false schema: type: string enum: - ASC - DESC responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseCommentListResponse' post: tags: - 2. 게시판 / 댓글 summary: 댓글 작성 operationId: createComment requestBody: content: application/json: schema: $ref: '#/components/schemas/CommentRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseLong' /api/comments/{id}: delete: tags: - 2. 게시판 / 댓글 summary: 댓글 삭제 description: '댓글을 삭제합니다. **권한 검증:** - 본인이 작성한 댓글만 삭제 가능합니다. - 권한이 없는 경우 AccessDeniedException이 발생합니다. **삭제 방식:** - 현재는 물리적 삭제(완전 삭제)를 수행합니다. - 대댓글이 있는 경우에도 완전 삭제됩니다. **주의사항:** - 삭제된 댓글은 복구할 수 없습니다. - 대댓글이 있는 댓글을 삭제하면 대댓글도 고아 상태가 될 수 있습니다. **예시 URL:** http://localhost:8080/api/comments/1 **응답:** - 삭제된 댓글의 ID를 반환합니다. ' operationId: deleteComment parameters: - name: id in: path description: 댓글 ID required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseLong' patch: tags: - 2. 게시판 / 댓글 summary: 댓글 수정 description: '기존 댓글의 내용을 수정합니다. **권한:** - 본인이 작성한 댓글만 수정 가능합니다. **예시 URL:** http://localhost:8080/api/comments/1 ' operationId: updateComment parameters: - name: id in: path description: 댓글 ID required: true schema: type: integer format: int64 requestBody: content: application/json: schema: $ref: '#/components/schemas/CommentUpdateRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseLong' /api/mypage: get: tags: - 3-1. 유저 프로필 / 내 정보 수정 summary: 내 정보 조회 operationId: getMyInfo responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseMyInfoResponse' put: tags: - 3-1. 유저 프로필 / 내 정보 수정 summary: 내 정보 수정 operationId: updateMyInfo requestBody: content: application/json: schema: $ref: '#/components/schemas/MyInfoRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseMyInfoResponse' /api/boards/inquiry/{id}: get: tags: - 3-2. 유저 프로필 / 1:1 문의하기 summary: 문의글 상세 조회 description: 사용자가 본인이 작성한 문의글을 상세 조회합니다. operationId: getInquiry parameters: - name: id in: path required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/InquiryResponse' put: tags: - 3-2. 유저 프로필 / 1:1 문의하기 summary: 문의글 수정 description: 본인이 작성한 문의글을 수정합니다. operationId: updateInquiry parameters: - name: id in: path required: true schema: type: integer format: int64 requestBody: content: application/json: schema: $ref: '#/components/schemas/InquiryRequest' required: true responses: '200': description: OK delete: tags: - 3-2. 유저 프로필 / 1:1 문의하기 summary: 문의글 삭제 description: 본인이 작성한 문의글을 삭제합니다. operationId: deleteInquiry parameters: - name: id in: path required: true schema: type: integer format: int64 responses: '200': description: OK /api/boards/inquiry: get: tags: - 3-2. 유저 프로필 / 1:1 문의하기 summary: 내 문의글 목록 조회 description: 로그인한 사용자의 모든 문의글을 페이지네이션과 함께 조회합니다. operationId: getMyInquiries parameters: - name: page in: query required: false schema: type: integer format: int32 default: 1 - name: size in: query required: false schema: type: integer format: int32 default: 10 - name: sortBy in: query required: false schema: type: string default: createdAt - name: sortDirection in: query required: false schema: type: string default: DESC responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PageInquiryResponse' post: tags: - 3-2. 유저 프로필 / 1:1 문의하기 summary: 문의글 작성 description: 인증된 사용자가 제목, 내용, 유형 등을 입력하여 문의글을 작성합니다. operationId: createInquiry requestBody: content: application/json: schema: $ref: '#/components/schemas/InquiryRequest' required: true responses: '200': description: OK content: '*/*': schema: type: integer format: int64 /api/notices: get: tags: - 공지사항 summary: 공지사항 목록 조회 operationId: getNotices parameters: - name: adminNoticeSearchType in: query description: 관리자 공지사항 검색 기준 required: false schema: type: string enum: - ALL - TITLE - CONTENT - name: searchKeyword in: query description: 검색어 required: false schema: type: string description: 검색어 - name: sortBy in: query required: false schema: type: string enum: - ID - name: page in: query description: 페이지 번호 (기본값 0) required: false schema: type: integer description: 페이지 번호 (기본값 0) example: 0 example: 0 - name: size in: query description: 페이지당 크기 (기본값 = 10) required: false schema: type: integer description: 페이지당 크기 (기본값 = 10) example: 10 example: 10 - name: sortDirection in: query description: 정렬 방법 required: false schema: type: string enum: - ASC - DESC responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseNoticeListResponse' /api/notices/{id}: get: tags: - 공지사항 summary: 공지사항 단일조회 operationId: getNotice parameters: - name: id in: path description: 공지사항 ID required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseNoticeResponse' components: schemas: UpdatePostRequest: type: object properties: title: type: string content: type: string type: type: string communityTypeId: type: integer format: int64 CommunityResponse: type: object properties: id: type: integer format: int64 title: type: string community_type_id: type: integer format: int64 recommend: type: integer format: int32 view: type: integer format: int32 type: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time authorId: type: integer format: int64 authorName: type: string authorNickname: type: string authorProfilePicture: type: string MyInfoRequest: type: object properties: name: type: string description: 이름 example: 홍길동 phoneNumber: type: string description: 휴대폰 번호 example: 01012345678 nickname: type: string description: 닉네임 example: 길동이 newPassword: pattern: ^((?=.*[A-Za-z])(?=.*\d)|(?=.*[A-Za-z])(?=.*[^A-Za-z\d])|(?=.*\d)(?=.*[^A-Za-z\d])).{8,16}$ type: string description: 새 비밀번호 (영문, 숫자, 특수기호 중 2가지 이상 조합, 8~16자) confirmPassword: type: string description: 새 비밀번호 확인 profilePicture: type: string description: 프로필 이미지 S3 URL example: https://s3.bucket/path/profile.jpg description: 내 정보 수정 요청 DTO ApiResponseMyInfoResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/MyInfoResponse' MyInfoResponse: type: object properties: name: type: string description: 사용자 이름 example: 홍길동 phoneNumber: type: string description: 전화번호 example: 010-1234-5678 nickname: type: string description: 닉네임 example: 길동이 profilePicture: type: string description: 프로필 사진 URL nullable: true example: https://example.com/profile.jpg InquiryRequest: required: - content - title - type type: object properties: title: type: string description: 문의 제목 example: 장비 대여 관련 문의 content: type: string description: 문의 내용 example: 장비 대여 예약이 되지 않습니다. attachmentUrl: type: string description: 첨부파일 URL example: https://example.com/image.png type: type: string description: 문의 유형 example: RENTAL enum: - RENTAL - RETURN - SYSTEM_ERROR - EQUIPMENT_BROKEN - PENALTY - ETC ApiResponseVoid: type: object properties: status: type: string message: type: string data: type: object CreatePostRequest: type: object properties: title: type: string content: type: string type: type: string communityTypeId: type: integer format: int64 CommentRequest: required: - content - targetId - type type: object properties: content: type: string description: 댓글 내용 example: 좋은 글 감사합니다. type: type: string description: 댓글 대상 종류 example: NOTICE enum: - BOARD - NOTICE - INQUIRY targetId: type: integer description: 댓글 대상 ID format: int64 example: 1 parentCommentId: type: integer description: 부모 댓글 ID format: int64 example: 1 description: 댓글 생성 요청 DTO ApiResponseLong: type: object properties: status: type: string message: type: string data: type: integer format: int64 EquipmentActionRequest: type: object properties: action: type: string description: 'RENT_REQUEST: 대여 요청 RENT_CANCEL: 대여 요청 취소 RETURN_REQUEST: 반납 요청 RETURN_CANCEL: 반납 요청 취소' enum: - RENT_REQUEST - RENT_CANCEL - RETURN_REQUEST - RETURN_CANCEL equipmentIds: type: array description: 장비 ID 목록 example: - 1 - 2 - 3 items: type: integer description: 장비 ID 목록 format: int64 startDate: type: string description: 요청 시작일 (대여 요청 시에만 필요) format: date-time nullable: true endDate: type: string description: 요청 종료일 (대여 요청 시에만 필요) format: date-time nullable: true CommentUpdateRequest: type: object properties: content: type: string description: 댓글 수정 요청 DTO ClassroomRentalRequest: required: - endRentTime - startRentTime type: object properties: startRentTime: type: string description: 대여 시작 시간 example: '13:00' endRentTime: type: string description: 대여 종료 시간 example: '14:00' ApiResponseEquipmentListResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/EquipmentListResponse' EquipmentListResponse: type: object properties: content: type: array items: $ref: '#/components/schemas/EquipmentResponse' pageable: $ref: '#/components/schemas/PageableInfo' EquipmentResponse: type: object properties: modelName: type: string description: 장비 모델 이름 example: SONY startRentTime: type: string description: 대여 시작 시간 format: date-time endRentTime: type: string description: 대여 종료 시간 format: date-time renterName: type: string description: 대여자 이름 (대여하지 않은 경우 null) nullable: true example: 홍길동 status: type: string description: 장비 상태 example: IN_USE createdAt: type: string description: 장비 등록일 format: date-time imageUrl: type: string description: 장비 이미지 URL example: https://example.com/images/equipment.jpg PageableInfo: type: object properties: pageNumber: type: integer format: int32 pageSize: type: integer format: int32 totalPages: type: integer format: int32 totalElements: type: integer format: int64 ApiResponseEquipmentResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/EquipmentResponse' ApiResponseListEquipmentResponse: type: object properties: status: type: string message: type: string data: type: array items: $ref: '#/components/schemas/EquipmentResponse' Pageable: type: object properties: page: minimum: 0 type: integer format: int32 size: minimum: 1 type: integer format: int32 sort: type: array items: type: string CommunityListResponse: type: object properties: content: type: array items: $ref: '#/components/schemas/CommunityResponse' pageable: $ref: '#/components/schemas/PageableInfo' ApiResponseNoticeListResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/NoticeListResponse' NoticeListResponse: type: object properties: content: type: array items: $ref: '#/components/schemas/NoticeResponse' pageable: $ref: '#/components/schemas/PageableInfo' NoticeResponse: type: object properties: id: type: integer description: 공지사항 ID format: int64 example: 1 title: type: string description: 공지사항 제목 example: 시스템 점검 안내 content: type: string description: 공지사항 본문 내용 example: 시스템 점검이 6월 3일 00시에 진행됩니다. isImportant: type: boolean description: 중요 공지 여부 (true이면 상단 고정) example: true attachmentUrl: type: string description: 첨부 파일 URL nullable: true example: https://example.com/files/manual.pdf view: type: integer description: 공지사항 조회수 format: int32 example: 132 createdAt: type: string description: 공지 등록 시간 format: date-time updatedAt: type: string description: 공지 수정 시간 format: date-time author: $ref: '#/components/schemas/ProfileResponse' ProfileResponse: type: object properties: id: type: integer format: int64 name: type: string nickname: type: string profilePicture: type: string role: type: string description: 공지 작성자 정보 ApiResponseNoticeResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/NoticeResponse' ApiResponseEquipmentModelListResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/EquipmentModelListResponse' EquipmentModelListResponse: type: object properties: content: type: array items: $ref: '#/components/schemas/EquipmentModelResponse' pageable: $ref: '#/components/schemas/PageableInfo' EquipmentModelResponse: type: object properties: id: type: integer description: 장비 모델 ID format: int64 example: 1 name: type: string description: 장비 모델 이름 example: SONY englishCode: type: string description: 장비 모델의 영어 코드 example: CAMERA available: type: boolean description: 현재 사용 가능한지 여부 example: true categoryId: type: integer description: 장비 모델이 속한 카테고리 ID format: int64 example: 3 ApiResponseEquipmentModelResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/EquipmentModelResponse' ApiResponseEquipmentCategoryResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/EquipmentCategoryResponse' EquipmentCategoryResponse: type: object properties: id: type: integer description: 장비 카테고리 ID format: int64 example: 1 name: type: string description: 장비 카테고리 이름 example: 카메라 englishCode: type: string description: 장비 카테고리 영어 코드 example: CAMERA maxRentalCount: type: integer description: 최대 대여 가능 개수 format: int32 example: 2 ApiResponseListEquipmentCountByCategoryResponse: type: object properties: status: type: string message: type: string data: type: array items: $ref: '#/components/schemas/EquipmentCountByCategoryResponse' EquipmentCountByCategoryResponse: type: object properties: id: type: integer description: 장비 카테고리 ID format: int64 example: 1 name: type: string description: 장비 카테고리 이름 example: 카메라 englishCode: type: string description: 영문 약자 example: SON totalCount: type: integer description: 해당 카테고리의 전체 장비 수 format: int32 example: 20 available: type: integer description: 대여 가능한 장비 수 format: int32 example: 15 maxRentalCount: type: integer description: 사용자당 최대 대여 가능 수량 format: int32 example: 2 brokenCount: type: integer description: 파손된 장비 수 format: int32 example: 3 ApiResponseCommentListResponse: type: object properties: status: type: string message: type: string data: $ref: '#/components/schemas/CommentListResponse' CommentListResponse: type: object properties: comments: type: array items: $ref: '#/components/schemas/CommentResponse' pageable: $ref: '#/components/schemas/PageableInfo' CommentResponse: type: object properties: id: type: integer format: int64 type: type: string enum: - BOARD - NOTICE - INQUIRY targetId: type: integer format: int64 content: type: string parentCommentId: type: integer format: int64 author: $ref: '#/components/schemas/ProfileResponse' createdAt: type: string format: date-time updatedAt: type: string format: date-time ApiResponseListClassroomResponse: type: object properties: status: type: string message: type: string data: type: array items: $ref: '#/components/schemas/ClassroomResponse' ClassroomResponse: type: object properties: id: type: integer format: int64 name: type: string description: type: string attachment: type: string status: type: string example: AVAILABLE, IN_USE, BROKEN, RENTAL_PENDING 중 하나 enum: - AVAILABLE(대여 가능) - IN_USE(대여중) - BROKEN(파손) - RENTAL_PENDING(대여 신청 중) - RETURN_PENDING(반납 처리중) startTime: type: string description: 운영 시작 시간 example: 09:00 endTime: type: string description: 운영 종료 시간 example: '18:00' ApiResponseListScheduleResponse: type: object properties: status: type: string message: type: string data: type: array items: $ref: '#/components/schemas/ScheduleResponse' ScheduleResponse: type: object properties: type: type: string example: HOLIDAY, SPECIAL_LECTURE, LECTURE, RENTAL 중 하나. enum: - HOLIDAY - SPECIAL_LECTURE - LECTURE - RENTAL day: type: integer description: 요일을 나타냄. 1, 2, 3, 4, 5 중 하나. format: int32 date: type: string format: date startAt: type: string description: 일정 시작 시간 example: '13:00' endAt: type: string description: 일정 종료 시간 example: '13:00' color: type: string content: type: string description: 강의실의 경우, 이 값은 항상 대여 됨 입니다. id: type: integer description: 대여 취소할때는 이 값을 보내면 됩니다. format: int64 InquiryResponse: type: object properties: id: type: integer description: 문의 ID format: int64 example: 1 title: type: string description: 문의 제목 example: 장비 대여 관련 문의 content: type: string description: 문의 내용 example: 장비 대여 예약이 되지 않습니다. attachmentUrl: type: string description: 첨부파일 URL example: https://example.com/image.png type: type: string description: 문의 유형 example: RENTAL enum: - RENTAL - RETURN - SYSTEM_ERROR - EQUIPMENT_BROKEN - PENALTY - ETC status: type: string description: 답변 상태 example: WAITING enum: - NOT_ANSWERED - ANSWERED createdAt: type: string description: 문의 작성 시간 (ISO-8601) example: '2025-06-02T15:34:21' PageInquiryResponse: type: object properties: totalPages: type: integer format: int32 totalElements: type: integer format: int64 size: type: integer format: int32 content: type: array items: $ref: '#/components/schemas/InquiryResponse' number: type: integer format: int32 sort: type: array items: $ref: '#/components/schemas/SortObject' first: type: boolean last: type: boolean numberOfElements: type: integer format: int32 pageable: $ref: '#/components/schemas/PageableObject' empty: type: boolean PageableObject: type: object properties: offset: type: integer format: int64 sort: type: array items: $ref: '#/components/schemas/SortObject' pageNumber: type: integer format: int32 pageSize: type: integer format: int32 paged: type: boolean unpaged: type: boolean SortObject: type: object properties: direction: type: string nullHandling: type: string ascending: type: boolean property: type: string ignoreCase: type: boolean