diff --git a/data/domain/src/main/java/com/ku_stacks/ku_ring/domain/LibraryRoom.kt b/data/domain/src/main/java/com/ku_stacks/ku_ring/domain/LibraryRoom.kt
new file mode 100644
index 000000000..36238cb95
--- /dev/null
+++ b/data/domain/src/main/java/com/ku_stacks/ku_ring/domain/LibraryRoom.kt
@@ -0,0 +1,8 @@
+package com.ku_stacks.ku_ring.domain
+
+data class LibraryRoom(
+ val name: String,
+ val totalSeats: Int,
+ val occupiedSeats: Int,
+ val availableSeats: Int,
+)
diff --git a/data/library/.gitignore b/data/library/.gitignore
new file mode 100644
index 000000000..42afabfd2
--- /dev/null
+++ b/data/library/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/data/library/build.gradle.kts b/data/library/build.gradle.kts
new file mode 100644
index 000000000..8f88cb49d
--- /dev/null
+++ b/data/library/build.gradle.kts
@@ -0,0 +1,26 @@
+import com.ku_stacks.ku_ring.buildlogic.dsl.setNameSpace
+
+plugins {
+ kuring("feature")
+ kuringPrimitive("retrofit")
+ kuringPrimitive("test")
+}
+
+android {
+ setNameSpace("library")
+ compileSdk = 34
+
+ testOptions {
+ unitTests {
+ isIncludeAndroidResources = true
+ }
+ }
+}
+
+dependencies {
+ implementation(projects.core.util)
+ implementation(projects.data.domain)
+ implementation(projects.data.remote)
+
+ testImplementation(libs.kotlinx.coroutines.test)
+}
\ No newline at end of file
diff --git a/data/library/consumer-rules.pro b/data/library/consumer-rules.pro
new file mode 100644
index 000000000..e69de29bb
diff --git a/data/library/proguard-rules.pro b/data/library/proguard-rules.pro
new file mode 100644
index 000000000..481bb4348
--- /dev/null
+++ b/data/library/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/data/library/src/main/AndroidManifest.xml b/data/library/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..a5918e68a
--- /dev/null
+++ b/data/library/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/data/library/src/main/java/com/ku_stacks/ku_ring/library/di/RepositoryModule.kt b/data/library/src/main/java/com/ku_stacks/ku_ring/library/di/RepositoryModule.kt
new file mode 100644
index 000000000..de5c3e636
--- /dev/null
+++ b/data/library/src/main/java/com/ku_stacks/ku_ring/library/di/RepositoryModule.kt
@@ -0,0 +1,18 @@
+package com.ku_stacks.ku_ring.library.di
+
+import com.ku_stacks.ku_ring.library.repository.LibraryRepository
+import com.ku_stacks.ku_ring.library.repository.LibraryRepositoryImpl
+import dagger.Binds
+import dagger.Module
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@InstallIn(SingletonComponent::class)
+@Module
+abstract class RepositoryModule {
+ @Binds
+ @Singleton
+ abstract fun provideLibraryRepository(repositoryImpl: LibraryRepositoryImpl): LibraryRepository
+
+}
\ No newline at end of file
diff --git a/data/library/src/main/java/com/ku_stacks/ku_ring/library/mapper/ResponseToDomain.kt b/data/library/src/main/java/com/ku_stacks/ku_ring/library/mapper/ResponseToDomain.kt
new file mode 100644
index 000000000..c3ae8f031
--- /dev/null
+++ b/data/library/src/main/java/com/ku_stacks/ku_ring/library/mapper/ResponseToDomain.kt
@@ -0,0 +1,15 @@
+package com.ku_stacks.ku_ring.library.mapper
+
+import com.ku_stacks.ku_ring.domain.LibraryRoom
+import com.ku_stacks.ku_ring.remote.library.response.LibrarySeatResponse
+
+fun LibrarySeatResponse.toLibraryAreaList(): List {
+ return data.libraryRooms.map {
+ LibraryRoom(
+ name = it.roomName,
+ totalSeats = it.seats.total,
+ availableSeats = it.seats.available,
+ occupiedSeats = it.seats.occupied
+ )
+ }
+}
\ No newline at end of file
diff --git a/data/library/src/main/java/com/ku_stacks/ku_ring/library/repository/LibraryRepository.kt b/data/library/src/main/java/com/ku_stacks/ku_ring/library/repository/LibraryRepository.kt
new file mode 100644
index 000000000..09f230295
--- /dev/null
+++ b/data/library/src/main/java/com/ku_stacks/ku_ring/library/repository/LibraryRepository.kt
@@ -0,0 +1,7 @@
+package com.ku_stacks.ku_ring.library.repository
+
+import com.ku_stacks.ku_ring.domain.LibraryRoom
+
+interface LibraryRepository {
+ suspend fun getRemainingSeats(): Result>
+}
\ No newline at end of file
diff --git a/data/library/src/main/java/com/ku_stacks/ku_ring/library/repository/LibraryRepositoryImpl.kt b/data/library/src/main/java/com/ku_stacks/ku_ring/library/repository/LibraryRepositoryImpl.kt
new file mode 100644
index 000000000..aa08a744f
--- /dev/null
+++ b/data/library/src/main/java/com/ku_stacks/ku_ring/library/repository/LibraryRepositoryImpl.kt
@@ -0,0 +1,14 @@
+package com.ku_stacks.ku_ring.library.repository
+
+import com.ku_stacks.ku_ring.domain.LibraryRoom
+import com.ku_stacks.ku_ring.library.mapper.toLibraryAreaList
+import com.ku_stacks.ku_ring.remote.library.LibraryClient
+import javax.inject.Inject
+
+class LibraryRepositoryImpl @Inject constructor(
+ private val libraryClient: LibraryClient
+) : LibraryRepository {
+ override suspend fun getRemainingSeats(): Result> = runCatching {
+ libraryClient.fetchRoomSeatStatus().toLibraryAreaList()
+ }
+}
\ No newline at end of file
diff --git a/data/library/src/test/java/com/ku_stacks/ku_ring/library/LibraryRepositoryTest.kt b/data/library/src/test/java/com/ku_stacks/ku_ring/library/LibraryRepositoryTest.kt
new file mode 100644
index 000000000..a18c1a693
--- /dev/null
+++ b/data/library/src/test/java/com/ku_stacks/ku_ring/library/LibraryRepositoryTest.kt
@@ -0,0 +1,39 @@
+package com.ku_stacks.ku_ring.library
+
+import com.ku_stacks.ku_ring.library.repository.LibraryRepository
+import com.ku_stacks.ku_ring.library.repository.LibraryRepositoryImpl
+import com.ku_stacks.ku_ring.remote.library.LibraryClient
+import junit.framework.TestCase.assertEquals
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.mockito.Mockito
+import org.mockito.kotlin.times
+
+class LibraryRepositoryTest {
+ private lateinit var libraryRepository: LibraryRepository
+ private val client: LibraryClient = Mockito.mock(LibraryClient::class.java)
+
+ @Before
+ fun setup() {
+ libraryRepository = LibraryRepositoryImpl(client)
+ }
+
+ @Test
+ fun `get Library Seat Status From Remote Test`() = runTest {
+ val mockLibraryStatus = LibraryTestUtil.mockLibrarySeatResponse()
+
+ Mockito.`when`(client.fetchRoomSeatStatus()).thenReturn(mockLibraryStatus)
+
+ libraryRepository.getRemainingSeats().onSuccess { mockResult ->
+ val expectedResult = LibraryTestUtil.mockLibraryRoomList()
+
+ Mockito.verify(
+ client,
+ times(1)
+ ).fetchRoomSeatStatus()
+
+ assertEquals(mockResult, expectedResult)
+ }
+ }
+}
\ No newline at end of file
diff --git a/data/library/src/test/java/com/ku_stacks/ku_ring/library/LibraryTestUtil.kt b/data/library/src/test/java/com/ku_stacks/ku_ring/library/LibraryTestUtil.kt
new file mode 100644
index 000000000..c504d49d3
--- /dev/null
+++ b/data/library/src/test/java/com/ku_stacks/ku_ring/library/LibraryTestUtil.kt
@@ -0,0 +1,57 @@
+package com.ku_stacks.ku_ring.library
+
+import com.ku_stacks.ku_ring.domain.LibraryRoom
+import com.ku_stacks.ku_ring.remote.library.response.LibraryRoomBranchResponse
+import com.ku_stacks.ku_ring.remote.library.response.LibraryRoomListResponse
+import com.ku_stacks.ku_ring.remote.library.response.LibraryRoomResponse
+import com.ku_stacks.ku_ring.remote.library.response.LibraryRoomSeatResponse
+import com.ku_stacks.ku_ring.remote.library.response.LibraryRoomTypeResponse
+import com.ku_stacks.ku_ring.remote.library.response.LibrarySeatResponse
+
+object LibraryTestUtil {
+ fun mockLibrarySeatResponse() = LibrarySeatResponse(
+ success = true,
+ code = "success.retrieved",
+ message = "조회되었습니다.",
+ data = LibraryRoomListResponse(
+ resultCount = 1,
+ libraryRooms = listOf(
+ LibraryRoomResponse(
+ id = 102,
+ roomName = "제 1 열람실 (A구역)",
+ roomType = LibraryRoomTypeResponse(
+ id = 1,
+ roomName = "열람실",
+ sortOrder = 1
+ ),
+ awaitable = true,
+ isChargeable = true,
+ branch = LibraryRoomBranchResponse(
+ id = 1,
+ roomBranchName = "상허기념도서관",
+ alias = "상허",
+ libraryCode = "211004",
+ sortOrder = 1
+ ),
+ unableMessage = null,
+ seats = LibraryRoomSeatResponse(
+ total = 219,
+ occupied = 82,
+ waiting = 0,
+ available = 137
+ )
+ )
+ )
+ )
+ )
+
+
+ fun mockLibraryRoomList() = listOf(
+ LibraryRoom(
+ name = "제 1 열람실 (A구역)",
+ totalSeats = 219,
+ occupiedSeats = 82,
+ availableSeats = 137
+ )
+ )
+}
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/LibraryClient.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/LibraryClient.kt
new file mode 100644
index 000000000..56988c944
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/LibraryClient.kt
@@ -0,0 +1,14 @@
+package com.ku_stacks.ku_ring.remote.library
+
+import com.ku_stacks.ku_ring.remote.library.request.LibrarySeatRequest
+import com.ku_stacks.ku_ring.remote.library.response.LibrarySeatResponse
+import javax.inject.Inject
+
+class LibraryClient @Inject constructor(private val libraryService: LibraryService) {
+
+ suspend fun fetchRoomSeatStatus(): LibrarySeatResponse = libraryService.fetchLibrarySeatStatus(
+ methodCode = LibrarySeatRequest.METHOD_CODE,
+ roomTypeId = LibrarySeatRequest.ROOM_TYPE_ID,
+ branchTypeId = LibrarySeatRequest.BRANCH_TYPE_ID,
+ )
+}
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/LibraryService.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/LibraryService.kt
new file mode 100644
index 000000000..c7126d806
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/LibraryService.kt
@@ -0,0 +1,14 @@
+package com.ku_stacks.ku_ring.remote.library
+
+import com.ku_stacks.ku_ring.remote.library.response.LibrarySeatResponse
+import retrofit2.http.GET
+import retrofit2.http.Query
+
+interface LibraryService {
+ @GET("1/seat-rooms")
+ suspend fun fetchLibrarySeatStatus(
+ @Query("smufMethodCode") methodCode: String,
+ @Query("roomTypeId") roomTypeId: Int,
+ @Query("branchTypeId") branchTypeId: Int,
+ ): LibrarySeatResponse
+}
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/di/LibraryModule.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/di/LibraryModule.kt
new file mode 100644
index 000000000..98d6ac864
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/di/LibraryModule.kt
@@ -0,0 +1,26 @@
+package com.ku_stacks.ku_ring.remote.library.di
+
+import com.ku_stacks.ku_ring.remote.library.LibraryClient
+import com.ku_stacks.ku_ring.remote.library.LibraryService
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import retrofit2.Retrofit
+import javax.inject.Named
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object LibraryModule {
+ @Provides
+ @Singleton
+ fun provideLibraryService(@Named("Library") retrofit: Retrofit): LibraryService
+ = retrofit.create(LibraryService::class.java)
+
+ @Provides
+ @Singleton
+ fun provideLibraryClient(libraryService: LibraryService): LibraryClient
+ = LibraryClient(libraryService)
+
+}
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/request/LibrarySeatRequest.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/request/LibrarySeatRequest.kt
new file mode 100644
index 000000000..01469ecae
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/request/LibrarySeatRequest.kt
@@ -0,0 +1,7 @@
+package com.ku_stacks.ku_ring.remote.library.request
+
+object LibrarySeatRequest {
+ const val METHOD_CODE: String = "PC"
+ const val ROOM_TYPE_ID = 4
+ const val BRANCH_TYPE_ID: Int = 1
+}
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomBranchResponse.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomBranchResponse.kt
new file mode 100644
index 000000000..f85b583eb
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomBranchResponse.kt
@@ -0,0 +1,16 @@
+package com.ku_stacks.ku_ring.remote.library.response
+
+import com.google.gson.annotations.SerializedName
+
+data class LibraryRoomBranchResponse (
+ @SerializedName("id")
+ val id: Int,
+ @SerializedName("name")
+ val roomBranchName: String,
+ @SerializedName("alias")
+ val alias: String,
+ @SerializedName("libraryCode")
+ val libraryCode: String,
+ @SerializedName("sortOrder")
+ val sortOrder: Int,
+)
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomListResponse.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomListResponse.kt
new file mode 100644
index 000000000..3d4696f78
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomListResponse.kt
@@ -0,0 +1,10 @@
+package com.ku_stacks.ku_ring.remote.library.response
+
+import com.google.gson.annotations.SerializedName
+
+data class LibraryRoomListResponse(
+ @SerializedName(value = "totalCount")
+ val resultCount: Int,
+ @SerializedName(value = "list")
+ val libraryRooms: List,
+)
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomResponse.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomResponse.kt
new file mode 100644
index 000000000..2b7ec27c0
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomResponse.kt
@@ -0,0 +1,22 @@
+package com.ku_stacks.ku_ring.remote.library.response
+
+import com.google.gson.annotations.SerializedName
+
+data class LibraryRoomResponse(
+ @SerializedName("id")
+ val id: Int,
+ @SerializedName("name")
+ val roomName: String,
+ @SerializedName("roomType")
+ val roomType: LibraryRoomTypeResponse,
+ @SerializedName("awaitable")
+ val awaitable: Boolean,
+ @SerializedName("isChargeable")
+ val isChargeable: Boolean,
+ @SerializedName("branch")
+ val branch: LibraryRoomBranchResponse,
+ @SerializedName("unableMessage")
+ val unableMessage: String?,
+ @SerializedName("seats")
+ val seats: LibraryRoomSeatResponse,
+)
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomSeatResponse.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomSeatResponse.kt
new file mode 100644
index 000000000..fb2f00d23
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomSeatResponse.kt
@@ -0,0 +1,14 @@
+package com.ku_stacks.ku_ring.remote.library.response
+
+import com.google.gson.annotations.SerializedName
+
+data class LibraryRoomSeatResponse(
+ @SerializedName("total")
+ val total: Int,
+ @SerializedName("occupied")
+ val occupied: Int,
+ @SerializedName("waiting")
+ val waiting: Int,
+ @SerializedName("available")
+ val available: Int,
+)
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomTypeResponse.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomTypeResponse.kt
new file mode 100644
index 000000000..b7439a169
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibraryRoomTypeResponse.kt
@@ -0,0 +1,12 @@
+package com.ku_stacks.ku_ring.remote.library.response
+
+import com.google.gson.annotations.SerializedName
+
+data class LibraryRoomTypeResponse(
+ @SerializedName("id")
+ val id: Int,
+ @SerializedName("name")
+ val roomName: String,
+ @SerializedName("sortOrder")
+ val sortOrder: Int,
+)
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibrarySeatResponse.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibrarySeatResponse.kt
new file mode 100644
index 000000000..492ca719a
--- /dev/null
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/library/response/LibrarySeatResponse.kt
@@ -0,0 +1,14 @@
+package com.ku_stacks.ku_ring.remote.library.response
+
+import com.google.gson.annotations.SerializedName
+
+data class LibrarySeatResponse(
+ @SerializedName("success")
+ val success: Boolean,
+ @SerializedName("code")
+ val code: String,
+ @SerializedName("message")
+ val message: String,
+ @SerializedName("data")
+ val data: LibraryRoomListResponse,
+)
\ No newline at end of file
diff --git a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/util/NetworkModule.kt b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/util/NetworkModule.kt
index 0d4dee0d9..9c3292c08 100644
--- a/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/util/NetworkModule.kt
+++ b/data/remote/src/main/java/com/ku_stacks/ku_ring/remote/util/NetworkModule.kt
@@ -71,4 +71,15 @@ object NetworkModule {
}
return KuringBotSSEClient(client)
}
+
+ @Provides
+ @Singleton
+ @Named("Library")
+ fun provideLibraryRetrofit(@Named("Default") okHttpClient: OkHttpClient): Retrofit {
+ return Retrofit.Builder()
+ .client(okHttpClient)
+ .baseUrl("https://library.konkuk.ac.kr/pyxis-api/")
+ .addConverterFactory(GsonConverterFactory.create())
+ .build()
+ }
}
\ No newline at end of file
diff --git a/data/remote/src/test/java/com/ku_stacks/ku_ring/remote/LibraryServiceTest.kt b/data/remote/src/test/java/com/ku_stacks/ku_ring/remote/LibraryServiceTest.kt
new file mode 100644
index 000000000..9534dd0c3
--- /dev/null
+++ b/data/remote/src/test/java/com/ku_stacks/ku_ring/remote/LibraryServiceTest.kt
@@ -0,0 +1,47 @@
+package com.ku_stacks.ku_ring.remote
+
+import com.ku_stacks.ku_ring.remote.library.LibraryService
+import kotlinx.coroutines.test.runTest
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+
+class LibraryServiceTest : ApiAbstract() {
+
+ private lateinit var service: LibraryService
+
+ @Before
+ fun initService() {
+ super.createMockServer()
+ service = createService(LibraryService::class.java)
+ }
+
+ @After
+ fun tearDown() {
+ super.stopServer()
+ }
+
+ @Test
+ fun `fetch Library Seat Status From Network Test`() = runTest {
+ // given
+ enqueueResponse("/LibrarySeatsResponse.json")
+
+ // when
+ val response = service.fetchLibrarySeatStatus(
+ methodCode = "PC",
+ roomTypeId = 4,
+ branchTypeId = 1,
+ )
+ mockWebServer.takeRequest()
+
+ // then
+ assertEquals(true, response.success)
+ assertEquals("조회되었습니다.", response.message)
+ assertEquals(7, response.data.resultCount)
+ assertEquals("제 1열람실 (A구역)", response.data.libraryRooms[0].roomName)
+ assertEquals(true, response.data.libraryRooms[0].isChargeable)
+ }
+
+
+}
\ No newline at end of file
diff --git a/data/remote/src/test/resources/api-response/LibrarySeatsResponse.json b/data/remote/src/test/resources/api-response/LibrarySeatsResponse.json
new file mode 100644
index 000000000..3798b3c5e
--- /dev/null
+++ b/data/remote/src/test/resources/api-response/LibrarySeatsResponse.json
@@ -0,0 +1,185 @@
+{
+ "success": true,
+ "code": "success.retrieved",
+ "message": "조회되었습니다.",
+ "data": {
+ "totalCount": 7,
+ "list": [
+ {
+ "id": 102,
+ "name": "제 1열람실 (A구역)",
+ "roomType": {
+ "id": 4,
+ "name": "열람실",
+ "sortOrder": 1
+ },
+ "awaitable": false,
+ "isChargeable": true,
+ "branch": {
+ "id": 1,
+ "name": "상허기념도서관",
+ "alias": "상허",
+ "libraryCode": "211004",
+ "sortOrder": 1
+ },
+ "unableMessage": null,
+ "seats": {
+ "total": 219,
+ "occupied": 177,
+ "waiting": 0,
+ "available": 42
+ }
+ },
+ {
+ "id": 101,
+ "name": "제 1열람실 (B구역)",
+ "roomType": {
+ "id": 4,
+ "name": "열람실",
+ "sortOrder": 1
+ },
+ "awaitable": false,
+ "isChargeable": true,
+ "branch": {
+ "id": 1,
+ "name": "상허기념도서관",
+ "alias": "상허",
+ "libraryCode": "211004",
+ "sortOrder": 1
+ },
+ "unableMessage": null,
+ "seats": {
+ "total": 189,
+ "occupied": 147,
+ "waiting": 0,
+ "available": 42
+ }
+ },
+ {
+ "id": 103,
+ "name": "제 2 열람실",
+ "roomType": {
+ "id": 4,
+ "name": "열람실",
+ "sortOrder": 1
+ },
+ "awaitable": false,
+ "isChargeable": true,
+ "branch": {
+ "id": 1,
+ "name": "상허기념도서관",
+ "alias": "상허",
+ "libraryCode": "211004",
+ "sortOrder": 1
+ },
+ "unableMessage": null,
+ "seats": {
+ "total": 147,
+ "occupied": 64,
+ "waiting": 0,
+ "available": 83
+ }
+ },
+ {
+ "id": 104,
+ "name": "제 3열람실 (A구역)",
+ "roomType": {
+ "id": 4,
+ "name": "열람실",
+ "sortOrder": 1
+ },
+ "awaitable": false,
+ "isChargeable": true,
+ "branch": {
+ "id": 1,
+ "name": "상허기념도서관",
+ "alias": "상허",
+ "libraryCode": "211004",
+ "sortOrder": 1
+ },
+ "unableMessage": null,
+ "seats": {
+ "total": 332,
+ "occupied": 72,
+ "waiting": 0,
+ "available": 260
+ }
+ },
+ {
+ "id": 105,
+ "name": "제 3열람실 (B구역)",
+ "roomType": {
+ "id": 4,
+ "name": "열람실",
+ "sortOrder": 1
+ },
+ "awaitable": false,
+ "isChargeable": true,
+ "branch": {
+ "id": 1,
+ "name": "상허기념도서관",
+ "alias": "상허",
+ "libraryCode": "211004",
+ "sortOrder": 1
+ },
+ "unableMessage": null,
+ "seats": {
+ "total": 284,
+ "occupied": 54,
+ "waiting": 0,
+ "available": 230
+ }
+ },
+ {
+ "id": 106,
+ "name": "제 4 열람실",
+ "roomType": {
+ "id": 4,
+ "name": "열람실",
+ "sortOrder": 1
+ },
+ "awaitable": false,
+ "isChargeable": true,
+ "branch": {
+ "id": 1,
+ "name": "상허기념도서관",
+ "alias": "상허",
+ "libraryCode": "211004",
+ "sortOrder": 1
+ },
+ "unableMessage": null,
+ "seats": {
+ "total": 172,
+ "occupied": 15,
+ "waiting": 0,
+ "available": 157
+ }
+ },
+ {
+ "id": 107,
+ "name": "제 5 열람실",
+ "roomType": {
+ "id": 4,
+ "name": "열람실",
+ "sortOrder": 1
+ },
+ "awaitable": false,
+ "isChargeable": true,
+ "branch": {
+ "id": 1,
+ "name": "상허기념도서관",
+ "alias": "상허",
+ "libraryCode": "211004",
+ "sortOrder": 1
+ },
+ "unableMessage": null,
+ "seats": {
+ "total": 168,
+ "occupied": 27,
+ "waiting": 0,
+ "available": 141
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/settings.gradle.kts b/settings.gradle.kts
index f2b9d80fc..9f2ee090a 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -32,6 +32,7 @@ include(
":data:staff",
":data:department",
":data:department:test",
+ ":data:library",
":data:local",
":data:local:test",
":data:remote",