Skip to content

Commit

Permalink
Implemented redis compliance flow
Browse files Browse the repository at this point in the history
  • Loading branch information
ricardolopezb committed Jul 7, 2023
1 parent 2658302 commit f7f63b6
Show file tree
Hide file tree
Showing 11 changed files with 67 additions and 18 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ dependencies {
implementation 'io.projectreactor.kotlin:reactor-kotlin-extensions'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-reactor'

implementation 'org.ingsis.group6:snippet-events:0.0.4-SNAPSHOT'
implementation 'org.ingsis.group6:snippet-events:0.0.5'


// implementation("spring-mvc-redis-streams:lib:0.0.1-SNAPSHOT")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import org.springframework.metrics.export.datadog.EnableDatadogMetrics


@SpringBootApplication
//@EnableDatadogMetrics
@EnableDatadogMetrics
class SnippetManagerApplication

fun main(args: Array<String>) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ingsis.snippetmanager.domains.rule.adapter

import ingsis.snippetmanager.domains.rule.model.ComplianceState
import org.springframework.context.annotation.Bean
import org.springframework.stereotype.Component
import snippet.events.lint.LintResultStatus

@Component
class LintResultStatusToComplianceStateAdapter {
fun toComplianceState(lintResultStatus: LintResultStatus): ComplianceState {
return when (lintResultStatus) {
LintResultStatus.COMPLIANT -> ComplianceState.COMPLIANT
LintResultStatus.NON_COMPLIANT -> ComplianceState.NON_COMPLIANT
LintResultStatus.PENDING -> ComplianceState.PENDING
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ingsis.snippetmanager.domains.rule.model

enum class ComplianceState {
COMPLIANT,
NON_COMPLIANT,
PENDING
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class LinterRulesServiceImpl: LinterRulesService {
val userSnippets = this.snippetService.getSnippetsByUserId(userId)
for (snippet in userSnippets) {
val rules = LinterRules(enumValueOf<snippet.events.lint.rules.CaseConvention>(linterRulesDto.caseConvention.toString()), linterRulesDto.printExpressionsEnabled!!)
val event = LintRequestEvent(snippet.id.toString(), snippet.content!!, rules)
val event = LintRequestEvent(snippet.id!!, snippet.content!!, rules)
this.producer.publishEvent(event)

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ingsis.snippetmanager.domains.snippet.model

import ingsis.snippetmanager.domains.rule.model.ComplianceState
import ingsis.snippetmanager.domains.test.model.Test
import java.util.*
import javax.persistence.*
Expand All @@ -25,6 +26,9 @@ class Snippet {
@Column(name = "content", nullable = false)
var content: String? = null //Ahora es content, después pasa a ser un id para el bucket

@Column(name = "compliance", nullable = false)
var compliance: ComplianceState? = ComplianceState.PENDING //Ahora es content, después pasa a ser un id para el bucket

@Column(name = "createdAt", nullable = false)
var createdAt: Date? = null

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ingsis.snippetmanager.domains.snippet.service

import ingsis.snippetmanager.domains.rule.model.ComplianceState
import ingsis.snippetmanager.domains.snippet.dto.CreateSnippetDTO
import ingsis.snippetmanager.domains.snippet.dto.SnippetDTO
import ingsis.snippetmanager.domains.snippet.dto.UpdateSnippetDTO
Expand All @@ -15,4 +16,5 @@ interface SnippetService {
fun getAllSnippetsByUserId(userId: String): List<SnippetDTO>
fun getSnippetsByUserIdAndSnippetId(userId: String, snippets: List<UUID>): List<SnippetDTO>
fun validateOwnership(userId: String, snippetId: UUID)
fun setSnippetCompliance(snippetId: UUID, compliance: ComplianceState)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ingsis.snippetmanager.domains.snippet.service

import ingsis.snippetmanager.domains.rule.model.ComplianceState
import ingsis.snippetmanager.domains.snippet.dto.CreateSnippetDTO
import ingsis.snippetmanager.domains.snippet.dto.SnippetDTO
import ingsis.snippetmanager.domains.snippet.dto.UpdateSnippetDTO
Expand Down Expand Up @@ -89,4 +90,15 @@ class SnippetServiceImpl: SnippetService {
throw HTTPError("Snippet not found", HttpStatus.NOT_FOUND)
}
}

override fun setSnippetCompliance(snippetId: UUID, compliance: ComplianceState) {
print("setSnippetCompliance with state $compliance")
val snippet = this.snippetRepository.findById(snippetId)
if (snippet.isPresent) {
snippet.get().compliance = compliance
this.snippetRepository.save(snippet.get())
} else {
throw HTTPError("Snippet not found", HttpStatus.NOT_FOUND)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ingsis.snippetmanager.redis.consumer

import ingsis.snippetmanager.domains.rule.adapter.LintResultStatusToComplianceStateAdapter
import ingsis.snippetmanager.domains.snippet.service.SnippetService
import org.austral.ingsis.`class`.redis.RedisStreamConsumer
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Value
Expand All @@ -10,19 +12,23 @@ import org.springframework.data.redis.stream.StreamReceiver
import org.springframework.stereotype.Component
import snippet.events.lint.LintResultEvent
import java.time.Duration
import java.util.*

@Component
class SampleConsumer @Autowired constructor(
redis: ReactiveRedisTemplate<String, String>,
@Value("\${redis.stream.result_key}") streamKey: String,
@Value("\${redis.groups.lint}") groupId: String
@Value("\${redis.groups.lint}") groupId: String,
@Autowired private val snippetService: SnippetService,
@Autowired private val complianceAdapter: LintResultStatusToComplianceStateAdapter
) : RedisStreamConsumer<LintResultEvent>(streamKey, groupId, redis) {

init {
subscription()
}
override fun onMessage(record: ObjectRecord<String, LintResultEvent>) {
println("Received event of snippet ${record.value.snippetId} with status ${record.value.status}")
snippetService.setSnippetCompliance(record.value.snippetId, complianceAdapter.toComplianceState(record.value.status))
}

override fun options(): StreamReceiver.StreamReceiverOptions<String, ObjectRecord<String, LintResultEvent>> {
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
spring.datasource.url=jdbc:postgresql://localhost:5433/db
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.hibernate.ddl-auto= update
spring.jpa.hibernate.ddl-auto= create
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.format_sql=false
Expand Down
27 changes: 14 additions & 13 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,20 @@ logging:
springframework:
security: DEBUG

#redis:
# stream:
# key: ${REDIS_STREAM_KEY}
# host: ${REDIS_HOST}
# port: ${REDIS_PORT}
# groups:
# lint: ${REDIS_STREAM_GROUP_LINT}

redis:
stream:
result_key: result
request_key: request
host: localhost
port: 6379
result_key: ${REDIS_STREAM_RESULT_KEY}
request_key: ${REDIS_STREAM_REQUEST_KEY}
host: ${REDIS_HOST}
port: ${REDIS_PORT}
groups:
lint: manager-lint
lint: ${REDIS_STREAM_GROUP_LINT}

#redis:
# stream:
# result_key: result
# request_key: request
# host: localhost
# port: 6379
# groups:
# lint: manager-lint

0 comments on commit f7f63b6

Please sign in to comment.