Fix authors

This commit is contained in:
Matt Soucy 2020-07-03 22:11:59 -04:00
parent 6569ec619a
commit b85099fbbd
2 changed files with 15 additions and 22 deletions

View File

@ -16,15 +16,11 @@ class KnowledgeModel(val db : Database, val constant : Double, val riskModel : R
var authors : List<String>, var authors : List<String>,
var authorsStr : String) var authorsStr : String)
object AuthorsTable : Table("authors") { object AuthorsTable : IntIdTable("authors", "authorid") {
val id = integer("authorid")
val author = text("author").uniqueIndex("authors_idx") val author = text("author").uniqueIndex("authors_idx")
override val primaryKey = PrimaryKey(id)
} }
object KnowledgeAcctsTable : Table("knowledgeaccts") { object KnowledgeAcctsTable : IntIdTable("knowledgeaccts", "knowledgeacctid") {
val id = integer("knowledgeacctid")
val authors = text("authors").uniqueIndex("knowledgeacctsauthors_idx") val authors = text("authors").uniqueIndex("knowledgeacctsauthors_idx")
override val primaryKey = PrimaryKey(id)
} }
object KnowledgeAuthorsTable : Table("knowedgeaccts_authors") { object KnowledgeAuthorsTable : Table("knowedgeaccts_authors") {
val knowledgeacctid = integer("knowledgeacctid") val knowledgeacctid = integer("knowledgeacctid")
@ -33,7 +29,7 @@ class KnowledgeModel(val db : Database, val constant : Double, val riskModel : R
} }
object LineKnowledge : Table("lineknowledge") { object LineKnowledge : Table("lineknowledge") {
val linenum = integer("linenum") val linenum = integer("linenum")
val knowledgeacctid = integer("knowledgeacctid") val knowledgeacctid = integer("knowledgeacctid").references(KnowledgeAuthorsTable.knowledgeacctid)
val knowledge = double("knowledge") val knowledge = double("knowledge")
} }
@ -100,7 +96,7 @@ class KnowledgeModel(val db : Database, val constant : Double, val riskModel : R
KnowledgeAcctsTable.id eq knowledgeAcctId KnowledgeAcctsTable.id eq knowledgeAcctId
}.map { }.map {
KnowledgeAcct( KnowledgeAcct(
it[KnowledgeAcctsTable.id], it[KnowledgeAcctsTable.id].value,
it[KnowledgeAcctsTable.authors].split("\n"), it[KnowledgeAcctsTable.authors].split("\n"),
it[KnowledgeAcctsTable.authors] it[KnowledgeAcctsTable.authors]
) )
@ -192,29 +188,28 @@ class KnowledgeModel(val db : Database, val constant : Double, val riskModel : R
private fun lookupOrCreateKnowledgeAcct(authors : List<String>) = transaction(db) { private fun lookupOrCreateKnowledgeAcct(authors : List<String>) = transaction(db) {
val authorStr = authors.sorted().joinToString("\n") val authorStr = authors.sorted().joinToString("\n")
var newId = KnowledgeAcctsTable.select { KnowledgeAcctsTable.select {
KnowledgeAcctsTable.authors eq authorStr KnowledgeAcctsTable.authors eq authorStr
}.map { }.map {
it[KnowledgeAcctsTable.id] it[KnowledgeAcctsTable.id].value
}.firstOrNull() ?: -1 }.firstOrNull() ?: run {
if (newId != -1) {
KnowledgeAcctsTable.insert { KnowledgeAcctsTable.insert {
it[KnowledgeAcctsTable.authors] = authorStr it[KnowledgeAcctsTable.authors] = authorStr
} }
newId = KnowledgeAcctsTable.select { val theNewId = KnowledgeAcctsTable.select {
KnowledgeAcctsTable.authors eq authorStr KnowledgeAcctsTable.authors eq authorStr
}.map { }.map {
it[KnowledgeAcctsTable.id] it[KnowledgeAcctsTable.id].value
}.first() }.first()
authors.map(::lookupOrCreateAuthor).forEach { authorId -> authors.map(::lookupOrCreateAuthor).forEach { authorId ->
KnowledgeAuthorsTable.insert { KnowledgeAuthorsTable.insert {
it[KnowledgeAuthorsTable.knowledgeacctid] = newId it[KnowledgeAuthorsTable.knowledgeacctid] = theNewId
it[KnowledgeAuthorsTable.authorid] = authorId it[KnowledgeAuthorsTable.authorid] = authorId.value
} }
} }
theNewId
} }
newId
} }
private fun lookupOrCreateAuthor(authorName : String) = transaction(db) { private fun lookupOrCreateAuthor(authorName : String) = transaction(db) {
@ -239,12 +234,10 @@ class KnowledgeModel(val db : Database, val constant : Double, val riskModel : R
private fun createTables() = transaction(db) { private fun createTables() = transaction(db) {
SchemaUtils.dropDatabase() SchemaUtils.dropDatabase()
SchemaUtils.createMissingTablesAndColumns(AuthorsTable, KnowledgeAcctsTable, KnowledgeAuthorsTable, LineKnowledge) SchemaUtils.createMissingTablesAndColumns(AuthorsTable, KnowledgeAcctsTable, KnowledgeAuthorsTable, LineKnowledge)
AuthorsTable.insertIgnore { AuthorsTable.insertIgnore {
it[id] = 1
it[author] = "" it[author] = ""
} }
KnowledgeAcctsTable.insertIgnore { KnowledgeAcctsTable.insertIgnore {
it[id] = 1
it[authors] = "" it[authors] = ""
} }
KnowledgeAuthorsTable.insertIgnore { KnowledgeAuthorsTable.insertIgnore {

View File

@ -387,7 +387,7 @@ class SummaryModel(val db : Database) {
AuthorsTable.insertIgnore { AuthorsTable.insertIgnore {
it[AuthorsTable.author] = author it[AuthorsTable.author] = author
} }
ProjectTable.select { AuthorsTable.select {
AuthorsTable.author eq author AuthorsTable.author eq author
}.map { }.map {
it[AuthorsTable.id].value it[AuthorsTable.id].value