2

在这里!我正在关注运行良好的 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

4

0 回答 0