diff --git a/components/schemas/campus-map/BuildingDetailResponse.yaml b/components/schemas/campus-map/BuildingDetailResponse.yaml new file mode 100644 index 0000000..3c81be0 --- /dev/null +++ b/components/schemas/campus-map/BuildingDetailResponse.yaml @@ -0,0 +1,154 @@ +type: object +description: 캠퍼스맵 건물 상세 조회 응답의 data +required: + - id + - name + - address + - latitude + - longitude + - imageUrl + - operatingHours + - campusPlaces +properties: + id: + type: integer + format: int64 + description: 건물 ID + example: 4 + name: + type: string + description: 건물명 + example: 학생회관 + address: + type: string + description: 건물 주소 + example: 서울특별시 광진구 능동로 120 + latitude: + type: number + format: double + description: 건물 위도 + example: 37.541823 + longitude: + type: number + format: double + description: 건물 경도 + example: 127.0779007 + imageUrl: + type: string + format: uri + nullable: true + description: 건물 이미지 URL. 등록된 이미지가 없으면 null + example: https://placehold.co/1200x800/png?text=Student+Center + operatingHours: + type: array + description: 기간·요일별 전체 운영시간. 배열 순서와 관계없이 isCurrent가 true인 항목이 현재 적용되는 운영시간 + items: + $ref: ./OperatingHoursDto.yaml + campusPlaces: + type: array + description: 건물에 등록된 주요시설 및 편의시설 목록 + items: + $ref: ./CampusPlaceDetail.yaml +example: + id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + imageUrl: https://placehold.co/1200x800/png?text=Student+Center + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + campusPlaces: + - id: 402 + name: 학생회관 복사실 + category: printer + categoryKorName: 프린터 + imageUrl: https://placehold.co/1200x800/png?text=Student+Center + locationType: INDOOR + floor: 1F + locationDetail: 학생회관 1층 + quantity: 2 + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + - id: 406 + name: 신한은행 + category: bank_atm + categoryKorName: 은행·ATM + imageUrl: https://placehold.co/1200x800/png?text=Student+Center + locationType: INDOOR + floor: 1F + locationDetail: 학생회관 1층 + quantity: null + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null diff --git a/components/schemas/campus-map/BuildingListResponse.yaml b/components/schemas/campus-map/BuildingListResponse.yaml new file mode 100644 index 0000000..d01ca39 --- /dev/null +++ b/components/schemas/campus-map/BuildingListResponse.yaml @@ -0,0 +1,48 @@ +type: object +description: 캠퍼스맵 전체 건물 목록 조회 응답의 data +required: + - buildings +properties: + buildings: + type: array + description: 캠퍼스에 등록된 건물 목록 + items: + $ref: ./BuildingOverview.yaml +example: + buildings: + - id: 1 + name: 행정관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5444801 + longitude: 127.0748518 + displayOrder: 1 + - id: 2 + name: 경영관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5443474 + longitude: 127.0761119 + displayOrder: 1 + - id: 3 + name: 법학관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5417036 + longitude: 127.0750767 + displayOrder: 1 + - id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + displayOrder: 2 + - id: 10 + name: 상허기념도서관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5420474 + longitude: 127.0738384 + displayOrder: 2 + - id: 20 + name: 과학관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541467 + longitude: 127.0805824 + displayOrder: 3 \ No newline at end of file diff --git a/components/schemas/campus-map/BuildingOverview.yaml b/components/schemas/campus-map/BuildingOverview.yaml new file mode 100644 index 0000000..e5e1f67 --- /dev/null +++ b/components/schemas/campus-map/BuildingOverview.yaml @@ -0,0 +1,40 @@ +title: BuildingOverview +type: object +description: 캠퍼스맵 전체 건물 목록에 표시되는 건물 정보 +required: + - id + - name + - address + - latitude + - longitude + - displayOrder +properties: + id: + type: integer + format: int64 + description: 건물 ID + example: 35 + name: + type: string + description: 건물명 + example: 학생회관 + address: + type: string + description: 건물 주소 + example: 서울특별시 광진구 능동로 120 + latitude: + type: number + format: double + description: 건물 위도 + example: 37.541875 + longitude: + type: number + format: double + description: 건물 경도 + example: 127.077966 + displayOrder: + type: integer + format: int32 + nullable: true + description: 건물 노출 우선순위. 값이 없으면 우선순위가 지정된 건물 다음에 노출됩니다. + example: 1 \ No newline at end of file diff --git a/components/schemas/campus-map/BuildingSummary.yaml b/components/schemas/campus-map/BuildingSummary.yaml new file mode 100644 index 0000000..562e7ab --- /dev/null +++ b/components/schemas/campus-map/BuildingSummary.yaml @@ -0,0 +1,46 @@ +type: object +description: 캠퍼스맵 건물 요약 정보 +required: + - id + - name + - address + - latitude + - longitude + - imageUrl +properties: + id: + type: integer + format: int64 + description: 건물 ID + example: 4 + name: + type: string + description: 건물명 + example: 학생회관 + address: + type: string + description: 건물 주소 + example: 서울특별시 광진구 능동로 120 + latitude: + type: number + format: double + description: 건물 위도 + example: 37.541823 + longitude: + type: number + format: double + description: 건물 경도 + example: 127.0779007 + imageUrl: + type: string + format: uri + nullable: true + description: 건물 이미지 URL. 등록된 이미지가 없으면 null + example: https://cdn.example.com/campus-map/student-center.jpg +example: + id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + imageUrl: https://cdn.example.com/campus-map/student-center.jpg \ No newline at end of file diff --git a/components/schemas/campus-map/CampusMapSearchResponse.yaml b/components/schemas/campus-map/CampusMapSearchResponse.yaml new file mode 100644 index 0000000..0d333ed --- /dev/null +++ b/components/schemas/campus-map/CampusMapSearchResponse.yaml @@ -0,0 +1,67 @@ +type: object +description: 캠퍼스맵 건물 및 시설 통합 검색 응답의 data +required: + - buildings + - campusPlaces +properties: + buildings: + type: array + description: 검색어와 일치하는 건물 목록 + items: + $ref: ./BuildingSummary.yaml + campusPlaces: + type: array + description: 검색어와 일치하는 캠퍼스 시설 목록 + items: + $ref: ./CampusPlaceItem.yaml +example: + buildings: + - id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + imageUrl: https://cdn.example.com/campus-map/student-center.jpg + campusPlaces: + - id: 401 + name: 학생회관 식당 + category: restaurant + categoryKorName: 식당 + imageUrl: https://cdn.example.com/campus-map/student-center.jpg + locationType: INDOOR + floor: 1F + locationDetail: 학생회관 1층 + quantity: null + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '20:00' + isCurrent: true + - period: SEMESTER + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + building: + id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + imageUrl: https://cdn.example.com/campus-map/student-center.jpg \ No newline at end of file diff --git a/components/schemas/campus-map/CampusPlaceDetail.yaml b/components/schemas/campus-map/CampusPlaceDetail.yaml new file mode 100644 index 0000000..ef45ac8 --- /dev/null +++ b/components/schemas/campus-map/CampusPlaceDetail.yaml @@ -0,0 +1,131 @@ +type: object +description: 건물 상세 화면에 포함되는 시설 정보 +required: + - id + - name + - category + - categoryKorName + - imageUrl + - locationType + - floor + - locationDetail + - quantity + - operatingHours + - externalUrl +properties: + id: + type: integer + format: int64 + description: 시설 ID + example: 301 + name: + type: string + description: 시설명 + example: 법학관 인쇄소 + category: + type: string + description: |- + 시설 카테고리 코드입니다. 건물 상세 조회에서는 시설 필터에 노출되는 7종 외에 내부 카테고리도 반환될 수 있습니다. + - `cafe`: 카페 + - `restaurant`: 식당 + - `printer`: 프린터 + - `smoking_booth`: 흡연부스 + - `convenience_store`: 편의점 + - `lounge`: 휴게실 + - `kcube`: K-Cube + - `bank_atm`: 은행·ATM + - `post_office`: 우체국 + enum: + - cafe + - restaurant + - printer + - smoking_booth + - convenience_store + - lounge + - kcube + - bank_atm + - post_office + example: printer + categoryKorName: + type: string + description: 클라이언트 화면에 표시할 카테고리명 + example: 프린터 + imageUrl: + type: string + format: uri + nullable: true + description: 시설이 속한 건물의 이미지 URL. 건물 이미지가 없으면 null + example: https://placehold.co/1200x800/png?text=Law+Building + locationType: + type: string + description: |- + 시설 위치 유형입니다. + - `INDOOR`: 건물 내부 + - `OUTDOOR`: 건물 외부 + enum: + - INDOOR + - OUTDOOR + example: INDOOR + floor: + type: string + description: 시설이 위치한 층. 외부 시설은 OUTDOOR + example: B1 + locationDetail: + type: string + nullable: true + description: 시설의 상세 위치 + example: 법학관 지하 1층 + quantity: + type: integer + format: int32 + minimum: 1 + nullable: true + description: 동일 위치에 있는 시설 수량. 수량 개념이 없으면 null + example: 1 + operatingHours: + type: array + description: 기간·요일별 전체 운영시간. 배열 순서와 관계없이 isCurrent가 true인 항목이 현재 적용되는 운영시간 + items: + $ref: ./OperatingHoursDto.yaml + externalUrl: + type: string + format: uri + nullable: true + description: 시설 관련 외부 페이지 URL. 연결할 페이지가 없으면 null + example: https://wein.konkuk.ac.kr/ +example: + id: 301 + name: 법학관 인쇄소 + category: printer + categoryKorName: 프린터 + imageUrl: https://placehold.co/1200x800/png?text=Law+Building + locationType: INDOOR + floor: B1 + locationDetail: 법학관 지하 1층 + quantity: 1 + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null \ No newline at end of file diff --git a/components/schemas/campus-map/CampusPlaceItem.yaml b/components/schemas/campus-map/CampusPlaceItem.yaml new file mode 100644 index 0000000..6e8fdfe --- /dev/null +++ b/components/schemas/campus-map/CampusPlaceItem.yaml @@ -0,0 +1,137 @@ +type: object +description: 캠퍼스 건물 내부 또는 외부에 있는 시설 정보 +required: + - id + - name + - category + - categoryKorName + - imageUrl + - locationType + - floor + - locationDetail + - quantity + - operatingHours + - externalUrl + - building +properties: + id: + type: integer + format: int64 + description: 시설 ID + example: 301 + name: + type: string + description: 시설명 + example: 법학관 인쇄소 + category: + type: string + description: |- + 카테고리 목록 조회 API에서 제공하는 시설 필터 코드입니다. + - `cafe`: 카페 + - `restaurant`: 식당 + - `printer`: 프린터 + - `smoking_booth`: 흡연부스 + - `convenience_store`: 편의점 + - `lounge`: 휴게실 + - `kcube`: K-Cube + enum: + - cafe + - restaurant + - printer + - smoking_booth + - convenience_store + - lounge + - kcube + example: printer + categoryKorName: + type: string + description: 카테고리 표시명 + example: 프린터 + imageUrl: + type: string + format: uri + nullable: true + description: 시설이 속한 건물의 이미지 URL. 건물 이미지가 없으면 null + example: https://placehold.co/1200x800/png?text=Law+Building + locationType: + type: string + description: |- + 시설 위치 유형입니다. + - `INDOOR`: 건물 내부 + - `OUTDOOR`: 건물 외부 + enum: + - INDOOR + - OUTDOOR + example: INDOOR + floor: + type: string + description: 시설이 위치한 층. 외부 시설은 OUTDOOR + example: B1 + locationDetail: + type: string + nullable: true + description: 시설의 상세 위치 + example: 법학관 지하 1층 + quantity: + type: integer + format: int32 + minimum: 1 + nullable: true + description: 동일 위치에 있는 시설 수량. 수량 개념이 없으면 null + example: 1 + operatingHours: + type: array + description: 기간·요일별 전체 운영시간. 배열 순서와 관계없이 isCurrent가 true인 항목이 현재 적용되는 운영시간 + items: + $ref: ./OperatingHoursDto.yaml + externalUrl: + type: string + format: uri + nullable: true + description: 시설 관련 외부 페이지 URL. 연결할 페이지가 없으면 null + example: https://wein.konkuk.ac.kr/ + building: + $ref: ./BuildingSummary.yaml +example: + id: 301 + name: 법학관 인쇄소 + category: printer + categoryKorName: 프린터 + imageUrl: https://placehold.co/1200x800/png?text=Law+Building + locationType: INDOOR + floor: B1 + locationDetail: 법학관 지하 1층 + quantity: 1 + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + building: + id: 3 + name: 법학관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5417036 + longitude: 127.0750767 + imageUrl: https://cdn.example.com/campus-map/law-building.jpg \ No newline at end of file diff --git a/components/schemas/campus-map/CampusPlaceListResponse.yaml b/components/schemas/campus-map/CampusPlaceListResponse.yaml new file mode 100644 index 0000000..3fe3dc2 --- /dev/null +++ b/components/schemas/campus-map/CampusPlaceListResponse.yaml @@ -0,0 +1,96 @@ +type: object +description: 카테고리 기반 시설 목록 조회 응답의 data +required: + - campusPlaces +properties: + campusPlaces: + type: array + description: 요청한 카테고리에 해당하는 시설 목록 + items: + $ref: ./CampusPlaceItem.yaml +example: + campusPlaces: + - id: 301 + name: 법학관 인쇄소 + category: printer + categoryKorName: 프린터 + imageUrl: https://placehold.co/1200x800/png?text=Law+Building + locationType: INDOOR + floor: B1 + locationDetail: 법학관 지하 1층 + quantity: 1 + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + building: + id: 3 + name: 법학관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5417036 + longitude: 127.0750767 + imageUrl: https://cdn.example.com/campus-map/law-building.jpg + - id: 205 + name: 경영관 흡연부스 + category: smoking_booth + categoryKorName: 흡연부스 + imageUrl: https://placehold.co/1200x800/png?text=Business+Building + locationType: OUTDOOR + floor: OUTDOOR + locationDetail: 경영관 CU 앞 + quantity: 1 + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: OPEN_24_HOURS + opensAt: null + closesAt: null + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: OPEN_24_HOURS + opensAt: null + closesAt: null + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: OPEN_24_HOURS + opensAt: null + closesAt: null + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: OPEN_24_HOURS + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + building: + id: 2 + name: 경영관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5443474 + longitude: 127.0761119 + imageUrl: https://cdn.example.com/campus-map/business-building.jpg diff --git a/components/schemas/campus-map/CategoryDto.yaml b/components/schemas/campus-map/CategoryDto.yaml new file mode 100644 index 0000000..7227b68 --- /dev/null +++ b/components/schemas/campus-map/CategoryDto.yaml @@ -0,0 +1,37 @@ +type: object +description: 캠퍼스맵 시설 카테고리 정보 +required: + - name + - korName + - displayOrder +properties: + name: + type: string + description: |- + 시설 목록 조회 요청에 사용하는 카테고리 코드입니다. + - `cafe`: 카페 + - `restaurant`: 식당 + - `printer`: 프린터 + - `smoking_booth`: 흡연부스 + - `convenience_store`: 편의점 + - `lounge`: 휴게실 + - `kcube`: K-Cube + enum: + - cafe + - restaurant + - printer + - smoking_booth + - convenience_store + - lounge + - kcube + example: convenience_store + korName: + type: string + description: 클라이언트 화면에 표시할 카테고리 한글명 + example: 편의점 + displayOrder: + type: integer + format: int32 + minimum: 1 + description: 카테고리 화면 노출 순서 + example: 1 diff --git a/components/schemas/campus-map/CategoryListResponse.yaml b/components/schemas/campus-map/CategoryListResponse.yaml new file mode 100644 index 0000000..720b323 --- /dev/null +++ b/components/schemas/campus-map/CategoryListResponse.yaml @@ -0,0 +1,33 @@ +type: object +description: 캠퍼스맵 카테고리 목록 조회 응답의 data +required: + - categories +properties: + categories: + type: array + description: 화면 노출 순서로 정렬된 캠퍼스맵 카테고리 목록 + items: + $ref: ./CategoryDto.yaml +example: + categories: + - name: cafe + korName: 카페 + displayOrder: 1 + - name: restaurant + korName: 식당 + displayOrder: 2 + - name: printer + korName: 프린터 + displayOrder: 3 + - name: smoking_booth + korName: 흡연부스 + displayOrder: 4 + - name: convenience_store + korName: 편의점 + displayOrder: 5 + - name: lounge + korName: 휴게실 + displayOrder: 6 + - name: kcube + korName: K-Cube + displayOrder: 7 \ No newline at end of file diff --git a/components/schemas/campus-map/OperatingHoursDto.yaml b/components/schemas/campus-map/OperatingHoursDto.yaml new file mode 100644 index 0000000..2194389 --- /dev/null +++ b/components/schemas/campus-map/OperatingHoursDto.yaml @@ -0,0 +1,63 @@ +type: object +description: 시설 또는 건물에 등록된 기간·요일별 운영시간 +example: + period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true +required: + - period + - dayGroup + - status + - opensAt + - closesAt + - isCurrent +properties: + period: + type: string + description: |- + 운영 기간 구분입니다. + - `SEMESTER`: 학기 중 + - `VACATION`: 방학 중 + enum: + - SEMESTER + - VACATION + example: VACATION + dayGroup: + type: string + description: |- + 운영 요일 구분입니다. + - `WEEKDAY`: 주중(월요일~금요일) + - `WEEKEND`: 주말(토요일~일요일) + enum: + - WEEKDAY + - WEEKEND + example: WEEKDAY + status: + type: string + description: |- + 해당 운영시간의 제공 상태입니다. + - `SCHEDULED`: 정해진 운영시간이 있으며 opensAt과 closesAt을 함께 사용 + - `OPEN_24_HOURS`: 24시간 운영하며 opensAt과 closesAt은 null + - `UNKNOWN`: 운영시간 정보가 없으며 opensAt과 closesAt은 null + enum: + - SCHEDULED + - OPEN_24_HOURS + - UNKNOWN + example: SCHEDULED + opensAt: + type: string + nullable: true + description: '운영 시작 시각(HH:mm). SCHEDULED가 아니면 null' + example: '09:00' + closesAt: + type: string + nullable: true + description: '운영 종료 시각(HH:mm). SCHEDULED가 아니면 null' + example: '18:00' + isCurrent: + type: boolean + description: 서버가 현재 날짜를 기준으로 판단한 운영시간인지 여부 + example: true diff --git a/openapi.yaml b/openapi.yaml index 3de9ea0..42ed5cd 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -993,7 +993,7 @@ paths: value: title: 서버 점검 안내 body: 오늘 23시부터 24시까지 서버 점검이 진행됩니다. - url: https://kuring.com/notices/1234 + url: 'https://kuring.com/notices/1234' adminPassword: admin-password responses: '200': @@ -1030,8 +1030,8 @@ paths: value: category: bachelor subject: 테스트 공지입니다 - noticeId: "1234" - articleId: "1234" + noticeId: '1234' + articleId: '1234' responses: '200': description: OK @@ -2086,3 +2086,573 @@ paths: x-stoplight: id: 6qd89rl96a1he description: 사용자가 동아리 구독을 해제합니다. path의 clubId로 대상 동아리를 지정합니다. + /api/v2/maps/categories: + get: + summary: 캠퍼스맵 카테고리 목록 조회 + tags: + - Draft + responses: + '200': + description: 캠퍼스맵 카테고리 목록 조회 성공 + content: + application/json: + schema: + allOf: + - $ref: ./components/schemas/common/BaseResponse.yaml + - type: object + required: + - data + properties: + data: + $ref: ./components/schemas/campus-map/CategoryListResponse.yaml + examples: + Success: + value: + code: 200 + message: 장소 카테고리 목록 조회에 성공하였습니다 + data: + categories: + - name: cafe + korName: 카페 + displayOrder: 1 + - name: restaurant + korName: 식당 + displayOrder: 2 + - name: printer + korName: 프린터 + displayOrder: 3 + - name: smoking_booth + korName: 흡연부스 + displayOrder: 4 + - name: convenience_store + korName: 편의점 + displayOrder: 5 + - name: lounge + korName: 휴게실 + displayOrder: 6 + - name: kcube + korName: K-Cube + displayOrder: 7 + operationId: getCampusMapCategories + x-stoplight: + id: nwzexd1chhmmm + description: |- + 캠퍼스맵에서 시설을 필터링할 때 사용하는 카테고리 목록을 조회합니다. + 카테고리는 서버에서 관리하며, 클라이언트는 응답으로 전달된 카테고리 값을 사용합니다. + /api/v2/maps/buildings: + get: + summary: 캠퍼스맵 전체 건물 목록 조회 + tags: + - Draft + responses: + '200': + description: 캠퍼스맵 전체 건물 목록 조회 성공 + content: + application/json: + schema: + allOf: + - $ref: ./components/schemas/common/BaseResponse.yaml + - type: object + required: + - data + properties: + data: + $ref: ./components/schemas/campus-map/BuildingListResponse.yaml + examples: + Success: + value: + code: 200 + message: 캠퍼스 건물 목록 조회에 성공하였습니다 + data: + buildings: + - id: 1 + name: 행정관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5444801 + longitude: 127.0748518 + displayOrder: 1 + - id: 2 + name: 경영관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5443474 + longitude: 127.0761119 + displayOrder: 1 + - id: 3 + name: 법학관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5417036 + longitude: 127.0750767 + displayOrder: 1 + - id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + displayOrder: 2 + - id: 10 + name: 상허기념도서관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5420474 + longitude: 127.0738384 + displayOrder: 2 + - id: 20 + name: 과학관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541467 + longitude: 127.0805824 + displayOrder: 3 + operationId: getCampusMapBuildings + x-stoplight: + id: 9ml6ohwg6sodd + description: |- + 캠퍼스맵 초기 화면에 표시할 전체 건물의 요약 정보를 조회합니다. + 건물 상세 정보와 건물 내부 시설 정보는 포함하지 않습니다. + /api/v2/maps/buildings/search: + get: + summary: 캠퍼스맵 건물 및 시설 키워드 검색 + tags: + - Draft + parameters: + - schema: + type: string + example: 학생회관 + minLength: 1 + in: query + name: keyword + required: true + description: 건물명, 주소, 건물 검색 키워드, 시설명 또는 시설 카테고리 검색어 + responses: + '200': + description: 캠퍼스맵 건물 및 시설 키워드 검색 성공 + content: + application/json: + schema: + allOf: + - $ref: ./components/schemas/common/BaseResponse.yaml + - type: object + required: + - data + properties: + data: + $ref: ./components/schemas/campus-map/CampusMapSearchResponse.yaml + examples: + Success: + value: + code: 200 + message: 캠퍼스맵 검색에 성공하였습니다 + data: + buildings: + - id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + imageUrl: https://cdn.example.com/campus-map/student-center.jpg + campusPlaces: + - id: 401 + name: 학생회관 식당 + category: restaurant + categoryKorName: 식당 + imageUrl: https://cdn.example.com/campus-map/student-center.jpg + locationType: INDOOR + floor: 1F + locationDetail: 학생회관 1층 + quantity: null + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '20:00' + isCurrent: true + - period: SEMESTER + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + building: + id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + imageUrl: https://cdn.example.com/campus-map/student-center.jpg + EmptyResult: + value: + code: 200 + message: 캠퍼스맵 검색에 성공하였습니다 + data: + buildings: [] + campusPlaces: [] + '400': + description: 검색어 누락 또는 잘못된 검색어 + content: + application/json: + schema: + $ref: ./components/schemas/common/ErrorResponse.yaml + examples: + MissingKeyword: + value: + isSuccess: false + resultCode: 400 + resultMsg: 필수 파라미터가 없습니다. + BlankKeyword: + value: + isSuccess: false + resultCode: 400 + resultMsg: 파라미터 값 중 잘못된 값이 있습니다. + operationId: searchCampusMap + x-stoplight: + id: 4t1enp1xlx2z9 + description: |- + 입력한 키워드로 건물과 캠퍼스 시설을 함께 검색합니다. + 건물은 건물명, 주소 또는 등록된 건물 검색 키워드를 대상으로 검색합니다. + 시설은 시설명, 카테고리 코드 또는 카테고리 한글명을 대상으로 검색합니다. + /api/v2/maps/campus-places: + get: + summary: 캠퍼스맵 카테고리 기반 시설 목록 조회 + tags: + - Draft + parameters: + - name: categories + in: query + required: true + description: 조회할 시설 카테고리 코드 목록 + style: form + explode: false + schema: + type: array + minItems: 1 + items: + type: string + description: |- + 조회할 시설 카테고리 코드입니다. + - `cafe`: 카페 + - `restaurant`: 식당 + - `printer`: 프린터 + - `smoking_booth`: 흡연부스 + - `convenience_store`: 편의점 + - `lounge`: 휴게실 + - `kcube`: K-Cube + enum: + - cafe + - restaurant + - printer + - smoking_booth + - convenience_store + - lounge + - kcube + example: + - printer + - smoking_booth + responses: + '200': + description: 카테고리 기반 시설 목록 조회 성공 + content: + application/json: + schema: + allOf: + - $ref: ./components/schemas/common/BaseResponse.yaml + - type: object + required: + - data + properties: + data: + $ref: ./components/schemas/campus-map/CampusPlaceListResponse.yaml + examples: + Success: + value: + code: 200 + message: 카테고리 기반 시설 목록 조회에 성공하였습니다 + data: + campusPlaces: + - id: 301 + name: 법학관 인쇄소 + category: printer + categoryKorName: 프린터 + imageUrl: 'https://placehold.co/1200x800/png?text=Law+Building' + locationType: INDOOR + floor: B1 + locationDetail: 법학관 지하 1층 + quantity: 1 + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + building: + id: 3 + name: 법학관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5417036 + longitude: 127.0750767 + imageUrl: https://placehold.co/1200x800/png?text=Law+Building + - id: 205 + name: 경영관 흡연부스 + category: smoking_booth + categoryKorName: 흡연부스 + imageUrl: 'https://placehold.co/1200x800/png?text=Business+Building' + locationType: OUTDOOR + floor: OUTDOOR + locationDetail: 경영관 CU 앞 + quantity: 1 + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: OPEN_24_HOURS + opensAt: null + closesAt: null + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: OPEN_24_HOURS + opensAt: null + closesAt: null + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: OPEN_24_HOURS + opensAt: null + closesAt: null + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: OPEN_24_HOURS + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + building: + id: 2 + name: 경영관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.5443474 + longitude: 127.0761119 + imageUrl: https://placehold.co/1200x800/png?text=Business+Building + EmptyResult: + value: + code: 200 + message: 카테고리 기반 시설 목록 조회에 성공하였습니다 + data: + campusPlaces: [] + '400': + description: 시설 카테고리 파라미터 누락 + content: + application/json: + schema: + $ref: ./components/schemas/common/ErrorResponse.yaml + examples: + MissingCategories: + value: + isSuccess: false + resultCode: 400 + resultMsg: 필수 파라미터가 없습니다. + operationId: getCampusPlacesByCategories + x-stoplight: + id: qg6o2s3rf3cyy + description: |- + 선택한 카테고리 중 하나 이상에 해당하는 캠퍼스 시설 목록을 조회합니다. + 여러 카테고리는 쉼표로 구분하며 OR 조건으로 조회합니다. + 각 시설에는 소속 건물과 기간·요일별 전체 운영시간이 포함되며, 현재 적용되는 운영시간은 isCurrent로 구분합니다. + '/api/v2/maps/buildings/{buildingId}': + get: + summary: 캠퍼스맵 건물 상세 조회 + tags: + - Draft + parameters: + - name: buildingId + in: path + required: true + description: 조회할 건물 ID + schema: + type: integer + format: int64 + minimum: 1 + example: 4 + responses: + '200': + description: 캠퍼스맵 건물 상세 조회 성공 + content: + application/json: + schema: + allOf: + - $ref: './components/schemas/common/BaseResponse.yaml' + - type: object + required: + - data + properties: + data: + $ref: './components/schemas/campus-map/BuildingDetailResponse.yaml' + examples: + Success: + value: + code: 200 + message: 캠퍼스 건물 상세 조회에 성공하였습니다 + data: + id: 4 + name: 학생회관 + address: 서울특별시 광진구 능동로 120 + latitude: 37.541823 + longitude: 127.0779007 + imageUrl: https://placehold.co/1200x800/png?text=Student+Center + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + campusPlaces: + - id: 402 + name: 학생회관 복사실 + category: printer + categoryKorName: 프린터 + imageUrl: https://placehold.co/1200x800/png?text=Student+Center + locationType: INDOOR + floor: 1F + locationDetail: 학생회관 1층 + quantity: 2 + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + - id: 406 + name: 신한은행 + category: bank_atm + categoryKorName: 은행·ATM + imageUrl: https://placehold.co/1200x800/png?text=Student+Center + locationType: INDOOR + floor: 1F + locationDetail: 학생회관 1층 + quantity: null + operatingHours: + - period: SEMESTER + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '08:00' + closesAt: '22:00' + isCurrent: false + - period: SEMESTER + dayGroup: WEEKEND + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: false + - period: VACATION + dayGroup: WEEKDAY + status: SCHEDULED + opensAt: '09:00' + closesAt: '18:00' + isCurrent: true + - period: VACATION + dayGroup: WEEKEND + status: UNKNOWN + opensAt: null + closesAt: null + isCurrent: false + externalUrl: null + '400': + description: 건물 ID 형식 오류 + content: + application/json: + schema: + $ref: './components/schemas/common/ErrorResponse.yaml' + examples: + InvalidBuildingId: + value: + isSuccess: false + resultCode: 400 + resultMsg: 파라미터 값 중 잘못된 값이 있습니다. + '404': + description: 건물을 찾을 수 없음 + content: + application/json: + schema: + $ref: './components/schemas/common/BaseResponse.yaml' + examples: + BuildingNotFound: + value: + code: 404 + message: 캠퍼스 건물을 찾을 수 없습니다 + data: null + operationId: getCampusMapBuildingDetail + x-stoplight: + id: 0pp8wii0i7fzx + description: |- + 건물 ID를 기준으로 건물 상세 정보와 건물에 등록된 주요시설 및 편의시설을 조회합니다. + 건물과 시설의 기간·요일별 전체 운영시간을 반환하며, 현재 적용되는 운영시간은 isCurrent가 true입니다.