-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
34 changed files
with
363 additions
and
392 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
dependencies { | ||
implementation("jakarta.persistence:jakarta.persistence-api") | ||
} |
31 changes: 30 additions & 1 deletion
31
...s/bounded_context/user/domain/src/main/kotlin/club/staircrusher/user/domain/model/User.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,51 @@ | ||
package club.staircrusher.user.domain.model | ||
|
||
import jakarta.persistence.Column | ||
import jakarta.persistence.Convert | ||
import jakarta.persistence.Entity | ||
import jakarta.persistence.Id | ||
import jakarta.persistence.Table | ||
import jakarta.persistence.Transient | ||
import java.time.Instant | ||
|
||
data class User( | ||
@Entity | ||
@Table(name = "scc_user") | ||
class User( | ||
@Id | ||
val id: String, | ||
var nickname: String, | ||
@Deprecated("닉네임 로그인은 사라질 예정") var encryptedPassword: String?, | ||
var instagramId: String?, | ||
var email: String?, // FIXME: 레거시 계정이 모두 사라지면 non-nullable로 변경 | ||
@Column(columnDefinition = "TEXT") | ||
@Convert(converter = UserMobilityToolListToTextAttributeConverter::class) | ||
val mobilityTools: MutableList<UserMobilityTool>, | ||
val createdAt: Instant, | ||
) { | ||
var deletedAt: Instant? = null // private으로 둘 방법이 없을까? 지금은 persistence_model 모듈에서 써야 해서 안 된다. | ||
|
||
@get:Transient | ||
val isDeleted: Boolean | ||
get() = deletedAt != null | ||
|
||
fun delete(deletedAt: Instant) { | ||
this.deletedAt = deletedAt | ||
} | ||
|
||
override fun equals(other: Any?): Boolean { | ||
if (this === other) return true | ||
if (javaClass != other?.javaClass) return false | ||
|
||
other as User | ||
|
||
return id == other.id | ||
} | ||
|
||
override fun hashCode(): Int { | ||
return id.hashCode() | ||
} | ||
|
||
override fun toString(): String { | ||
return "User(nickname='$nickname', id='$id', encryptedPassword=$encryptedPassword, instagramId=$instagramId, email=$email, mobilityTools=$mobilityTools, createdAt=$createdAt, deletedAt=$deletedAt, isDeleted=$isDeleted)" | ||
} | ||
} |
8 changes: 7 additions & 1 deletion
8
...d_context/user/domain/src/main/kotlin/club/staircrusher/user/domain/model/UserAuthInfo.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
...otlin/club/staircrusher/user/domain/model/UserMobilityToolListToTextAttributeConverter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package club.staircrusher.user.domain.model | ||
|
||
import club.staircrusher.stdlib.jpa.ListToTextAttributeConverter | ||
import jakarta.persistence.Converter | ||
|
||
@Converter | ||
object UserMobilityToolListToTextAttributeConverter : ListToTextAttributeConverter<UserMobilityTool>() { | ||
override fun convertElementFromTextColumn(text: String): UserMobilityTool { | ||
return UserMobilityTool.valueOf(text) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 0 additions & 50 deletions
50
.../infra/src/main/kotlin/club/staircrusher/user/infra/adapter/out/persistence/Converters.kt
This file was deleted.
Oops, something went wrong.
13 changes: 13 additions & 0 deletions
13
.../kotlin/club/staircrusher/user/infra/adapter/out/persistence/JpaUserAuthInfoRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package club.staircrusher.user.infra.adapter.out.persistence | ||
|
||
import club.staircrusher.user.domain.model.UserAuthInfo | ||
import club.staircrusher.user.domain.model.UserAuthProviderType | ||
import org.springframework.data.repository.CrudRepository | ||
import org.springframework.stereotype.Repository | ||
|
||
@Repository | ||
interface JpaUserAuthInfoRepository : CrudRepository<UserAuthInfo, String> { | ||
fun findFirstByAuthProviderTypeAndExternalId(authProviderType: UserAuthProviderType, externalId: String): UserAuthInfo? | ||
fun findByUserId(userId: String): List<UserAuthInfo> | ||
fun removeByUserId(userId: String) | ||
} |
11 changes: 11 additions & 0 deletions
11
...src/main/kotlin/club/staircrusher/user/infra/adapter/out/persistence/JpaUserRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package club.staircrusher.user.infra.adapter.out.persistence | ||
|
||
import club.staircrusher.user.domain.model.User | ||
import org.springframework.data.repository.CrudRepository | ||
import org.springframework.stereotype.Repository | ||
|
||
@Repository | ||
interface JpaUserRepository : CrudRepository<User, String> { | ||
fun findFirstByNickname(nickname: String): User? | ||
fun findFirstByEmail(email: String): User? | ||
} |
32 changes: 12 additions & 20 deletions
32
...out/persistence/UserAuthInfoRepository.kt → ...ence/UserAuthInfoRepositoryImplWithJpa.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,43 @@ | ||
package club.staircrusher.user.infra.adapter.out.persistence | ||
|
||
import club.staircrusher.infra.persistence.sqldelight.DB | ||
import club.staircrusher.user.domain.model.UserAuthInfo | ||
import club.staircrusher.stdlib.di.annotation.Component | ||
import club.staircrusher.user.domain.model.UserAuthInfo | ||
import club.staircrusher.user.domain.model.UserAuthProviderType | ||
import org.springframework.data.repository.findByIdOrNull | ||
|
||
@Component | ||
class UserAuthInfoRepository( | ||
db: DB, | ||
class UserAuthInfoRepositoryImplWithJpa( | ||
private val delegatee: JpaUserAuthInfoRepository, | ||
) : club.staircrusher.user.application.port.out.persistence.UserAuthInfoRepository { | ||
private val queries = db.userAuthInfoQueries | ||
override fun save(entity: UserAuthInfo): UserAuthInfo { | ||
queries.save(entity.toPersistenceModel()) | ||
return entity | ||
return delegatee.save(entity) | ||
} | ||
|
||
override fun saveAll(entities: Collection<UserAuthInfo>) { | ||
entities.forEach(::save) | ||
delegatee.saveAll(entities) | ||
} | ||
|
||
override fun removeAll() { | ||
queries.removeAll() | ||
delegatee.deleteAll() | ||
} | ||
|
||
override fun findById(id: String): UserAuthInfo { | ||
return findByIdOrNull(id) ?: throw IllegalArgumentException("UserAuthInfo of id $id does not exist.") | ||
return delegatee.findByIdOrNull(id) ?: throw IllegalArgumentException("UserAuthInfo of id $id does not exist.") | ||
} | ||
|
||
override fun findByIdOrNull(id: String): UserAuthInfo? { | ||
return queries.findById(id = id) | ||
.executeAsOneOrNull() | ||
?.toDomainModel() | ||
return delegatee.findByIdOrNull(id) | ||
} | ||
|
||
override fun findByExternalId(authProviderType: UserAuthProviderType, externalId: String): UserAuthInfo? { | ||
return queries.findByExternalId(authProviderType, externalId) | ||
.executeAsOneOrNull() | ||
?.toDomainModel() | ||
return delegatee.findFirstByAuthProviderTypeAndExternalId(authProviderType, externalId) | ||
} | ||
|
||
override fun findByUserId(userId: String): List<UserAuthInfo> { | ||
return queries.findByUserId(userId) | ||
.executeAsList() | ||
.map { it.toDomainModel() } | ||
return delegatee.findByUserId(userId) | ||
} | ||
|
||
override fun removeByUserId(userId: String) { | ||
queries.removeByUserId(userId) | ||
delegatee.removeByUserId(userId) | ||
} | ||
} |
64 changes: 0 additions & 64 deletions
64
...ra/src/main/kotlin/club/staircrusher/user/infra/adapter/out/persistence/UserRepository.kt
This file was deleted.
Oops, something went wrong.
47 changes: 47 additions & 0 deletions
47
.../kotlin/club/staircrusher/user/infra/adapter/out/persistence/UserRepositoryImplWithJpa.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package club.staircrusher.user.infra.adapter.out.persistence | ||
|
||
import club.staircrusher.stdlib.di.annotation.Component | ||
import club.staircrusher.user.application.port.out.persistence.UserRepository | ||
import club.staircrusher.user.domain.model.User | ||
import org.springframework.data.repository.findByIdOrNull | ||
|
||
@Component | ||
class UserRepositoryImplWithJpa( | ||
private val delegatee: JpaUserRepository | ||
) : UserRepository { | ||
override fun save(entity: User): User { | ||
return delegatee.save(entity) | ||
} | ||
|
||
override fun saveAll(entities: Collection<User>) { | ||
delegatee.saveAll(entities) | ||
} | ||
|
||
override fun removeAll() { | ||
delegatee.deleteAll() | ||
} | ||
|
||
override fun findById(id: String): User { | ||
return delegatee.findByIdOrNull(id) ?: throw IllegalArgumentException("User of id $id does not exist.") | ||
} | ||
|
||
override fun findByIdOrNull(id: String): User? { | ||
return delegatee.findByIdOrNull(id) | ||
} | ||
|
||
override fun findByNickname(nickname: String): User? { | ||
return delegatee.findFirstByNickname(nickname = nickname) | ||
} | ||
|
||
override fun findByEmail(email: String): User? { | ||
return delegatee.findFirstByEmail(email = email) | ||
} | ||
|
||
override fun findByIdIn(ids: Collection<String>): List<User> { | ||
return delegatee.findAllById(ids).toList() | ||
} | ||
|
||
override fun findAll(): List<User> { | ||
return delegatee.findAll().toList() | ||
} | ||
} |
Oops, something went wrong.