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.nise.SimilarReplayEntry
import com.nisemoe.nise.database.ScoreService
import com.nisemoe.nise.SuspiciousScoreEntry
import com.nisemoe.nise.UserDetails
import com.nisemoe.nise.UserQueueDetails
import com.nisemoe.nise.database.ScoreService
import com.nisemoe.nise.database.UserService
import com.nisemoe.nise.service.AuthService
import com.nisemoe.nise.service.UpdateUserQueueService
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping
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
import org.springframework.web.bind.annotation.*
@RestController
class UserDetailsController(
@ -41,6 +34,10 @@ class UserDetailsController(
@PostMapping("user-queue")
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)
if(!userQueueDetails.canUpdate)
return ResponseEntity.badRequest().build()

View File

@ -45,6 +45,35 @@ class UserService(
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? {
val user = dslContext.selectFrom(USERS)
.where(USERS.USERNAME.equalIgnoreCase(username.lowercase()))