diff --git a/nise-backend/src/main/kotlin/com/nisemoe/nise/controller/UserDetailsController.kt b/nise-backend/src/main/kotlin/com/nisemoe/nise/controller/UserDetailsController.kt index 9c31733..28103e1 100644 --- a/nise-backend/src/main/kotlin/com/nisemoe/nise/controller/UserDetailsController.kt +++ b/nise-backend/src/main/kotlin/com/nisemoe/nise/controller/UserDetailsController.kt @@ -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 { + // 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() diff --git a/nise-backend/src/main/kotlin/com/nisemoe/nise/database/UserService.kt b/nise-backend/src/main/kotlin/com/nisemoe/nise/database/UserService.kt index 8fea58e..4388db6 100644 --- a/nise-backend/src/main/kotlin/com/nisemoe/nise/database/UserService.kt +++ b/nise-backend/src/main/kotlin/com/nisemoe/nise/database/UserService.kt @@ -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()))