From 1910f30289955d36ce531d4a674a06da6bb6a3cc Mon Sep 17 00:00:00 2001 From: Jari Date: Tue, 11 Mar 2025 21:08:05 +0100 Subject: [PATCH] User & Worker link --- .../common/enums/EWorkerCategory.kt | 4 +-- .../lorca_core/common/mappers/WorkerMapper.kt | 6 +++- .../org/js/lorca_core/common/models/Worker.kt | 4 ++- .../common/responses/LoginResponse.kt | 5 +++- .../js/lorca_core/config/SecurityConfig.kt | 2 +- .../org/js/lorca_core/db/WorkerCategoryJpa.kt | 6 ++++ .../js/lorca_core/db/entities/WorkerEntity.kt | 8 +++--- .../repositories/WorkerRepository.kt | 3 ++ .../repositories/impl/WorkerRepositoryImpl.kt | 12 ++++++++ .../js/lorca_core/services/WorkerService.kt | 8 ++++++ .../impl/AuthenticationServiceImpl.kt | 10 +++++-- .../services/impl/JwtServiceImpl.kt | 21 ++------------ .../services/impl/WorkerServiceImpl.kt | 25 +++++++++++++++++ .../web/controllers/WorkerController.kt | 28 +++++++++++++++++++ 14 files changed, 111 insertions(+), 31 deletions(-) create mode 100644 src/main/kotlin/org/js/lorca_core/db/WorkerCategoryJpa.kt create mode 100644 src/main/kotlin/org/js/lorca_core/services/WorkerService.kt create mode 100644 src/main/kotlin/org/js/lorca_core/services/impl/WorkerServiceImpl.kt create mode 100644 src/main/kotlin/org/js/lorca_core/web/controllers/WorkerController.kt diff --git a/src/main/kotlin/org/js/lorca_core/common/enums/EWorkerCategory.kt b/src/main/kotlin/org/js/lorca_core/common/enums/EWorkerCategory.kt index 1fc7171..9ffd36c 100644 --- a/src/main/kotlin/org/js/lorca_core/common/enums/EWorkerCategory.kt +++ b/src/main/kotlin/org/js/lorca_core/common/enums/EWorkerCategory.kt @@ -1,5 +1,5 @@ package org.js.lorca_core.common.enums -enum class EWorkerCategory(name: String) { - FISIO("FISIO") +enum class EWorkerCategory { + FISIO } \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/common/mappers/WorkerMapper.kt b/src/main/kotlin/org/js/lorca_core/common/mappers/WorkerMapper.kt index 22b8bfb..b498c9a 100644 --- a/src/main/kotlin/org/js/lorca_core/common/mappers/WorkerMapper.kt +++ b/src/main/kotlin/org/js/lorca_core/common/mappers/WorkerMapper.kt @@ -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 \ No newline at end of file +interface WorkerMapper : GenericMapper { + @Mapping(target = "authUser", ignore = true) + override fun toEntity(model: Worker): WorkerEntity +} \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/common/models/Worker.kt b/src/main/kotlin/org/js/lorca_core/common/models/Worker.kt index 74c311c..0425a5d 100644 --- a/src/main/kotlin/org/js/lorca_core/common/models/Worker.kt +++ b/src/main/kotlin/org/js/lorca_core/common/models/Worker.kt @@ -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 ) \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/common/responses/LoginResponse.kt b/src/main/kotlin/org/js/lorca_core/common/responses/LoginResponse.kt index 3dbfc05..ad683d2 100644 --- a/src/main/kotlin/org/js/lorca_core/common/responses/LoginResponse.kt +++ b/src/main/kotlin/org/js/lorca_core/common/responses/LoginResponse.kt @@ -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? ) \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/config/SecurityConfig.kt b/src/main/kotlin/org/js/lorca_core/config/SecurityConfig.kt index 10fc2a0..ccab33f 100644 --- a/src/main/kotlin/org/js/lorca_core/config/SecurityConfig.kt +++ b/src/main/kotlin/org/js/lorca_core/config/SecurityConfig.kt @@ -23,7 +23,7 @@ class SecurityConfig( http .authorizeHttpRequests { auth -> auth - .requestMatchers("/**").permitAll() + .requestMatchers("/auth/**").permitAll() .anyRequest().authenticated() } .sessionManagement { session -> diff --git a/src/main/kotlin/org/js/lorca_core/db/WorkerCategoryJpa.kt b/src/main/kotlin/org/js/lorca_core/db/WorkerCategoryJpa.kt new file mode 100644 index 0000000..1f2a44e --- /dev/null +++ b/src/main/kotlin/org/js/lorca_core/db/WorkerCategoryJpa.kt @@ -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 \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/db/entities/WorkerEntity.kt b/src/main/kotlin/org/js/lorca_core/db/entities/WorkerEntity.kt index decd606..6f323ab 100644 --- a/src/main/kotlin/org/js/lorca_core/db/entities/WorkerEntity.kt +++ b/src/main/kotlin/org/js/lorca_core/db/entities/WorkerEntity.kt @@ -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 ) \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/repositories/WorkerRepository.kt b/src/main/kotlin/org/js/lorca_core/repositories/WorkerRepository.kt index 74c1c26..36bdde6 100644 --- a/src/main/kotlin/org/js/lorca_core/repositories/WorkerRepository.kt +++ b/src/main/kotlin/org/js/lorca_core/repositories/WorkerRepository.kt @@ -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 } diff --git a/src/main/kotlin/org/js/lorca_core/repositories/impl/WorkerRepositoryImpl.kt b/src/main/kotlin/org/js/lorca_core/repositories/impl/WorkerRepositoryImpl.kt index fcd8469..6a38d61 100644 --- a/src/main/kotlin/org/js/lorca_core/repositories/impl/WorkerRepositoryImpl.kt +++ b/src/main/kotlin/org/js/lorca_core/repositories/impl/WorkerRepositoryImpl.kt @@ -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 { + return mapper.toModels(jpa.findAll()) + } + } \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/services/WorkerService.kt b/src/main/kotlin/org/js/lorca_core/services/WorkerService.kt new file mode 100644 index 0000000..96f8511 --- /dev/null +++ b/src/main/kotlin/org/js/lorca_core/services/WorkerService.kt @@ -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 +} \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/services/impl/AuthenticationServiceImpl.kt b/src/main/kotlin/org/js/lorca_core/services/impl/AuthenticationServiceImpl.kt index 9f76fa4..0e006d3 100644 --- a/src/main/kotlin/org/js/lorca_core/services/impl/AuthenticationServiceImpl.kt +++ b/src/main/kotlin/org/js/lorca_core/services/impl/AuthenticationServiceImpl.kt @@ -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 ) } diff --git a/src/main/kotlin/org/js/lorca_core/services/impl/JwtServiceImpl.kt b/src/main/kotlin/org/js/lorca_core/services/impl/JwtServiceImpl.kt index b829174..77636c6 100644 --- a/src/main/kotlin/org/js/lorca_core/services/impl/JwtServiceImpl.kt +++ b/src/main/kotlin/org/js/lorca_core/services/impl/JwtServiceImpl.kt @@ -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 = mapOf() + val extraClaims: MutableMap = 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 diff --git a/src/main/kotlin/org/js/lorca_core/services/impl/WorkerServiceImpl.kt b/src/main/kotlin/org/js/lorca_core/services/impl/WorkerServiceImpl.kt new file mode 100644 index 0000000..598cbd6 --- /dev/null +++ b/src/main/kotlin/org/js/lorca_core/services/impl/WorkerServiceImpl.kt @@ -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 { + return repo.getAll().toList() + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/js/lorca_core/web/controllers/WorkerController.kt b/src/main/kotlin/org/js/lorca_core/web/controllers/WorkerController.kt new file mode 100644 index 0000000..f29e5b4 --- /dev/null +++ b/src/main/kotlin/org/js/lorca_core/web/controllers/WorkerController.kt @@ -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> { + return WebResponse.ok(workerService.getAllWorkers()) + } + + @PostMapping + fun createTestData(): WebResponse { + workerService.createTestData() + return WebResponse.ok() + } +} \ No newline at end of file