@@ -3,21 +3,28 @@ package com.saveourtool.save.backend.service.vulnerability
33import com.saveourtool.save.authservice.utils.AuthenticationDetails
44import com.saveourtool.save.backend.repository.OrganizationRepository
55import com.saveourtool.save.backend.repository.UserRepository
6+ import com.saveourtool.save.backend.repository.vulnerability.VulnerabilityDateRepository
67import com.saveourtool.save.backend.repository.vulnerability.VulnerabilityProjectRepository
78import com.saveourtool.save.backend.repository.vulnerability.VulnerabilityRepository
89import com.saveourtool.save.entities.vulnerabilities.Vulnerability
10+ import com.saveourtool.save.entities.vulnerabilities.VulnerabilityDate
911import com.saveourtool.save.entities.vulnerabilities.VulnerabilityProject
12+ import com.saveourtool.save.entities.vulnerability.VulnerabilityDateDto
1013import com.saveourtool.save.entities.vulnerability.VulnerabilityDto
1114import com.saveourtool.save.entities.vulnerability.VulnerabilityProjectDto
1215import com.saveourtool.save.filters.VulnerabilityFilter
1316import com.saveourtool.save.utils.getByIdOrNotFound
1417import com.saveourtool.save.utils.orNotFound
18+
1519import org.springframework.security.core.Authentication
1620import org.springframework.stereotype.Service
1721import org.springframework.transaction.annotation.Transactional
1822import org.springframework.web.server.ResponseStatusException
23+
1924import java.time.LocalDateTime
25+
2026import kotlin.random.Random
27+ import kotlinx.datetime.toJavaLocalDateTime
2128
2229/* *
2330 * A service that provides `Vulnerability`
@@ -27,6 +34,7 @@ import kotlin.random.Random
2734class VulnerabilityService (
2835 private val vulnerabilityRepository : VulnerabilityRepository ,
2936 private val vulnerabilityProjectRepository : VulnerabilityProjectRepository ,
37+ private val vulnerabilityDateRepository : VulnerabilityDateRepository ,
3038 private val userRepository : UserRepository ,
3139 private val organizationRepository : OrganizationRepository ,
3240) {
@@ -151,6 +159,7 @@ class VulnerabilityService(
151159 isActive = false ,
152160 userId = user.requiredId(),
153161 organization = organizationNew,
162+ dates = emptySet(),
154163 )
155164 val vulnerabilityNew = vulnerabilityRepository.saveAndFlush(vulnerability)
156165 val newName = " SOTV-${LocalDateTime .now().year} -${vulnerabilityNew.id} "
@@ -167,6 +176,14 @@ class VulnerabilityService(
167176 vulnerability = vulnerabilityNew,
168177 )
169178 }
179+ dates = vulnerabilityDto.dates.map { dto ->
180+ VulnerabilityDate (
181+ date = dto.date.toJavaLocalDateTime(),
182+ type = dto.type,
183+ vulnerability = vulnerabilityNew,
184+ userId = user.requiredId(),
185+ )
186+ }.toSet()
170187 }
171188 )
172189 }
@@ -251,6 +268,32 @@ class VulnerabilityService(
251268 }
252269 }
253270
271+ /* *
272+ * @param vulnerabilityDateDto dto of vulnerability date
273+ * @param authentication - auth info of a current user
274+ */
275+ @Transactional
276+ fun saveDate (
277+ vulnerabilityDateDto : VulnerabilityDateDto ,
278+ authentication : Authentication ,
279+ ) {
280+ val userId = (authentication.details as AuthenticationDetails ).id
281+ val user = userRepository.getByIdOrNotFound(userId)
282+
283+ vulnerabilityRepository.findByName(vulnerabilityDateDto.vulnerabilityName)?.let { vulnerability ->
284+ vulnerabilityDateRepository.save(
285+ vulnerabilityDateDto.let { dto ->
286+ VulnerabilityDate (
287+ date = dto.date.toJavaLocalDateTime(),
288+ type = dto.type,
289+ vulnerability = vulnerability,
290+ userId = user.requiredId(),
291+ )
292+ }
293+ )
294+ }
295+ }
296+
254297 /* *
255298 * @param name name of project
256299 * @param vulnerabilityName name of vulnerability
0 commit comments