Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

clients in gateway #22

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
**/gradle/
!src/**/build/

**/*_postgres_data

# Ignore Gradle GUI config
gradle-app.setting

Expand Down
18 changes: 12 additions & 6 deletions gateway/src/main/kotlin/api/BookController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,22 @@ import java.util.*
class BookController(
private val coreCatalogClient: CoreCatalogClient,
) : BooksApi {
override fun getBookContentByTitle(title: String): ResponseEntity<List<BookContentResponse>> {
TODO("Not yet implemented")
override fun getBookContentByTitle(title: UUID): ResponseEntity<List<BookContentResponse>> {
return ResponseEntity.ok(
coreCatalogClient.getBookContentByTitle(title)
)
}

override fun getBookInstancesByBookContentId(bookContentId: String): ResponseEntity<List<BookInstanceResponse>> {
TODO("Not yet implemented")
override fun getBookInstancesByBookContentId(bookContentId: UUID): ResponseEntity<List<BookInstanceResponse>> {
return ResponseEntity.ok(
coreCatalogClient.getBookInstancesByBookContentId(bookContentId)
)
}

override fun getBooksContentById(bookContentId: String): ResponseEntity<List<BookContentResponse>> {
TODO("Not yet implemented")
override fun getBooksContentById(bookContentId: UUID): ResponseEntity<List<BookContentResponse>> {
return ResponseEntity.ok(
coreCatalogClient.getBooksContentById(bookContentId)
)
}

override fun initializeBookReservation(
Expand Down
116 changes: 58 additions & 58 deletions gateway/src/main/kotlin/api/BookingApi.kt
Original file line number Diff line number Diff line change
@@ -1,58 +1,58 @@
package org.example.api

import org.springframework.beans.factory.annotation.Value
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.client.RestTemplate
import org.springframework.web.servlet.function.ServerRequest.Headers
import ru.openbook.api.ReservationApi
import ru.openbook.model.BookReservationRequestResponse
import java.util.UUID

@RestController
class BookingApi(
private val restTemplate: RestTemplate,
@Value("\${spring.clients.core-booking.host}")
private val clientHost: String,
) : ReservationApi {
override fun getReservationRequest(
xUid: UUID,
reservationId: UUID,
): ResponseEntity<BookReservationRequestResponse> {
val entity = HttpEntity(
mapOf(
"X-UID" to xUid.toString(),
),
)

return restTemplate.exchange(
"$clientHost/v1/reservations/$reservationId",
HttpMethod.GET,
entity,
BookReservationRequestResponse::class.java,
)
}

override fun reserveBook(
xIdempotencyToken: UUID,
xUid: UUID,
bookId: UUID,
): ResponseEntity<BookReservationRequestResponse> {
val entity = HttpEntity(
mapOf(
"X-Idempotency-Token" to xIdempotencyToken.toString(),
"X-UID" to xUid.toString(),
),
)

return restTemplate.exchange(
"$clientHost/v1/booking/$bookId/reservation",
HttpMethod.POST,
entity,
BookReservationRequestResponse::class.java,
)
}
}
//package org.example.api
//
//import org.springframework.beans.factory.annotation.Value
//import org.springframework.http.HttpEntity
//import org.springframework.http.HttpHeaders
//import org.springframework.http.HttpMethod
//import org.springframework.http.ResponseEntity
//import org.springframework.web.bind.annotation.RestController
//import org.springframework.web.client.RestTemplate
//import org.springframework.web.servlet.function.ServerRequest.Headers
//import ru.openbook.api.ReservationApi
//import ru.openbook.model.BookReservationRequestResponse
//import java.util.UUID
//
//@RestController
//class BookingApi(
// private val restTemplate: RestTemplate,
// @Value("\${spring.clients.core-booking.host}")
// private val clientHost: String,
//) : ReservationApi {
// override fun getReservationRequest(
// xUid: UUID,
// reservationId: UUID,
// ): ResponseEntity<BookReservationRequestResponse> {
// val entity = HttpEntity(
// mapOf(
// "X-UID" to xUid.toString(),
// ),
// )
//
// return restTemplate.exchange(
// "$clientHost/v1/reservations/$reservationId",
// HttpMethod.GET,
// entity,
// BookReservationRequestResponse::class.java,
// )
// }
//
// override fun reserveBook(
// xIdempotencyToken: UUID,
// xUid: UUID,
// bookId: UUID,
// ): ResponseEntity<BookReservationRequestResponse> {
// val entity = HttpEntity(
// mapOf(
// "X-Idempotency-Token" to xIdempotencyToken.toString(),
// "X-UID" to xUid.toString(),
// ),
// )
//
// return restTemplate.exchange(
// "$clientHost/v1/booking/$bookId/reservation",
// HttpMethod.POST,
// entity,
// BookReservationRequestResponse::class.java,
// )
// }
//}
37 changes: 0 additions & 37 deletions gateway/src/main/kotlin/api/BooksApi.kt

This file was deleted.

39 changes: 32 additions & 7 deletions gateway/src/main/kotlin/client/CoreCatalogClient.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.example.client

import org.springframework.beans.factory.annotation.Value
import org.springframework.core.ParameterizedTypeReference
import org.springframework.http.HttpMethod
import org.springframework.http.ResponseEntity
import org.springframework.stereotype.Component
import org.springframework.web.client.RestTemplate
import ru.openbook.model.BookContentResponse
Expand All @@ -18,20 +21,35 @@ class CoreCatalogClient(
@Value("\${spring.clients.core-catalog.port}")
lateinit var coreCatalogPort: String

fun getBookContentByTitle(title: String): List<BookContentResponse> {
TODO("Not yet implemented")
fun getBookContentByTitle(title: UUID): List<BookContentResponse> {
val url = "$coreCatalogHost:$coreCatalogPort/v1/books/name/$title"
val response: ResponseEntity<List<BookContentResponse>> = restTemplate.exchange(
url,
HttpMethod.GET,
null,
object : ParameterizedTypeReference<List<BookContentResponse>>() {}
)
return response.body ?: emptyList()
}

fun getBooksContentById(bookContentId: String): List<BookContentResponse> {
TODO("Not yet implemented")
fun getBooksContentById(bookContentId: UUID): List<BookContentResponse> {
val url = "$coreCatalogHost:$coreCatalogPort/v1/books/$bookContentId"
val response: ResponseEntity<List<BookContentResponse>> = restTemplate.exchange(
url,
HttpMethod.GET,
null,
object : ParameterizedTypeReference<List<BookContentResponse>>() {}
)
return response.body ?: emptyList()
}

fun initializeBookReservation(
bookInstanceId: UUID,
bookReservationInitializationRequest: BookReservationInitializationRequest
): BookInstanceResponse? {
val url = "$coreCatalogHost:$coreCatalogPort/v1/books/$bookInstanceId/reservation"
val response = restTemplate.postForEntity(url, bookReservationInitializationRequest, BookInstanceResponse::class.java)
val response =
restTemplate.postForEntity(url, bookReservationInitializationRequest, BookInstanceResponse::class.java)
return response.body
}

Expand All @@ -41,8 +59,15 @@ class CoreCatalogClient(
return response.body
}

fun getBookInstancesByBookContentId(bookContentId: String): List<BookInstanceResponse> {
TODO("Not yet implemented")
fun getBookInstancesByBookContentId(bookContentId: UUID): List<BookInstanceResponse> {
val url = "$coreCatalogHost:$coreCatalogPort/v1/books/$bookContentId/instances"
val response: ResponseEntity<List<BookInstanceResponse>> = restTemplate.exchange(
url,
HttpMethod.GET,
null,
object : ParameterizedTypeReference<List<BookInstanceResponse>>() {}
)
return response.body ?: emptyList()
}

}
3 changes: 3 additions & 0 deletions gateway/src/main/resources/api/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ paths:
required: true
schema:
type: string
format: uuid
description: ID of the book content.
responses:
200:
Expand Down Expand Up @@ -178,6 +179,7 @@ paths:
required: true
schema:
type: string
format: uuid
description: ID of the book.
responses:
200:
Expand All @@ -201,6 +203,7 @@ paths:
required: true
schema:
type: string
format: uuid
description: Title of the book.
responses:
200:
Expand Down