在这里!我正在关注运行良好的 Play-Auth-Slick-Seed 示例!我正在尝试提出以下模型来模仿那里的用户模型(User.scala,DBTableDefinitions.scala,UserDAOImpl.scala,UserDAO.scala)模型:
Node.scala
case class Node(
nodeID: Option[Long],
name: Option[String],
nodeCode: Option[String],
nodeStamp: Option[Date]
)
在 NodeDAOImpl 类中,我定义了以下函数:查找、计数和创建,只是为了测试我是否可以像应用程序对用户一样在我的 postgres 中创建数据!
def find(nodeID: Long) = {
val nodeQuery = for {
dbNode <- slickNodes.filter(_.id === nodeID)
} yield dbNode
db.run(nodeQuery.result.headOption).map { dbNodeOption =>
dbNodeOption.map { node =>
Node(node.nodeID, node.name,node.nodeCode,node.nodeStamp)
}
}
}
def count(): Future[Int] = {
db.run(slickNodes.length.result)
}
def create(node: Node) = {
val dbNode = DBNode(node.nodeID, node.name, node.nodeCode, node.nodeStamp)
val actions = (for {
_ <- slickNodes.insertOrUpdate(dbNode)
} yield ()).transactionally
db.run(actions).map(_ => node)
}
现在,如何在应用程序启动时将一些数据推送到数据库?我试图在模块中创建一个 Database.scala(类似于 SilhouetteModule.scala),我做了以下
class DatabaseModule extends AbstractModule {
def configure() = {
bind[NodeDAO].to[NodeDAOImpl]
}
}
但我无法意识到我可以在哪里添加一种功能,比如
StartData.insert()
定义为(许多例子表明)
object StartData {
private def nodeDAOImpl = new NodeDAOImpl
def insert(): Unit = {
nodeDAOImpl.count map { size =>
if (size == 0) {
Logger.info("Insertando nodes");
val nodes = Seq(
Node(Option(1L), Option("Node1"), Option("XMZ12RT"), Option(new java.util.Date)))
)
nodes.map(nodeDAOImpl.create)
}
}
}
}
感谢您的任何建议或指导!ReneX