Alexis Hernandez
6 years ago
2 changed files with 112 additions and 0 deletions
@ -0,0 +1,78 @@ |
|||
package com.xsn.explorer.data.anorm.dao |
|||
|
|||
import java.sql.Connection |
|||
|
|||
import anorm._ |
|||
import com.xsn.explorer.data.anorm.parsers.TPoSContractParsers |
|||
import com.xsn.explorer.models.TPoSContract |
|||
import com.xsn.explorer.models.values.TransactionId |
|||
|
|||
class TPoSContractDAO { |
|||
|
|||
import TPoSContractParsers._ |
|||
|
|||
def create(contract: TPoSContract)(implicit conn: Connection): TPoSContract = { |
|||
SQL( |
|||
""" |
|||
|INSERT INTO tpos_contracts |
|||
| (txid, index, owner, merchant, merchant_commission, state, time) |
|||
|VALUES |
|||
| ({txid}, {index}, {owner}, {merchant}, {merchant_commission}, {state}::TPOS_CONTRACT_STATE, {time}) |
|||
|RETURNING txid, index, owner, merchant, merchant_commission, state, time |
|||
""".stripMargin |
|||
).on( |
|||
'txid -> contract.id.txid.string, |
|||
'index -> contract.id.index, |
|||
'owner -> contract.details.owner.string, |
|||
'merchant -> contract.details.merchant.string, |
|||
'merchant_commission -> contract.details.merchantCommission.int, |
|||
'state -> contract.state.entryName, |
|||
'time -> contract.time |
|||
).as(parseTPoSContract.single) |
|||
} |
|||
|
|||
def deleteBy(txid: TransactionId)(implicit conn: Connection): Option[TPoSContract] = { |
|||
SQL( |
|||
""" |
|||
|DELETE FROM tpos_contracts |
|||
|WHERE txid = {txid} |
|||
|RETURNING txid, index, owner, merchant, merchant_commission, state, time |
|||
""".stripMargin |
|||
).on( |
|||
'txid -> txid.string |
|||
).as(parseTPoSContract.singleOpt) |
|||
} |
|||
|
|||
def close(id: TPoSContract.Id, closedOn: TransactionId)(implicit conn: Connection): Unit = { |
|||
val _ = SQL( |
|||
""" |
|||
|UPDATE tpos_contracts |
|||
|SET state = {state}::TPOS_CONTRACT_STATE, |
|||
| closed_on = {closed_on} |
|||
|WHERE txid = {txid} AND |
|||
| index = {index} |
|||
""".stripMargin |
|||
).on( |
|||
'txid -> id.txid.string, |
|||
'index -> id.index, |
|||
'state -> TPoSContract.State.Closed.entryName, |
|||
'closed_on -> closedOn.string |
|||
).executeUpdate() |
|||
} |
|||
|
|||
def open(id: TPoSContract.Id)(implicit conn: Connection): Unit = { |
|||
val _ = SQL( |
|||
""" |
|||
|UPDATE tpos_contracts |
|||
|SET state = {state}::TPOS_CONTRACT_STATE, |
|||
| closed_on = null |
|||
|WHERE txid = {txid} AND |
|||
| index = {index} |
|||
""".stripMargin |
|||
).on( |
|||
'txid -> id.txid.string, |
|||
'index -> id.index, |
|||
'state -> TPoSContract.State.Active.entryName, |
|||
).executeUpdate() |
|||
} |
|||
} |
@ -0,0 +1,34 @@ |
|||
package com.xsn.explorer.data.anorm.parsers |
|||
|
|||
import anorm.SqlParser._ |
|||
import anorm._ |
|||
import com.xsn.explorer.models.TPoSContract |
|||
|
|||
object TPoSContractParsers { |
|||
|
|||
import CommonParsers._ |
|||
|
|||
val parseOwner = parseAddress("owner") |
|||
val parseMerchant = parseAddress("merchant") |
|||
val parseMerchantCommission = int("merchant_commission") |
|||
.map(TPoSContract.Commission.from) |
|||
.map { _.getOrElse(throw new RuntimeException("corrupted merchant_commission")) } |
|||
|
|||
val parseTPoSContractState = str("state") |
|||
.map(TPoSContract.State.withNameInsensitiveOption) |
|||
.map { _.getOrElse(throw new RuntimeException("corrupted state")) } |
|||
|
|||
val parseTPoSContract = ( |
|||
parseTransactionId() ~ |
|||
parseIndex ~ |
|||
parseOwner ~ |
|||
parseMerchant ~ |
|||
parseMerchantCommission ~ |
|||
parseTime ~ |
|||
parseTPoSContractState).map { |
|||
|
|||
case txid ~ index ~ owner ~ merchant ~ merchantCommission ~ time ~ state => |
|||
val details = TPoSContract.Details(owner = owner, merchant = merchant, merchantCommission = merchantCommission) |
|||
TPoSContract(TPoSContract.Id(txid, index), details, time, state) |
|||
} |
|||
} |
Loading…
Reference in new issue