Removes response after uploading a photo, and preps things for get photo info endpoint
This commit is contained in:
@@ -70,7 +70,7 @@ class TeamController(private val teamService: TeamService, private val photoServ
|
|||||||
@PathVariable teamId: TeamId,
|
@PathVariable teamId: TeamId,
|
||||||
@PathVariable itemId: ItemId,
|
@PathVariable itemId: ItemId,
|
||||||
@PathVariable photoId: PhotoId): ResponseEntity<PhotoResponse> {
|
@PathVariable photoId: PhotoId): ResponseEntity<PhotoResponse> {
|
||||||
TODO("Get photo information for the specified Team, Hunt, Item, and Photo")
|
TODO("Get photo information for the specified Team, Hunt, Item, and Photo. Join on the Hunter table to get the Hunter name. Also verify that the requesting user is either an admin or is on the same Hunt and Team as the Hunter who submitted the Photo")
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{teamId}/item/{itemId}/photo/{photoId}/file")
|
@GetMapping("/{teamId}/item/{itemId}/photo/{photoId}/file")
|
||||||
@@ -88,8 +88,8 @@ class TeamController(private val teamService: TeamService, private val photoServ
|
|||||||
@PathVariable teamId: TeamId,
|
@PathVariable teamId: TeamId,
|
||||||
@PathVariable itemId: ItemId,
|
@PathVariable itemId: ItemId,
|
||||||
authentication: Authentication,
|
authentication: Authentication,
|
||||||
@RequestParam file: MultipartFile): ResponseEntity<PhotoResponse> {
|
@RequestParam file: MultipartFile) {
|
||||||
return ResponseEntity.ok(photoService.submitPhoto(huntId, itemId, authentication.name, file).toResponse())
|
photoService.submitPhoto(huntId, itemId, authentication.name, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.halfbinary.scavengerhuntapi.model.converter
|
package net.halfbinary.scavengerhuntapi.model.converter
|
||||||
|
|
||||||
|
import net.halfbinary.scavengerhuntapi.model.domain.Hunter
|
||||||
import net.halfbinary.scavengerhuntapi.model.domain.Photo
|
import net.halfbinary.scavengerhuntapi.model.domain.Photo
|
||||||
import net.halfbinary.scavengerhuntapi.model.record.PhotoRecord
|
import net.halfbinary.scavengerhuntapi.model.record.PhotoRecord
|
||||||
import net.halfbinary.scavengerhuntapi.model.response.PhotoResponse
|
import net.halfbinary.scavengerhuntapi.model.response.PhotoResponse
|
||||||
@@ -14,9 +15,9 @@ fun Photo.toRecord() = PhotoRecord(
|
|||||||
statusChangeDateTime = statusChangeDateTime
|
statusChangeDateTime = statusChangeDateTime
|
||||||
)
|
)
|
||||||
|
|
||||||
fun Photo.toResponse() = PhotoResponse(
|
fun Photo.toResponse(hunter: Hunter) = PhotoResponse(
|
||||||
id = id,
|
id = id,
|
||||||
hunterId = hunterId,
|
hunterName = hunter.name,
|
||||||
photoUploadDateTime = foundDateTime,
|
photoUploadDateTime = foundDateTime,
|
||||||
photoStatus = status,
|
photoStatus = status,
|
||||||
photoStatusChangeDateTime = statusChangeDateTime
|
photoStatusChangeDateTime = statusChangeDateTime
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
package net.halfbinary.scavengerhuntapi.model.response
|
package net.halfbinary.scavengerhuntapi.model.response
|
||||||
|
|
||||||
import net.halfbinary.scavengerhuntapi.model.HunterId
|
|
||||||
import net.halfbinary.scavengerhuntapi.model.PhotoId
|
import net.halfbinary.scavengerhuntapi.model.PhotoId
|
||||||
import net.halfbinary.scavengerhuntapi.model.PhotoStatus
|
import net.halfbinary.scavengerhuntapi.model.PhotoStatus
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
data class PhotoResponse(
|
data class PhotoResponse(
|
||||||
val id: PhotoId,
|
val id: PhotoId,
|
||||||
val hunterId: HunterId,
|
val hunterName: String,
|
||||||
val photoUploadDateTime: LocalDateTime,
|
val photoUploadDateTime: LocalDateTime,
|
||||||
val photoStatus: PhotoStatus,
|
val photoStatus: PhotoStatus,
|
||||||
val photoStatusChangeDateTime: LocalDateTime,
|
val photoStatusChangeDateTime: LocalDateTime,
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class PhotoService(
|
|||||||
private val s3StorageService: S3StorageService,
|
private val s3StorageService: S3StorageService,
|
||||||
private val fileProbeService: FileProbeService
|
private val fileProbeService: FileProbeService
|
||||||
) {
|
) {
|
||||||
fun submitPhoto(huntId: HuntId, itemId: ItemId, email: String, file: MultipartFile): Photo {
|
fun submitPhoto(huntId: HuntId, itemId: ItemId, email: String, file: MultipartFile) {
|
||||||
val originalBytes = file.bytes
|
val originalBytes = file.bytes
|
||||||
val fileType = fileProbeService.getFileType(originalBytes)
|
val fileType = fileProbeService.getFileType(originalBytes)
|
||||||
|
|
||||||
@@ -48,14 +48,10 @@ class PhotoService(
|
|||||||
val savedRecord = photoRepository.save(photo.toRecord())
|
val savedRecord = photoRepository.save(photo.toRecord())
|
||||||
val baseName = savedRecord.id.toString()
|
val baseName = savedRecord.id.toString()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
s3StorageService.upload("$baseName${fileProbeService.getFileExtension(fileType)}", originalBytes, fileType)
|
s3StorageService.upload("$baseName${fileProbeService.getFileExtension(fileType)}", originalBytes, fileType)
|
||||||
s3StorageService.upload("${baseName}_large.jpg", originalAsJpeg, MediaType.IMAGE_JPEG_VALUE)
|
s3StorageService.upload("${baseName}_large.jpg", originalAsJpeg, MediaType.IMAGE_JPEG_VALUE)
|
||||||
s3StorageService.upload("${baseName}_medium.jpg", resize(originalBytes, 800), MediaType.IMAGE_JPEG_VALUE)
|
s3StorageService.upload("${baseName}_medium.jpg", resize(originalBytes, 800), MediaType.IMAGE_JPEG_VALUE)
|
||||||
s3StorageService.upload("${baseName}_small.jpg", resize(originalBytes, 200), MediaType.IMAGE_JPEG_VALUE)
|
s3StorageService.upload("${baseName}_small.jpg", resize(originalBytes, 200), MediaType.IMAGE_JPEG_VALUE)
|
||||||
|
|
||||||
return photo
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toJpeg(bytes: ByteArray): ByteArray {
|
private fun toJpeg(bytes: ByteArray): ByteArray {
|
||||||
|
|||||||
Reference in New Issue
Block a user