Skip to content

Commit 70b1f6d

Browse files
ElenaSpbElena_Moshnikova
andauthored
fix s3 url creation (#2865)
* fix s3 url creation * fix s3 url creation --------- Co-authored-by: Elena_Moshnikova <trunion@yandex.ru>
1 parent 81636e9 commit 70b1f6d

5 files changed

Lines changed: 87 additions & 3 deletions

File tree

src/main/kotlin/com/epam/brn/service/TaskService.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ class TaskService(
3434
) {
3535
private val log = logger()
3636

37-
private val tempPictureStorageUrl = "https://brnup.s3.eu-north-1.amazonaws.com/pictures/"
38-
3937
@Cacheable("tasksByExerciseId")
4038
fun getTasksByExerciseId(exerciseId: Long): List<Any> {
4139
val exerciseType =
@@ -85,8 +83,24 @@ class TaskService(
8583
private fun processAnswerOptions(task: Task) {
8684
task.answerOptions
8785
.forEach { resource ->
88-
if (!resource.pictureFileUrl.isNullOrEmpty())
86+
val word = resource.word
87+
if (!resource.pictureFileUrl.isNullOrEmpty()) {
8988
resource.pictureFileUrl = cloudService.baseFileUrl() + "/" + resource.pictureFileUrl
89+
log.info("Picture url for word $word is ${resource.pictureFileUrl}")
90+
} else {
91+
val pictureFile = "$word.png"
92+
var isExistOnS3AndUrl = cloudService.isPictureExistInMainFolder(pictureFile)
93+
log.info("Picture $pictureFile on main s3 /pictures folder exist = $isExistOnS3AndUrl")
94+
if (!isExistOnS3AndUrl.first) {
95+
isExistOnS3AndUrl = cloudService.isPictureExistInUnverifiedFolder(pictureFile)
96+
log.info("Picture $pictureFile on main s3 /unverifiedPictures folder exist = $isExistOnS3AndUrl")
97+
}
98+
if (isExistOnS3AndUrl.first) {
99+
resource.pictureFileUrl = isExistOnS3AndUrl.second
100+
} else {
101+
log.info("Picture for word $word not found on s3.")
102+
}
103+
}
90104
}
91105
}
92106

src/main/kotlin/com/epam/brn/service/cloud/AwsCloudService.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ class AwsCloudService(
3838
@Value("\${brn.resources.default-pictures.path}")
3939
lateinit var defaultPicturesPath: String
4040

41+
@Value("\${brn.resources.unverified-pictures.path}")
42+
lateinit var unverifiedPicturesPath: String
43+
44+
@Value("\${brn.resources.pictures.ext:}")
45+
lateinit var contributorPictureExtension: String
46+
4147
companion object {
4248
private const val FOLDER_DELIMITER = "/"
4349
}
@@ -151,12 +157,28 @@ class AwsCloudService(
151157
.key(fullFileName)
152158
.build()
153159
s3Client.headObject(request)
160+
log.info("Picture fileName=$fileName fullFileName=`$fullFileName` exist in $filePath")
154161
true
155162
} catch (e: NoSuchKeyException) {
163+
log.error("Picture `$fullFileName` doesn't exist in $filePath", e)
156164
false
157165
}
158166
}
159167

168+
override fun isPictureExistInFolder(
169+
filePath: String,
170+
fileName: String,
171+
): Pair<Boolean, String> {
172+
val isFileExist = isFileExist(filePath, fileName)
173+
val pictureUrl = baseFileUrl() + FOLDER_DELIMITER + filePath + FOLDER_DELIMITER + fileName
174+
return Pair(isFileExist, pictureUrl)
175+
}
176+
177+
override fun isPictureExistInMainFolder(fileName: String): Pair<Boolean, String> = isPictureExistInFolder(defaultPicturesPath, fileName)
178+
179+
override fun isPictureExistInUnverifiedFolder(fileName: String): Pair<Boolean, String> =
180+
isPictureExistInFolder(unverifiedPicturesPath, fileName)
181+
160182
override fun createFullFileName(
161183
path: String,
162184
filename: String,

src/main/kotlin/com/epam/brn/service/cloud/CloudService.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,27 @@ interface CloudService {
6868
fileName: String,
6969
): Boolean
7070

71+
/**
72+
* Check that picture is exist in folder cloud storage
73+
* @fileName should be with extension
74+
*/
75+
fun isPictureExistInFolder(
76+
filePath: String,
77+
fileName: String,
78+
): Pair<Boolean, String>
79+
80+
/**
81+
* Check that picture is exist in main folder cloud storage
82+
* @fileName should be with extension
83+
*/
84+
fun isPictureExistInMainFolder(fileName: String): Pair<Boolean, String>
85+
86+
/**
87+
* Check that picture is exist in unverified folder cloud storage
88+
* @fileName should be with extension
89+
*/
90+
fun isPictureExistInUnverifiedFolder(fileName: String): Pair<Boolean, String>
91+
7192
/**
7293
* Create full name of file
7394
*/

src/main/kotlin/com/epam/brn/service/cloud/GoogleCloudService.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,19 @@ class GoogleCloudService(
9090
override fun getPicturesNamesFromMainFolder(): List<String> {
9191
TODO("Not yet implemented")
9292
}
93+
94+
override fun isPictureExistInFolder(
95+
filePath: String,
96+
fileName: String,
97+
): Pair<Boolean, String> {
98+
TODO("Not yet implemented")
99+
}
100+
101+
override fun isPictureExistInMainFolder(fileName: String): Pair<Boolean, String> {
102+
TODO("Not yet implemented")
103+
}
104+
105+
override fun isPictureExistInUnverifiedFolder(fileName: String): Pair<Boolean, String> {
106+
TODO("Not yet implemented")
107+
}
93108
}

src/test/kotlin/com/epam/brn/service/TaskServiceTest.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@ internal class TaskServiceTest {
138138

139139
val baseFileUrl = "baseFileUrl"
140140
every { cloudService.baseFileUrl() } returns (baseFileUrl)
141+
every { cloudService.isPictureExistInMainFolder(any()) } returns Pair(true, "baseFileUrl/word.png")
142+
every { cloudService.isPictureExistInUnverifiedFolder(any()) } returns Pair(false, "")
141143

142144
// WHEN
143145
val foundTasks = taskService.getTasksByExerciseId(LONG_ONE)
@@ -161,6 +163,8 @@ internal class TaskServiceTest {
161163

162164
val baseFileUrl = "baseFileUrl"
163165
every { cloudService.baseFileUrl() } returns (baseFileUrl)
166+
every { cloudService.isPictureExistInMainFolder(any()) } returns Pair(true, "baseFileUrl/word.png")
167+
every { cloudService.isPictureExistInUnverifiedFolder(any()) } returns Pair(false, "")
164168

165169
// WHEN
166170
val foundTasks = taskService.getTasksByExerciseId(LONG_ONE) as List<TaskResponse>
@@ -209,6 +213,8 @@ internal class TaskServiceTest {
209213

210214
val baseFileUrl = "baseFileUrl"
211215
every { cloudService.baseFileUrl() } returns (baseFileUrl)
216+
every { cloudService.isPictureExistInMainFolder(any()) } returns Pair(true, "baseFileUrl/word.png")
217+
every { cloudService.isPictureExistInUnverifiedFolder(any()) } returns Pair(false, "")
212218

213219
// WHEN
214220
val foundTasks = taskService.getTasksByExerciseId(LONG_ONE)
@@ -250,6 +256,8 @@ internal class TaskServiceTest {
250256

251257
val baseFileUrl = "baseFileUrl"
252258
every { cloudService.baseFileUrl() } returns (baseFileUrl)
259+
every { cloudService.isPictureExistInMainFolder(any()) } returns Pair(true, "baseFileUrl/word.png")
260+
every { cloudService.isPictureExistInUnverifiedFolder(any()) } returns Pair(false, "")
253261

254262
// WHEN
255263
val foundTasks = taskService.getTasksByExerciseId(LONG_ONE)
@@ -277,6 +285,8 @@ internal class TaskServiceTest {
277285

278286
val baseFileUrl = "baseFileUrl"
279287
every { cloudService.baseFileUrl() } returns (baseFileUrl)
288+
every { cloudService.isPictureExistInMainFolder(any()) } returns Pair(true, "baseFileUrl/word.png")
289+
every { cloudService.isPictureExistInUnverifiedFolder(any()) } returns Pair(false, "")
280290

281291
// WHEN
282292
var foundTasks = taskService.getTasksByExerciseId(LONG_ONE)
@@ -307,6 +317,8 @@ internal class TaskServiceTest {
307317

308318
val baseFileUrl = "baseFileUrl"
309319
every { cloudService.baseFileUrl() } returns (baseFileUrl)
320+
every { cloudService.isPictureExistInMainFolder(any()) } returns Pair(true, "baseFileUrl/word.png")
321+
every { cloudService.isPictureExistInUnverifiedFolder(any()) } returns Pair(false, "")
310322

311323
// THEN
312324
shouldThrowExactly<EntityNotFoundException> {

0 commit comments

Comments
 (0)