Skip to content

Commit

Permalink
infra external accessibility
Browse files Browse the repository at this point in the history
  • Loading branch information
sanggggg committed Jul 5, 2024
1 parent 596b560 commit d321a2b
Show file tree
Hide file tree
Showing 11 changed files with 141 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
dependencies {
implementation(projects.apiSpecification.domainEvent)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package club.staircrusher.external_accessibility.application.port.out.persistence

import club.staircrusher.external_accessibility.domain.model.ExternalAccessibility
import club.staircrusher.stdlib.domain.repository.EntityRepository

@Suppress("TooManyFunctions")
interface ExternalAccessibilityRepository : EntityRepository<ExternalAccessibility, String> {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
dependencies {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package club.staircrusher.external_accessibility.domain.model

import java.time.Instant

data class ExternalAccessibility(
val id: String,
val name: String,
val latitude: Double,
val longitude: Double,
val address: String,
val createdAt: Instant,
val updatedAt: Instant,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
plugins {
id("io.spring.dependency-management")
id("org.springframework.boot")
}

dependencies {
api(projects.apiSpecification.api)
api(projects.apiSpecification.domainEvent)
implementation(projects.crossCuttingConcern.infra.persistenceModel)
implementation("org.springframework.boot:spring-boot-starter-web")

integrationTestImplementation(projects.crossCuttingConcern.test.springIt)

val awsSdkVersion: String by project
implementation("software.amazon.awssdk:s3:$awsSdkVersion")
runtimeOnly("software.amazon.awssdk:sts:$awsSdkVersion") // IRSA를 사용하기 위해서 필요함

testImplementation(projects.boundedContext.externalAccessibility.application)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package club.staircrusher.external_accessibility.infra.adapter.out.persistence

import club.staircrusher.external_accessibility.application.port.out.persistence.ExternalAccessibilityRepository
import club.staircrusher.external_accessibility.domain.model.ExternalAccessibility
import club.staircrusher.external_accessibility.infra.adapter.out.persistence.sqldelight.toDomainModel
import club.staircrusher.external_accessibility.infra.adapter.out.persistence.sqldelight.toPersistenceModel
import club.staircrusher.infra.persistence.sqldelight.DB
import club.staircrusher.stdlib.di.annotation.Component

@Suppress("TooManyFunctions")
@Component
class ExternalAccessibilityRepository(
val db: DB
) : ExternalAccessibilityRepository {
private val queries = db.externalAccessibilityQueries

override fun findById(id: String): ExternalAccessibility {
return findByIdOrNull(id) ?: throw IllegalArgumentException("ExternalAccessibility of id $id does not exist.")
}

override fun findByIdOrNull(id: String): ExternalAccessibility? {
return queries.findById(id)
.executeAsOneOrNull()
?.toDomainModel()
}

override fun removeAll() {
queries.removeAll()
}

override fun saveAll(entities: Collection<ExternalAccessibility>) {
entities.forEach { save(it) }
}

override fun save(entity: ExternalAccessibility): ExternalAccessibility {
queries.save(entity.toPersistenceModel())
return entity
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package club.staircrusher.external_accessibility.infra.adapter.out.persistence.sqldelight

import club.staircrusher.external_accessibility.domain.model.ExternalAccessibility
import club.staircrusher.infra.persistence.sqldelight.migration.External_accessibility
import club.staircrusher.stdlib.time.toOffsetDateTime
import java.time.Instant


fun External_accessibility.toDomainModel(): ExternalAccessibility = ExternalAccessibility(
id = id,
name = name,
latitude = location_x,
longitude = location_y,
address = address,
createdAt = created_at.toInstant(),
updatedAt = updated_at.toInstant(),
)

fun ExternalAccessibility.toPersistenceModel(): External_accessibility = External_accessibility(
id = id,
name = name,
location_x = latitude,
location_y = longitude,
address = address,
created_at = Instant.now().toOffsetDateTime(),
updated_at = Instant.now().toOffsetDateTime(),
)
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ dependencies {
implementation(projects.boundedContext.challenge.domain)
implementation(projects.boundedContext.quest.domain)
implementation(projects.boundedContext.user.domain)
implementation(projects.boundedContext.externalAccessibility.domain)

val sqlDelightVersion: String by project
api("app.cash.sqldelight:runtime-jvm:$sqlDelightVersion")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ class DB(dataSource: DataSource) : TransactionManager {
val challengeContributionQueries = scc.challengeContributionQueries
val challengeParticipationQueries = scc.challengeParticipationQueries
val challengeRankQueries = scc.challengeRankQueries
val externalAccessibilityQueries = scc.externalAccessibilityQueries


override fun <T> doInTransaction(block: Transaction<T>.() -> T): T {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
CREATE TABLE IF NOT EXISTS external_accessibility (
id VARCHAR(36) NOT NULL,
name VARCHAR(64) NOT NULL,
location_x FLOAT8 NOT NULL,
location_y FLOAT8 NOT NULL,

address VARCHAR(64) NOT NULL,
created_at TIMESTAMP(6) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(6) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
save:
INSERT INTO external_accessibility
VALUES :external_accessibility
ON CONFLICT(id) DO UPDATE SET
name = EXCLUDED.name,
location_x = EXCLUDED.location_x,
location_y = EXCLUDED.location_y,
address = EXCLUDED.address,
created_at = EXCLUDED.created_at,
updated_at = NULL;

removeAll:
DELETE FROM external_accessibility;

findById:
SELECT *
FROM external_accessibility
WHERE external_accessibility.id = :id;

0 comments on commit d321a2b

Please sign in to comment.