User & Worker link
This commit is contained in:
parent
4a1b808b2c
commit
1910f30289
|
|
@ -1,5 +1,5 @@
|
|||
package org.js.lorca_core.common.enums
|
||||
|
||||
enum class EWorkerCategory(name: String) {
|
||||
FISIO("FISIO")
|
||||
enum class EWorkerCategory {
|
||||
FISIO
|
||||
}
|
||||
|
|
@ -3,6 +3,10 @@ package org.js.lorca_core.common.mappers
|
|||
import org.js.lorca_core.common.models.Worker
|
||||
import org.js.lorca_core.db.entities.WorkerEntity
|
||||
import org.mapstruct.Mapper
|
||||
import org.mapstruct.Mapping
|
||||
|
||||
@Mapper(componentModel = "spring")
|
||||
interface WorkerMapper : GenericMapper<Worker, WorkerEntity>
|
||||
interface WorkerMapper : GenericMapper<Worker, WorkerEntity> {
|
||||
@Mapping(target = "authUser", ignore = true)
|
||||
override fun toEntity(model: Worker): WorkerEntity
|
||||
}
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
package org.js.lorca_core.common.models
|
||||
|
||||
import org.js.lorca_core.common.enums.EWorkerCategory
|
||||
|
||||
data class Worker(
|
||||
var id: Long,
|
||||
var name: String,
|
||||
var surname: String,
|
||||
val category: WorkerCategory
|
||||
val category: EWorkerCategory
|
||||
)
|
||||
|
|
@ -1,5 +1,8 @@
|
|||
package org.js.lorca_core.common.responses
|
||||
|
||||
import org.js.lorca_core.common.models.Worker
|
||||
|
||||
data class LoginResponse(
|
||||
val token: String
|
||||
val token: String,
|
||||
val userInfo: Worker?
|
||||
)
|
||||
|
|
@ -23,7 +23,7 @@ class SecurityConfig(
|
|||
http
|
||||
.authorizeHttpRequests { auth ->
|
||||
auth
|
||||
.requestMatchers("/**").permitAll()
|
||||
.requestMatchers("/auth/**").permitAll()
|
||||
.anyRequest().authenticated()
|
||||
}
|
||||
.sessionManagement { session ->
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
package org.js.lorca_core.db
|
||||
|
||||
import org.js.lorca_core.db.entities.ClientEntity
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
|
||||
interface WorkerCategoryJpa : JpaRepository<ClientEntity, Long>
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package org.js.lorca_core.db.entities
|
||||
|
||||
import jakarta.persistence.*
|
||||
import org.js.lorca_core.common.enums.EWorkerCategory
|
||||
|
||||
@Entity(name = "workers")
|
||||
data class WorkerEntity(
|
||||
|
|
@ -8,8 +9,7 @@ data class WorkerEntity(
|
|||
var id: Long = 0L,
|
||||
var name: String,
|
||||
var surname: String,
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
val category: WorkerCategoryEntity,
|
||||
@OneToOne(fetch = FetchType.LAZY)
|
||||
val authUser: UserAuthEntity
|
||||
var category: EWorkerCategory,
|
||||
@OneToOne
|
||||
var authUser: UserAuthEntity
|
||||
)
|
||||
|
|
@ -1,7 +1,10 @@
|
|||
package org.js.lorca_core.repositories
|
||||
|
||||
import org.js.lorca_core.common.models.Worker
|
||||
import org.js.lorca_core.db.entities.UserAuthEntity
|
||||
|
||||
interface WorkerRepository {
|
||||
fun getByUsername(username: String): Worker?
|
||||
fun createForUser(worker: Worker, userAuth: UserAuthEntity): Worker
|
||||
fun getAll(): MutableList<Worker>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package org.js.lorca_core.repositories.impl
|
|||
import org.js.lorca_core.common.mappers.WorkerMapper
|
||||
import org.js.lorca_core.common.models.Worker
|
||||
import org.js.lorca_core.db.WorkerJpa
|
||||
import org.js.lorca_core.db.entities.UserAuthEntity
|
||||
import org.js.lorca_core.repositories.WorkerRepository
|
||||
import org.springframework.stereotype.Component
|
||||
import kotlin.jvm.optionals.getOrNull
|
||||
|
|
@ -17,4 +18,15 @@ class WorkerRepositoryImpl(
|
|||
return if (user != null) mapper.toModel(user) else null
|
||||
}
|
||||
|
||||
override fun createForUser(worker: Worker, userAuth: UserAuthEntity): Worker {
|
||||
val w = mapper.toEntity(worker)
|
||||
w.authUser = userAuth
|
||||
val ent = jpa.save(w)
|
||||
return mapper.toModel(ent)
|
||||
}
|
||||
|
||||
override fun getAll(): MutableList<Worker> {
|
||||
return mapper.toModels(jpa.findAll())
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package org.js.lorca_core.services
|
||||
|
||||
import org.js.lorca_core.common.models.Worker
|
||||
|
||||
interface WorkerService {
|
||||
fun createTestData()
|
||||
fun getAllWorkers(): List<Worker>
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ import org.js.lorca_core.common.exceptions.LorcaException
|
|||
import org.js.lorca_core.common.responses.LoginResponse
|
||||
import org.js.lorca_core.db.entities.UserAuthEntity
|
||||
import org.js.lorca_core.repositories.UserAuthRepository
|
||||
import org.js.lorca_core.repositories.WorkerRepository
|
||||
import org.js.lorca_core.services.AuthenticationService
|
||||
import org.js.lorca_core.services.JwtService
|
||||
import org.springframework.security.authentication.AuthenticationManager
|
||||
|
|
@ -19,7 +20,8 @@ class AuthenticationServiceImpl(
|
|||
private val userAuthRepository: UserAuthRepository,
|
||||
private val authenticationManager: AuthenticationManager,
|
||||
private val passwordEncoder: PasswordEncoder,
|
||||
private val jwtService: JwtService
|
||||
private val jwtService: JwtService,
|
||||
private val workerRepository: WorkerRepository
|
||||
) : AuthenticationService {
|
||||
|
||||
override fun register(dto: UserAuthDto): Boolean {
|
||||
|
|
@ -39,9 +41,11 @@ class AuthenticationServiceImpl(
|
|||
)
|
||||
)
|
||||
|
||||
val user = userAuthRepository.getByUsername(dto.username)
|
||||
val userAuth = userAuthRepository.getByUsername(dto.username)
|
||||
var userInfo = workerRepository.getByUsername(dto.username)
|
||||
return LoginResponse(
|
||||
jwtService.generateToken(user)
|
||||
jwtService.generateToken(userAuth),
|
||||
userInfo
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import io.jsonwebtoken.security.Keys
|
|||
import org.js.lorca_core.common.enums.EUserRoles
|
||||
import org.js.lorca_core.db.entities.UserAuthEntity
|
||||
import org.js.lorca_core.repositories.UserAuthRepository
|
||||
import org.js.lorca_core.repositories.WorkerRepository
|
||||
import org.js.lorca_core.services.JwtService
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.security.core.userdetails.UserDetails
|
||||
|
|
@ -18,8 +17,7 @@ import javax.crypto.SecretKey
|
|||
|
||||
@Service
|
||||
class JwtServiceImpl(
|
||||
private val userAuthRepository: UserAuthRepository,
|
||||
private val workerRepository: WorkerRepository
|
||||
private val userAuthRepository: UserAuthRepository
|
||||
) : JwtService {
|
||||
|
||||
@Value("\${security.jwt.secret-key}")
|
||||
|
|
@ -38,25 +36,12 @@ class JwtServiceImpl(
|
|||
}
|
||||
|
||||
override fun generateToken(userDetails: UserDetails): String {
|
||||
val extraClaims: Map<String, Any> = mapOf()
|
||||
val extraClaims: MutableMap<String, Any> = mutableMapOf()
|
||||
getClaimsForUser(userAuthRepository.getByUsername(userDetails.username)).let { claims ->
|
||||
if (claims.isNotEmpty()) {
|
||||
extraClaims.plus(
|
||||
Pair(
|
||||
"roles",
|
||||
claims
|
||||
)
|
||||
)
|
||||
extraClaims["roles"] = claims
|
||||
}
|
||||
}
|
||||
workerRepository.getByUsername(userDetails.username)?.let {
|
||||
extraClaims.plus(
|
||||
Pair(
|
||||
"user",
|
||||
it
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
return generateToken(
|
||||
extraClaims, userDetails
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
package org.js.lorca_core.services.impl
|
||||
|
||||
import org.js.lorca_core.common.enums.EWorkerCategory
|
||||
import org.js.lorca_core.common.models.Worker
|
||||
import org.js.lorca_core.repositories.UserAuthRepository
|
||||
import org.js.lorca_core.repositories.WorkerRepository
|
||||
import org.js.lorca_core.services.WorkerService
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
class WorkerServiceImpl(val repo: WorkerRepository, val authRepository: UserAuthRepository) : WorkerService {
|
||||
override fun createTestData() {
|
||||
val worker = Worker(
|
||||
id = 0,
|
||||
name = "TestName",
|
||||
surname = "TestSurname",
|
||||
category = EWorkerCategory.FISIO
|
||||
)
|
||||
repo.createForUser(worker, authRepository.getByUsername("test"))
|
||||
}
|
||||
|
||||
override fun getAllWorkers(): List<Worker> {
|
||||
return repo.getAll().toList()
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package org.js.lorca_core.web.controllers
|
||||
|
||||
import lombok.AllArgsConstructor
|
||||
import org.js.lorca_core.common.models.Worker
|
||||
import org.js.lorca_core.services.WorkerService
|
||||
import org.js.lorca_core.web.advices.WebResponse
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PostMapping
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/workers")
|
||||
@AllArgsConstructor
|
||||
class WorkerController(
|
||||
val workerService: WorkerService
|
||||
) {
|
||||
@GetMapping
|
||||
fun getAllWorkers(): WebResponse<List<Worker>> {
|
||||
return WebResponse.ok(workerService.getAllWorkers())
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
fun createTestData(): WebResponse<Nothing> {
|
||||
workerService.createTestData()
|
||||
return WebResponse.ok()
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue