Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.stack.knowledge.domain.user.domain.constant.ApproveStatus
import com.stack.knowledge.domain.user.domain.constant.Authority
import com.stack.knowledge.domain.user.exception.UserNotFoundException
import com.stack.knowledge.global.security.spi.JwtGeneratorPort
import java.time.LocalDateTime
import java.util.*

@UseCase
Expand All @@ -35,7 +36,8 @@ class GAuthSignInService(
name = gAuthUserInfo.name,
profileImage = "",
authority = authority,
approveStatus = ApproveStatus.APPROVED
approveStatus = ApproveStatus.APPROVED,
createdAt = LocalDateTime.now()
)
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.stack.knowledge.domain.auth.application.service

import com.stack.knowledge.common.annotation.usecase.UseCase
import com.stack.knowledge.common.service.GoogleService
import com.stack.knowledge.domain.auth.exception.NotApprovedUserException
import com.stack.knowledge.domain.auth.presentation.data.request.GoogleTeacherSignInRequest
Expand All @@ -10,14 +9,17 @@ import com.stack.knowledge.domain.user.domain.User
import com.stack.knowledge.domain.user.domain.constant.ApproveStatus
import com.stack.knowledge.domain.user.domain.constant.Authority
import com.stack.knowledge.global.security.spi.JwtGeneratorPort
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.util.*

@UseCase
@Service
class GoogleTeacherSignInService(
private val jwtGeneratorPort: JwtGeneratorPort,
private val userPort: UserPort,
private val googleService: GoogleService
) {
@Transactional(noRollbackFor = [NotApprovedUserException::class], rollbackFor = [Exception::class])
fun execute(googleTeacherSignInRequest: GoogleTeacherSignInRequest): TokenResponse {
val (email, name) = googleService.queryGoogleEmailAndName(googleTeacherSignInRequest.code)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.stack.knowledge.domain.user.application.service

import com.stack.knowledge.common.annotation.usecase.ReadOnlyUseCase
import com.stack.knowledge.domain.user.application.spi.QueryUserPort
import com.stack.knowledge.domain.user.domain.constant.ApproveStatus
import com.stack.knowledge.domain.user.presentation.data.response.AllSignUpRequestTeacherResponse

@ReadOnlyUseCase
class QueryAllSignUpRequestedTeacherService(
private val queryUserPort: QueryUserPort
) {
fun execute(): List<AllSignUpRequestTeacherResponse> {
val users = queryUserPort.queryAllUserByApproveStatus(ApproveStatus.PENDING)

return users.map {
AllSignUpRequestTeacherResponse(
name = it.name,
createdAt = it.createdAt
)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.stack.knowledge.domain.user.application.spi

import com.stack.knowledge.domain.user.domain.User
import com.stack.knowledge.domain.user.domain.constant.ApproveStatus
import com.stack.knowledge.domain.user.domain.constant.Authority
import java.util.*

Expand All @@ -9,4 +10,5 @@ interface QueryUserPort {
fun queryUserRoleByEmail(email: String, authority: String): Authority
fun queryUserByEmail(email: String): User?
fun queryExistByEmail(email: String): Boolean
fun queryAllUserByApproveStatus(approveStatus: ApproveStatus): List<User>
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.stack.knowledge.domain.user.domain
import com.stack.knowledge.common.annotation.Aggregate
import com.stack.knowledge.domain.user.domain.constant.ApproveStatus
import com.stack.knowledge.domain.user.domain.constant.Authority
import java.time.LocalDateTime
import java.util.*

@Aggregate
Expand All @@ -12,5 +13,6 @@ data class User(
val name: String,
val profileImage: String? = "",
val authority: Authority,
val approveStatus: ApproveStatus
val approveStatus: ApproveStatus,
val createdAt: LocalDateTime = LocalDateTime.now()
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.stack.knowledge.domain.user.persistence

import com.stack.knowledge.domain.user.application.spi.UserPort
import com.stack.knowledge.domain.user.domain.User
import com.stack.knowledge.domain.user.domain.constant.ApproveStatus
import com.stack.knowledge.domain.user.domain.constant.Authority
import com.stack.knowledge.domain.user.persistence.mapper.UserMapper
import com.stack.knowledge.domain.user.persistence.repository.UserJpaRepository
Expand Down Expand Up @@ -40,4 +41,7 @@ class UserPersistenceAdapter(

override fun queryExistByEmail(email: String): Boolean =
userJpaRepository.existsByEmail(email)

override fun queryAllUserByApproveStatus(approveStatus: ApproveStatus): List<User> =
userJpaRepository.findAllByApproveStatus(approveStatus).map { userMapper.toDomain(it)!! }
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.stack.knowledge.domain.user.persistence.repository

import com.stack.knowledge.domain.user.domain.constant.ApproveStatus
import com.stack.knowledge.domain.user.persistence.entity.UserJpaEntity
import org.springframework.data.repository.CrudRepository
import java.util.*

interface UserJpaRepository : CrudRepository<UserJpaEntity, UUID> {
fun findByEmail(email: String): UserJpaEntity?
fun existsByEmail(email: String): Boolean
fun findAllByApproveStatus(approveStatus: ApproveStatus): List<UserJpaEntity>
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package com.stack.knowledge.domain.user.presentation

import com.stack.knowledge.domain.user.application.service.QueryScoringPageDetailsService
import com.stack.knowledge.domain.user.application.service.QueryScoringPageService
import com.stack.knowledge.domain.user.application.service.ScoreSolveService
import com.stack.knowledge.domain.user.application.service.UpdateUserApproveStatusService
import com.stack.knowledge.domain.user.application.service.*
import com.stack.knowledge.domain.user.presentation.data.request.ScoreSolveRequest
import com.stack.knowledge.domain.user.presentation.data.request.UpdateUserApproveStatusRequest
import com.stack.knowledge.domain.user.presentation.data.response.AllScoringResponse
import com.stack.knowledge.domain.user.presentation.data.response.AllSignUpRequestTeacherResponse
import com.stack.knowledge.domain.user.presentation.data.response.ScoringDetailsResponse
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
Expand All @@ -20,7 +18,8 @@ class UserWebAdapter(
private val queryScoringPageService: QueryScoringPageService,
private val queryScoringPageDetailsService: QueryScoringPageDetailsService,
private val scoreSolveUseCase: ScoreSolveService,
private val updateUserApproveStatusService: UpdateUserApproveStatusService
private val updateUserApproveStatusService: UpdateUserApproveStatusService,
private val queryAllSignUpRequestedTeacherService: QueryAllSignUpRequestedTeacherService
) {
@GetMapping("/scoring")
fun queryAllSolve(): ResponseEntity<List<AllScoringResponse>> =
Expand All @@ -32,6 +31,11 @@ class UserWebAdapter(
queryScoringPageDetailsService.execute(solveId)
.let { ResponseEntity.ok(it) }

@GetMapping("/teacher")
fun queryAllSignUpRequestedTeacher(): ResponseEntity<List<AllSignUpRequestTeacherResponse>> =
queryAllSignUpRequestedTeacherService.execute()
.let { ResponseEntity.ok(it) }

@PostMapping("/scoring/{solve_id}")
fun scoreSolve(@PathVariable("solve_id") solveId: UUID, @RequestBody @Valid scoreSolveRequest: ScoreSolveRequest): ResponseEntity<Void> =
scoreSolveUseCase.execute(solveId, scoreSolveRequest)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.stack.knowledge.domain.user.presentation.data.response

import java.time.LocalDateTime

data class AllSignUpRequestTeacherResponse(
val name: String,
val createdAt: LocalDateTime
)
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class SecurityConfig(
// user
.antMatchers(HttpMethod.GET, "/user/scoring").hasRole(teacher)
.antMatchers(HttpMethod.GET, "/user/scoring/{solve_id}").hasRole(teacher)
.antMatchers(HttpMethod.GET, "/user/teacher").hasRole(teacher)
.antMatchers(HttpMethod.POST, "/user/scoring/{solve_id}").hasRole(teacher)
.antMatchers(HttpMethod.PATCH, "/user/{user_id}").hasRole(teacher)

Expand Down