Check if an user_id exists before inserting into user queue

This commit is contained in:
nise.moe 2024-02-23 10:43:24 +01:00
parent 1928eb07cf
commit 1f09cbd009
2 changed files with 35 additions and 9 deletions

View File

@ -2,22 +2,15 @@ package com.nisemoe.nise.controller
import com.nisemoe.generated.tables.references.SCORES import com.nisemoe.generated.tables.references.SCORES
import com.nisemoe.nise.SimilarReplayEntry import com.nisemoe.nise.SimilarReplayEntry
import com.nisemoe.nise.database.ScoreService
import com.nisemoe.nise.SuspiciousScoreEntry import com.nisemoe.nise.SuspiciousScoreEntry
import com.nisemoe.nise.UserDetails import com.nisemoe.nise.UserDetails
import com.nisemoe.nise.UserQueueDetails import com.nisemoe.nise.UserQueueDetails
import com.nisemoe.nise.database.ScoreService
import com.nisemoe.nise.database.UserService import com.nisemoe.nise.database.UserService
import com.nisemoe.nise.service.AuthService import com.nisemoe.nise.service.AuthService
import com.nisemoe.nise.service.UpdateUserQueueService import com.nisemoe.nise.service.UpdateUserQueueService
import org.springframework.http.ResponseEntity import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.*
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController
import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.time.ZoneOffset
@RestController @RestController
class UserDetailsController( class UserDetailsController(
@ -41,6 +34,10 @@ class UserDetailsController(
@PostMapping("user-queue") @PostMapping("user-queue")
fun addUserToQueue(@RequestBody request: UserQueueRequest): ResponseEntity<Unit> { fun addUserToQueue(@RequestBody request: UserQueueRequest): ResponseEntity<Unit> {
// Check if the user_id currently exists
this.userService.getUserById(userId = request.userId)
?: return ResponseEntity.notFound().build()
val userQueueDetails = this.userQueueService.getUserQueueDetails(request.userId) val userQueueDetails = this.userQueueService.getUserQueueDetails(request.userId)
if(!userQueueDetails.canUpdate) if(!userQueueDetails.canUpdate)
return ResponseEntity.badRequest().build() return ResponseEntity.badRequest().build()

View File

@ -45,6 +45,35 @@ class UserService(
return dslContext.fetchCount(SCORES, SCORES.USER_ID.eq(userId)) return dslContext.fetchCount(SCORES, SCORES.USER_ID.eq(userId))
} }
fun getUserById(userId: Long): UserDetails? {
val user = dslContext.selectFrom(USERS)
.where(USERS.USER_ID.eq(userId))
.fetchOneInto(UsersRecord::class.java)
if (user != null) {
return UserDetails(
user.userId!!,
user.username!!,
user.rank,
user.ppRaw,
user.joinDate?.let { Format.formatLocalDateTime(it) },
user.secondsPlayed,
user.country,
user.countryRank,
user.playcount
)
}
// The database does NOT have the user; we will now use the osu!api
val apiUser = this.osuApi.getUserProfile(userId = userId.toString(), mode = "osu", key = "id")
?: return null
// Persist to database
insertApiUser(apiUser)
return this.mapUserToDatabase(apiUser)
}
fun getUserDetails(username: String): UserDetails? { fun getUserDetails(username: String): UserDetails? {
val user = dslContext.selectFrom(USERS) val user = dslContext.selectFrom(USERS)
.where(USERS.USERNAME.equalIgnoreCase(username.lowercase())) .where(USERS.USERNAME.equalIgnoreCase(username.lowercase()))