diff --git a/airline-data/db_scripts/balance_audit_table.sql b/airline-data/db_scripts/balance_audit_table.sql new file mode 100644 index 000000000..f6b0aaf2e --- /dev/null +++ b/airline-data/db_scripts/balance_audit_table.sql @@ -0,0 +1,7 @@ +CREATE TABLE `balance_audit` ( + `airline` int(11) NOT NULL, + `cycle` int(11) NOT NULL, + `balance` mediumtext, + UNIQUE KEY `balance_audit_UN` (`airline`,`cycle`), + CONSTRAINT `balance_audit_FK` FOREIGN KEY (`airline`) REFERENCES `airline` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) \ No newline at end of file diff --git a/airline-data/src/main/scala/com/patson/data/AirlineSource.scala b/airline-data/src/main/scala/com/patson/data/AirlineSource.scala index 94476be4e..e374801ae 100644 --- a/airline-data/src/main/scala/com/patson/data/AirlineSource.scala +++ b/airline-data/src/main/scala/com/patson/data/AirlineSource.scala @@ -165,6 +165,15 @@ object AirlineSource { updateStatement.setInt(2, airlineId) updateStatement.executeUpdate() updateStatement.close() + + // update balance audit table + val insertToBalanceAuditStatement = connection.prepareStatement( + s"REPLACE INTO $BALANCE_AUDIT (airline, cycle, balance) VALUES (?, (SELECT cycle + 1 FROM cycle), (SELECT balance FROM $AIRLINE_INFO_TABLE WHERE airline = ?))") + insertToBalanceAuditStatement.setInt(1, airlineId) + insertToBalanceAuditStatement.setInt(2, airlineId) + insertToBalanceAuditStatement.executeQuery(); + insertToBalanceAuditStatement.close(); + AirlineCache.invalidateAirline(airlineId) } finally { connection.close() diff --git a/airline-data/src/main/scala/com/patson/data/Constants.scala b/airline-data/src/main/scala/com/patson/data/Constants.scala index 934dee291..b99da7995 100644 --- a/airline-data/src/main/scala/com/patson/data/Constants.scala +++ b/airline-data/src/main/scala/com/patson/data/Constants.scala @@ -64,6 +64,7 @@ object Constants { val AIRLINE_CASH_FLOW_ITEM_TABLE = "airline_cash_flow_item" val AIRLINE_BASE_SPECIALIZATION_TABLE = "airline_base_specialization" val AIRLINE_REPUTATION_BREAKDOWN = "airline_reputation_breakdown" + val BALANCE_AUDIT = "balance_audit" val INCOME_TABLE = "income" diff --git a/airline-data/src/main/scala/com/patson/data/CycleSource.scala b/airline-data/src/main/scala/com/patson/data/CycleSource.scala index dfcffeae3..e8efb3610 100644 --- a/airline-data/src/main/scala/com/patson/data/CycleSource.scala +++ b/airline-data/src/main/scala/com/patson/data/CycleSource.scala @@ -37,7 +37,13 @@ object CycleSource { insertStatement.setInt(1, cycle) insertStatement.executeUpdate() insertStatement.close() - + + // also clean up old (-48) balance audit entries + val cleanupStatement = connection.prepareStatement(s"DELETE FROM $BALANCE_AUDIT WHERE cycle <= ?") + cleanupStatement.setInt(1, cycle - 48) + cleanupStatement.executeQuery() + cleanupStatement.close() + connection.commit() } finally { connection.close() diff --git a/airline-data/src/main/scala/com/patson/data/Meta.scala b/airline-data/src/main/scala/com/patson/data/Meta.scala index 136e49f04..e92080c35 100644 --- a/airline-data/src/main/scala/com/patson/data/Meta.scala +++ b/airline-data/src/main/scala/com/patson/data/Meta.scala @@ -313,6 +313,7 @@ object Meta { createIp(connection) createAdminLog(connection) createUserUuid(connection) + createBalanceAudit(connection) statement = connection.prepareStatement("CREATE TABLE " + AIRPORT_CITY_SHARE_TABLE + "(" + "airport INTEGER," + @@ -1916,6 +1917,25 @@ object Meta { statement.close() } + def createBalanceAudit(connection: Connection): Unit = { + var statement = connection.prepareStatement(s"DROP TABLE IF EXISTS $BALANCE_AUDIT") + statement.execute() + statement.close() + + val sql = s""" + |CREATE TABLE `$BALANCE_AUDIT` ( + | `airline` int(11) NOT NULL, + | `cycle` int(11) NOT NULL, + | `balance` mediumtext, + | UNIQUE KEY `balance_audit_UN` (`airline`,`cycle`), + | CONSTRAINT `balance_audit_FK` FOREIGN KEY (`$AIRLINE_TABLE`) REFERENCES `airline` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + |) + |""".stripMargin + statement = connection.prepareStatement(sql) + statement.execute() + statement.close() + } + def createAdminLog(connection : Connection) { var statement = connection.prepareStatement("DROP TABLE IF EXISTS " + ADMIN_LOG_TABLE) statement.execute() diff --git a/airline-data/src/main/scala/com/patson/data/QuickCreateSchema.scala b/airline-data/src/main/scala/com/patson/data/QuickCreateSchema.scala index 8103fbb36..19bfad716 100644 --- a/airline-data/src/main/scala/com/patson/data/QuickCreateSchema.scala +++ b/airline-data/src/main/scala/com/patson/data/QuickCreateSchema.scala @@ -51,7 +51,8 @@ object QuickCreateSchema extends App { // Meta.createLog(connection) // Meta.createAlert(connection) //Meta.createDelegate(connection) - Meta.createUserUuid(connection) + //Meta.createUserUuid(connection) + Meta.createBalanceAudit(connection) }