User & Worker link
This commit is contained in:
parent
4a1b808b2c
commit
1910f30289
|
|
@ -1,5 +1,5 @@
|
||||||
package org.js.lorca_core.common.enums
|
package org.js.lorca_core.common.enums
|
||||||
|
|
||||||
enum class EWorkerCategory(name: String) {
|
enum class EWorkerCategory {
|
||||||
FISIO("FISIO")
|
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.common.models.Worker
|
||||||
import org.js.lorca_core.db.entities.WorkerEntity
|
import org.js.lorca_core.db.entities.WorkerEntity
|
||||||
import org.mapstruct.Mapper
|
import org.mapstruct.Mapper
|
||||||
|
import org.mapstruct.Mapping
|
||||||
|
|
||||||
@Mapper(componentModel = "spring")
|
@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
|
package org.js.lorca_core.common.models
|
||||||
|
|
||||||
|
import org.js.lorca_core.common.enums.EWorkerCategory
|
||||||
|
|
||||||
data class Worker(
|
data class Worker(
|
||||||
var id: Long,
|
var id: Long,
|
||||||
var name: String,
|
var name: String,
|
||||||
var surname: String,
|
var surname: String,
|
||||||
val category: WorkerCategory
|
val category: EWorkerCategory
|
||||||
)
|
)
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
package org.js.lorca_core.common.responses
|
package org.js.lorca_core.common.responses
|
||||||
|
|
||||||
|
import org.js.lorca_core.common.models.Worker
|
||||||
|
|
||||||
data class LoginResponse(
|
data class LoginResponse(
|
||||||
val token: String
|
val token: String,
|
||||||
|
val userInfo: Worker?
|
||||||
)
|
)
|
||||||
|
|
@ -23,7 +23,7 @@ class SecurityConfig(
|
||||||
http
|
http
|
||||||
.authorizeHttpRequests { auth ->
|
.authorizeHttpRequests { auth ->
|
||||||
auth
|
auth
|
||||||
.requestMatchers("/**").permitAll()
|
.requestMatchers("/auth/**").permitAll()
|
||||||
.anyRequest().authenticated()
|
.anyRequest().authenticated()
|
||||||
}
|
}
|
||||||
.sessionManagement { session ->
|
.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
|
package org.js.lorca_core.db.entities
|
||||||
|
|
||||||
import jakarta.persistence.*
|
import jakarta.persistence.*
|
||||||
|
import org.js.lorca_core.common.enums.EWorkerCategory
|
||||||
|
|
||||||
@Entity(name = "workers")
|
@Entity(name = "workers")
|
||||||
data class WorkerEntity(
|
data class WorkerEntity(
|
||||||
|
|
@ -8,8 +9,7 @@ data class WorkerEntity(
|
||||||
var id: Long = 0L,
|
var id: Long = 0L,
|
||||||
var name: String,
|
var name: String,
|
||||||
var surname: String,
|
var surname: String,
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
var category: EWorkerCategory,
|
||||||
val category: WorkerCategoryEntity,
|
@OneToOne
|
||||||
@OneToOne(fetch = FetchType.LAZY)
|
var authUser: UserAuthEntity
|
||||||
val authUser: UserAuthEntity
|
|
||||||
)
|
)
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
package org.js.lorca_core.repositories
|
package org.js.lorca_core.repositories
|
||||||
|
|
||||||
import org.js.lorca_core.common.models.Worker
|
import org.js.lorca_core.common.models.Worker
|
||||||
|
import org.js.lorca_core.db.entities.UserAuthEntity
|
||||||
|
|
||||||
interface WorkerRepository {
|
interface WorkerRepository {
|
||||||
fun getByUsername(username: String): Worker?
|
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.mappers.WorkerMapper
|
||||||
import org.js.lorca_core.common.models.Worker
|
import org.js.lorca_core.common.models.Worker
|
||||||
import org.js.lorca_core.db.WorkerJpa
|
import org.js.lorca_core.db.WorkerJpa
|
||||||
|
import org.js.lorca_core.db.entities.UserAuthEntity
|
||||||
import org.js.lorca_core.repositories.WorkerRepository
|
import org.js.lorca_core.repositories.WorkerRepository
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
import kotlin.jvm.optionals.getOrNull
|
import kotlin.jvm.optionals.getOrNull
|
||||||
|
|
@ -17,4 +18,15 @@ class WorkerRepositoryImpl(
|
||||||
return if (user != null) mapper.toModel(user) else null
|
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.common.responses.LoginResponse
|
||||||
import org.js.lorca_core.db.entities.UserAuthEntity
|
import org.js.lorca_core.db.entities.UserAuthEntity
|
||||||
import org.js.lorca_core.repositories.UserAuthRepository
|
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.AuthenticationService
|
||||||
import org.js.lorca_core.services.JwtService
|
import org.js.lorca_core.services.JwtService
|
||||||
import org.springframework.security.authentication.AuthenticationManager
|
import org.springframework.security.authentication.AuthenticationManager
|
||||||
|
|
@ -19,7 +20,8 @@ class AuthenticationServiceImpl(
|
||||||
private val userAuthRepository: UserAuthRepository,
|
private val userAuthRepository: UserAuthRepository,
|
||||||
private val authenticationManager: AuthenticationManager,
|
private val authenticationManager: AuthenticationManager,
|
||||||
private val passwordEncoder: PasswordEncoder,
|
private val passwordEncoder: PasswordEncoder,
|
||||||
private val jwtService: JwtService
|
private val jwtService: JwtService,
|
||||||
|
private val workerRepository: WorkerRepository
|
||||||
) : AuthenticationService {
|
) : AuthenticationService {
|
||||||
|
|
||||||
override fun register(dto: UserAuthDto): Boolean {
|
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(
|
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.common.enums.EUserRoles
|
||||||
import org.js.lorca_core.db.entities.UserAuthEntity
|
import org.js.lorca_core.db.entities.UserAuthEntity
|
||||||
import org.js.lorca_core.repositories.UserAuthRepository
|
import org.js.lorca_core.repositories.UserAuthRepository
|
||||||
import org.js.lorca_core.repositories.WorkerRepository
|
|
||||||
import org.js.lorca_core.services.JwtService
|
import org.js.lorca_core.services.JwtService
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
import org.springframework.security.core.userdetails.UserDetails
|
import org.springframework.security.core.userdetails.UserDetails
|
||||||
|
|
@ -18,8 +17,7 @@ import javax.crypto.SecretKey
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
class JwtServiceImpl(
|
class JwtServiceImpl(
|
||||||
private val userAuthRepository: UserAuthRepository,
|
private val userAuthRepository: UserAuthRepository
|
||||||
private val workerRepository: WorkerRepository
|
|
||||||
) : JwtService {
|
) : JwtService {
|
||||||
|
|
||||||
@Value("\${security.jwt.secret-key}")
|
@Value("\${security.jwt.secret-key}")
|
||||||
|
|
@ -38,25 +36,12 @@ class JwtServiceImpl(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun generateToken(userDetails: UserDetails): String {
|
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 ->
|
getClaimsForUser(userAuthRepository.getByUsername(userDetails.username)).let { claims ->
|
||||||
if (claims.isNotEmpty()) {
|
if (claims.isNotEmpty()) {
|
||||||
extraClaims.plus(
|
extraClaims["roles"] = claims
|
||||||
Pair(
|
|
||||||
"roles",
|
|
||||||
claims
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
workerRepository.getByUsername(userDetails.username)?.let {
|
|
||||||
extraClaims.plus(
|
|
||||||
Pair(
|
|
||||||
"user",
|
|
||||||
it
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return generateToken(
|
return generateToken(
|
||||||
extraClaims, userDetails
|
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