Skip to content

Commit b7bee9b

Browse files
committed
feat: Database: Exposed: 添加 UUID 列
1 parent e6e1e71 commit b7bee9b

File tree

9 files changed

+75
-8
lines changed

9 files changed

+75
-8
lines changed

database-exposed/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ dependencies {
2222
api 'org.jetbrains.exposed:exposed-spring-boot-starter:0.36.2'
2323
// api 'org.jetbrains.exposed:exposed-kotlin-datetime:0.36.2'
2424
api 'org.jetbrains.exposed:exposed-java-time:0.36.2'
25+
26+
api project(path: ':support')
2527
}
2628

2729
test {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.tairitsu.ignotus.database.exposed.model.entity
2+
3+
import com.tairitsu.ignotus.database.exposed.model.table.BaseLongIdWithUUIDTable
4+
import org.jetbrains.exposed.dao.*
5+
import org.jetbrains.exposed.dao.id.EntityID
6+
import java.time.LocalDateTime
7+
8+
abstract class BaseLongIdWithUUIDEntity(id: EntityID<Long>, table: BaseLongIdWithUUIDTable) : LongEntity(id) {
9+
val uuid by table.uuid
10+
val createdAt by table.createdAt
11+
var updatedAt by table.updatedAt
12+
}
13+
14+
abstract class BaseLongIdWithUUIDEntityClass<E : BaseLongIdWithUUIDEntity>(table: BaseLongIdWithUUIDTable) :
15+
LongEntityClass<E>(table) {
16+
init {
17+
EntityHook.subscribe { action ->
18+
if (action.changeType == EntityChangeType.Updated || action.changeType == EntityChangeType.Created) {
19+
try {
20+
action.toEntity(this)?.updatedAt = LocalDateTime.now()
21+
} catch (ignored: Exception) {
22+
//nothing much to do here
23+
}
24+
}
25+
}
26+
}
27+
}

database-exposed/src/main/java/com/tairitsu/ignotus/database/exposed/model/table/BaseLongIdTable.kt

+1
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ abstract class BaseLongIdTable(name: String) : LongIdTable(name) {
1111
val createdAt = datetime("created_at").clientDefault { LocalDateTime.now() }
1212
val updatedAt = datetime("updated_at").nullable()
1313
}
14+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.tairitsu.ignotus.database.exposed.model.table
2+
3+
import com.tairitsu.ignotus.support.util.UUIDUtils
4+
import org.jetbrains.exposed.dao.id.LongIdTable
5+
import org.jetbrains.exposed.sql.javatime.datetime
6+
import java.time.LocalDateTime
7+
8+
abstract class BaseLongIdWithUUIDTable(name: String) : LongIdTable(name) {
9+
val uuid = varchar("uuid", 36).clientDefault { UUIDUtils.createNoLeadingDigitId() }.uniqueIndex()
10+
val createdAt = datetime("created_at").clientDefault { LocalDateTime.now() }
11+
val updatedAt = datetime("updated_at").nullable()
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package moe.bit.ignotusdemo.config
2+
3+
import moe.bit.ignotusdemo.model.table.GroupTable
4+
import moe.bit.ignotusdemo.model.table.UserTable
5+
import org.jetbrains.exposed.spring.SpringTransactionManager
6+
import org.jetbrains.exposed.sql.SchemaUtils
7+
import org.jetbrains.exposed.sql.transactions.transaction
8+
import org.springframework.stereotype.Component
9+
import javax.annotation.PostConstruct
10+
11+
@Component
12+
class AutoMigration(springTransactionManager: SpringTransactionManager) {
13+
@PostConstruct
14+
fun init() {
15+
transaction {
16+
SchemaUtils.create(UserTable)
17+
SchemaUtils.create(GroupTable)
18+
}
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package moe.bit.ignotusdemo.model.entity
22

3+
import com.tairitsu.ignotus.database.exposed.model.entity.BaseLongIdWithUUIDEntity
4+
import com.tairitsu.ignotus.database.exposed.model.entity.BaseLongIdWithUUIDEntityClass
35
import moe.bit.ignotusdemo.model.table.UserTable
4-
import com.tairitsu.ignotus.database.exposed.model.entity.BaseLongIdEntity
5-
import com.tairitsu.ignotus.database.exposed.model.entity.BaseLongIdEntityClass
66
import org.jetbrains.exposed.dao.id.EntityID
77
import java.util.function.Consumer
88

9-
class UserEntity(id: EntityID<Long>) : BaseLongIdEntity(id, UserTable) {
10-
companion object : BaseLongIdEntityClass<UserEntity>(UserTable) {
9+
class UserEntity(id: EntityID<Long>) : BaseLongIdWithUUIDEntity(id, UserTable) {
10+
companion object : BaseLongIdWithUUIDEntityClass<UserEntity>(UserTable) {
1111
@JvmStatic
1212
fun create(init: Consumer<UserEntity>) = new { init.accept(this) }
1313
}
@@ -16,4 +16,3 @@ class UserEntity(id: EntityID<Long>) : BaseLongIdEntity(id, UserTable) {
1616
var password by UserTable.password
1717
var lastLoginAt by UserTable.lastLoginAt
1818
}
19-

spring-boot-demo/src/main/java/moe/bit/ignotusdemo/model/table/UserTable.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package moe.bit.ignotusdemo.model.table
22

3-
import com.tairitsu.ignotus.database.exposed.model.table.BaseLongIdTable
3+
import com.tairitsu.ignotus.database.exposed.model.table.BaseLongIdWithUUIDTable
44
import org.jetbrains.exposed.sql.Column
55
import org.jetbrains.exposed.sql.javatime.datetime
66
import java.time.LocalDateTime
77

8-
object UserTable : BaseLongIdTable("users") {
8+
object UserTable : BaseLongIdWithUUIDTable("users") {
99
val username: Column<String> = varchar("username", 256)
1010
val password: Column<String> = varchar("password", 256)
1111
val lastLoginAt: Column<LocalDateTime?> = datetime("last_login_at").nullable()

spring-boot-demo/src/main/java/moe/bit/ignotusdemo/model/vo/UserVo.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class UserVo : BaseResponse {
1414
var updatedAt: LocalDateTime? = null
1515

1616
constructor(userEntity: UserEntity) {
17-
this.id = userEntity.id.toString()
17+
this.id = userEntity.uuid
1818
this.username = userEntity.username
1919
this.createdAt = userEntity.createdAt
2020
this.updatedAt = userEntity.updatedAt

support/src/main/java/com/tairitsu/ignotus/support/util/Miscellaneous.kt

+6
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ package com.tairitsu.ignotus.support.util
33
import java.util.*
44

55
object UUIDUtils {
6+
/**
7+
* 创建一个去除横杠的 UUID。
8+
*/
69
@JvmStatic
710
fun createModelId(): String = UUID.randomUUID().toString().replace("-", "")
811

12+
/**
13+
* 创建一个起始字符不为数字的去横杠的 UUID。
14+
*/
915
@JvmStatic
1016
fun createNoLeadingDigitId(): String {
1117
var ret = createModelId()

0 commit comments

Comments
 (0)