User & Worker link

This commit is contained in:
Jari 2025-03-11 21:08:05 +01:00
parent 4a1b808b2c
commit 1910f30289
14 changed files with 111 additions and 31 deletions

View File

@ -1,5 +1,5 @@
package org.js.lorca_core.common.enums
enum class EWorkerCategory(name: String) {
FISIO("FISIO")
enum class EWorkerCategory {
FISIO
}

View File

@ -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
}

View File

@ -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
)

View File

@ -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?
)

View File

@ -23,7 +23,7 @@ class SecurityConfig(
http
.authorizeHttpRequests { auth ->
auth
.requestMatchers("/**").permitAll()
.requestMatchers("/auth/**").permitAll()
.anyRequest().authenticated()
}
.sessionManagement { session ->

View File

@ -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>

View File

@ -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
)

View File

@ -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>
}

View File

@ -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())
}
}

View File

@ -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>
}

View File

@ -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
)
}

View File

@ -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

View File

@ -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()
}
}

View File

@ -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()
}
}