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",