You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
csamsserver/src/Dao.kt

226 lines
7.3 KiB

package com.gyf.csams
import org.jetbrains.exposed.dao.IntEntity
import org.jetbrains.exposed.dao.IntEntityClass
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.Column
import org.jetbrains.exposed.sql.`java-time`.CurrentDateTime
import org.jetbrains.exposed.sql.`java-time`.CurrentTimestamp
import org.jetbrains.exposed.sql.`java-time`.datetime
import java.time.LocalDateTime
@TableComment("用户")
object Users: IntIdTable(){
@TableComment("学号")
val studentId:Column<String> = varchar(name="student_id",length = 8).uniqueIndex()
@TableComment("姓名")
val name:Column<String> = varchar(name="name",length = 10)
@TableComment("密码")
val password:Column<String> = varchar(name="password",length = 32)
}
class User(id:EntityID<Int>):IntEntity(id){
companion object : IntEntityClass<User>(Users)
var studentId by Users.studentId
var name by Users.name
var password by Users.password
}
open class BaseTokens:IntIdTable(){
@TableComment("令牌")
val token:Column<String> = varchar(name="token",length = 32)
@TableComment("授权ip地址")
val ip:Column<String> = varchar(name="ip",length = 32)
@TableComment("令牌创建时间")
val createTime:Column<LocalDateTime> = datetime("create_time").defaultExpression(CurrentTimestamp())
@TableComment("授权设备")
val device:Column<String> = varchar(name="device",length = 256)
}
@TableComment("用户授权令牌")
object UserTokens: BaseTokens(){
@TableComment("授权用户")
val userId:Column<EntityID<Int>> = reference("user_id",Users)
}
class UserToken(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<UserToken>(UserTokens)
var user by User referencedOn UserTokens.userId
var token by UserTokens.token
var ip by UserTokens.ip
var createTime by UserTokens.createTime
var device by UserTokens.device
}
@TableComment("管理员授权令牌")
object ManagerTokens:BaseTokens(){
@TableComment("授权管理员")
val managerId:Column<EntityID<Int>> = reference("manager_id",Managers)
}
class ManagerToken(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<ManagerToken>(ManagerTokens)
var manager by Manager referencedOn ManagerTokens.managerId
var token by ManagerTokens.token
var ip by ManagerTokens.ip
var createTime by ManagerTokens.createTime
var device by ManagerTokens.device
}
@TableComment("留言")
object LeaveMessages:IntIdTable(){
@TableComment("留言用户")
val userId:Column<EntityID<Int>> = reference("user_id",Users)
@TableComment("留言内容")
val message:Column<String> = varchar(name = "message",length = 20)
@TableComment("留言创建时间")
val createTime:Column<LocalDateTime> = datetime("create_time").defaultExpression(CurrentDateTime())
}
class LeaveMessage(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<LeaveMessage>(LeaveMessages)
var user by User referencedOn LeaveMessages.userId
var message by LeaveMessages.message
var createTime by LeaveMessages.createTime
}
@TableComment("图片文件信息")
object ImageFiles:IntIdTable(){
@TableComment("上传用户")
val userId:Column<String> = varchar(name = "user_id",length = 10)
@TableComment("文件相对路径")
val filepath:Column<String> = varchar(name="filepath",length = 50)
@TableComment("文件hash")
val md5:Column<String> = varchar(name="md5",length = 32)
@TableComment("文件创建时间")
val createTime:Column<LocalDateTime> = datetime("create_time").defaultExpression(CurrentDateTime())
}
class ImageFile(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<ImageFile>(ImageFiles)
var userId by ImageFiles.userId
var filepath by ImageFiles.filepath
var md5 by ImageFiles.md5
var createTime by ImageFiles.createTime
}
@TableComment("社团")
object Associations:IntIdTable(){
@TableComment("社团名称")
val name:Column<String> =varchar(name = "name",length = 10)
@TableComment("社团介绍")
val desc:Column<String> =varchar(name = "desc",length = 30)
@TableComment("社团logo")
val logo:Column<EntityID<Int>> = reference("logo",ImageFiles)
@TableComment("社团审核状态")
val status:Column<Boolean> = bool(name="status").default(false)
}
class Association(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<Association>(Associations)
var name by Associations.name
var desc by Associations.desc
var logo by ImageFile referencedOn Associations.logo
var status by Associations.status
}
@TableComment("后台管理员")
object Managers:IntIdTable(){
@TableComment("帐号")
val account:Column<String> = varchar(name="account",length=10)
@TableComment("密码")
val password:Column<String> = varchar(name="password",length = 32)
@TableComment("职务")
val duty:Column<String> = varchar(name="duty",length = 32)
@TableComment("等级")
val level:Column<Int> = integer("level")
}
class Manager(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<Manager>(Managers)
var account by Managers.account
var password by Managers.password
var duty by Managers.duty
var level by Managers.level
}
@TableComment("审核记录")
object CheckForms:IntIdTable(){
@TableComment("审核类型")
val type:Column<String> = varchar(name="type",length = 10)
@TableComment("审核人")
val managerId:Column<EntityID<Int>> = reference("manager_id",Managers)
@TableComment("审核理由")
val cause:Column<String> = varchar("cause",length = 30)
@TableComment("审核对象")
val target:Column<Int> = integer("target")
@TableComment("审核时间")
val createTime:Column<LocalDateTime> = datetime("create_time").defaultExpression(CurrentDateTime())
}
class CheckForm(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<CheckForm>(CheckForms)
var type by CheckForms.type
val manager by Manager referrersOn CheckForms.managerId
var cause by CheckForms.cause
var target by CheckForms.target
}
@TableComment("通知记录")
object Notifications:IntIdTable(){
@TableComment("通知标题")
val title:Column<String> = varchar(name="title",length = 10)
@TableComment("通知内容")
val content:Column<String> = varchar(name="content",length = 30)
@TableComment("接收者")
val receiverId:Column<Int> = integer(name="receiver_id")
@TableComment("接收客户端")
val receiverClient:Column<String> = varchar(name="receiver_client",length = 10)
@TableComment("阅读状态")
val read:Column<Boolean> = bool("read").default(false)
@TableComment("拉取状态")
val pull:Column<Boolean> = bool("pull").default(false)
@TableComment("通知创建时间")
val createTime:Column<LocalDateTime> = datetime("create_time").defaultExpression(CurrentDateTime())
}
class Notification(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<Notification>(Notifications)
var title by Notifications.title
var content by Notifications.content
var receiverId by Notifications.receiverId
var receiverClient by Notifications.receiverClient
var read by Notifications.read
var pull by Notifications.pull
var createTime by Notifications.createTime
}