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

277 lines
9.2 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
open class Person:IntIdTable(){
@TableComment("姓名")
val name:Column<String> = varchar(name="name",length = 10)
@TableComment("密码")
val password:Column<String> = varchar(name="password",length = 32)
@TableComment("个人简介")
val desc:Column<String> = varchar(name="desc",length = 20).default("")
@TableComment("头像")
val imgId:Column<EntityID<Int>?> = reference("img_id", ImageFiles).nullable()
}
@TableComment("用户")
object Users: Person(){
@TableComment("学号")
val studentId:Column<String> = varchar(name="student_id",length = 8).uniqueIndex()
}
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
var desc by Users.desc
val headImg by ImageFile optionalReferencedOn Users.imgId
}
@TableComment("后台管理员")
object Managers:Person(){
@TableComment("帐号")
val account:Column<String> = varchar(name="account",length=10)
@TableComment("职务")
val duty:Column<String> = varchar(name="duty",length = 32)
}
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 desc by Managers.desc
var name by Managers.name
val headImg by ImageFile optionalReferencedOn Managers.imgId
}
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 logId:Column<EntityID<Int>> = reference("log_id",AuditLeggings)
@TableComment("社团级别")
val level:Column<String?> = varchar(name="level",length = 1).nullable()
@TableComment("所属院系")
val faculty:Column<String> = varchar(name="faculty",length = 20)
}
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 log by AuditLogging referencedOn Associations.logId
val level by Associations.level
var faculty by Associations.faculty
}
@TableComment("社团成员信息")
object AssociationMembers:IntIdTable(){
@TableComment("社团成员id")
val userId:Column<EntityID<Int>> = reference("user_id",Users)
@TableComment("社团Id")
val associationId:Column<EntityID<Int>> = reference("association_id",Associations)
@TableComment("是否团长")
val isHead:Column<Boolean> = bool("is_head")
}
class AssociationMember(id:EntityID<Int>):IntEntity(id) {
companion object : IntEntityClass<AssociationMember>(AssociationMembers)
var user by User referencedOn AssociationMembers.userId
var association by Association referencedOn AssociationMembers.associationId
var isHead by AssociationMembers.isHead
}
@TableComment("审核记录")
object AuditLeggings:IntIdTable(){
@TableComment("申请人")
val userId: Column<EntityID<Int>> = reference("user_id",Users)
@TableComment("申请时间")
val applyTime:Column<LocalDateTime> = datetime("apply_time").defaultExpression(CurrentDateTime())
@TableComment("负责人")
val managerId: Column<EntityID<Int>?> = reference("manager_id",Managers).nullable()
@TableComment("受理时间")
val acceptTime:Column<LocalDateTime?> = datetime("accept_time").nullable()
@TableComment("审核理由")
val cause:Column<String?> = varchar("cause",length = 30).nullable()
@TableComment("审核结果")
val result:Column<Boolean?> = bool("result").nullable()
@TableComment("审核时间")
val auditTime:Column<LocalDateTime?> = datetime("audit_time").nullable()
@TableComment("复审记录")
val nextAudit:Column<EntityID<Int>?> = reference("next_audit",AuditLeggings).nullable()
}
class AuditLogging(id:EntityID<Int>):IntEntity(id){
companion object:IntEntityClass<AuditLogging>(AuditLeggings)
var user by User referencedOn AuditLeggings.userId
var applyTime by AuditLeggings.applyTime
var manager by Manager optionalReferencedOn AuditLeggings.managerId
var acceptTime by AuditLeggings.acceptTime
var cause by AuditLeggings.cause
var result by AuditLeggings.result
var auditTime by AuditLeggings.auditTime
var nextAudit by AuditLogging optionalReferencedOn AuditLeggings.nextAudit
}
@TableComment("通知记录")
object Notifications:IntIdTable(){
@TableComment("通知标题")
val title:Column<String> = varchar(name="title",length = 10)
@TableComment("通知内容")
val content:Column<String> = varchar(name="content",length = 256)
@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
}