Replace market status with JOIN
This commit is contained in:
parent
76d2e56393
commit
7b649c4d7d
@ -12,12 +12,10 @@ CREATE TABLE sessions(
|
|||||||
pubkey TEXT NOT NULL REFERENCES users(pubkey),
|
pubkey TEXT NOT NULL REFERENCES users(pubkey),
|
||||||
session_id VARCHAR(48)
|
session_id VARCHAR(48)
|
||||||
);
|
);
|
||||||
CREATE TYPE market_status AS ENUM ('WAITING_FOR_PAYMENT', 'ACTIVE', 'EXPIRED');
|
|
||||||
CREATE TABLE markets(
|
CREATE TABLE markets(
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
description TEXT NOT NULL,
|
description TEXT NOT NULL,
|
||||||
end_date TIMESTAMP WITH TIME ZONE NOT NULL,
|
end_date TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||||
status MARKET_STATUS NOT NULL DEFAULT 'WAITING_FOR_PAYMENT';
|
|
||||||
invoice_id UUID NOT NULL UNIQUE REFERENCES invoices(id)
|
invoice_id UUID NOT NULL UNIQUE REFERENCES invoices(id)
|
||||||
);
|
);
|
||||||
CREATE EXTENSION "uuid-ossp";
|
CREATE EXTENSION "uuid-ossp";
|
||||||
|
20
db/market.go
20
db/market.go
@ -10,8 +10,8 @@ type FetchOrdersWhere struct {
|
|||||||
|
|
||||||
func (db *DB) CreateMarket(market *Market) error {
|
func (db *DB) CreateMarket(market *Market) error {
|
||||||
if err := db.QueryRow(""+
|
if err := db.QueryRow(""+
|
||||||
"INSERT INTO markets(description, end_date, status, invoice_id) "+
|
"INSERT INTO markets(description, end_date, invoice_id) "+
|
||||||
"VALUES($1, $2, 'WAITING_FOR_PAYMENT', $3) "+
|
"VALUES($1, $2, $3) "+
|
||||||
"RETURNING id", market.Description, market.EndDate, market.InvoiceId).Scan(&market.Id); err != nil {
|
"RETURNING id", market.Description, market.EndDate, market.InvoiceId).Scan(&market.Id); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -22,16 +22,8 @@ func (db *DB) CreateMarket(market *Market) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) MarkMarketAsActive(hash string) error {
|
|
||||||
_, err := db.Exec(""+
|
|
||||||
"UPDATE markets SET status = 'ACTIVE' "+
|
|
||||||
"WHERE invoice_id = (SELECT id FROM invoices WHERE hash = $1) "+
|
|
||||||
"AND status = 'WAITING_FOR_PAYMENT'", hash)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (db *DB) FetchMarket(marketId int, market *Market) error {
|
func (db *DB) FetchMarket(marketId int, market *Market) error {
|
||||||
if err := db.QueryRow("SELECT id, description, end_date, status FROM markets WHERE id = $1", marketId).Scan(&market.Id, &market.Description, &market.EndDate, &market.Status); err != nil {
|
if err := db.QueryRow("SELECT id, description, end_date FROM markets WHERE id = $1", marketId).Scan(&market.Id, &market.Description, &market.EndDate); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -43,12 +35,14 @@ func (db *DB) FetchActiveMarkets(markets *[]Market) error {
|
|||||||
market Market
|
market Market
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
if rows, err = db.Query("SELECT id, description, end_date, status FROM markets WHERE status = 'ACTIVE'"); err != nil {
|
if rows, err = db.Query("" +
|
||||||
|
"SELECT m.id, m.description, m.end_date FROM markets m " +
|
||||||
|
"JOIN invoices i ON i.id = m.invoice_id WHERE i.confirmed_at IS NOT NULL"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
rows.Scan(&market.Id, &market.Description, &market.EndDate, &market.Status)
|
rows.Scan(&market.Id, &market.Description, &market.EndDate)
|
||||||
*markets = append(*markets, market)
|
*markets = append(*markets, market)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -27,7 +27,6 @@ type (
|
|||||||
Id Serial `json:"id"`
|
Id Serial `json:"id"`
|
||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
EndDate time.Time `json:"endDate"`
|
EndDate time.Time `json:"endDate"`
|
||||||
Status string `json:"status"`
|
|
||||||
InvoiceId UUID
|
InvoiceId UUID
|
||||||
}
|
}
|
||||||
Share struct {
|
Share struct {
|
||||||
|
@ -2,7 +2,6 @@ package lnd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"database/sql"
|
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -88,10 +87,6 @@ func (lnd *LNDClient) CheckInvoice(d *db.DB, hash lntypes.Hash) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
if lnInvoice.AmountPaid > 0 {
|
if lnInvoice.AmountPaid > 0 {
|
||||||
if err = RunStateTransition(d, lnInvoice.Hash); err != nil {
|
|
||||||
handleLoopError(err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if preimage, err = lntypes.MakePreimageFromStr(invoice.Preimage); err != nil {
|
if preimage, err = lntypes.MakePreimageFromStr(invoice.Preimage); err != nil {
|
||||||
handleLoopError(err)
|
handleLoopError(err)
|
||||||
continue
|
continue
|
||||||
@ -112,16 +107,6 @@ func (lnd *LNDClient) CheckInvoice(d *db.DB, hash lntypes.Hash) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunStateTransition(d *db.DB, hash lntypes.Hash) error {
|
|
||||||
if err := d.MarkMarketAsActive(hash.String()); err != nil {
|
|
||||||
if err == sql.ErrNoRows {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (lnd *LNDClient) CheckInvoices(d *db.DB) error {
|
func (lnd *LNDClient) CheckInvoices(d *db.DB) error {
|
||||||
var (
|
var (
|
||||||
invoices []db.Invoice
|
invoices []db.Invoice
|
||||||
|
Loading…
x
Reference in New Issue
Block a user