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),
 | 
			
		||||
    session_id VARCHAR(48)
 | 
			
		||||
);
 | 
			
		||||
CREATE TYPE market_status AS ENUM ('WAITING_FOR_PAYMENT', 'ACTIVE', 'EXPIRED');
 | 
			
		||||
CREATE TABLE markets(
 | 
			
		||||
    id SERIAL PRIMARY KEY,
 | 
			
		||||
    description TEXT 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)
 | 
			
		||||
);
 | 
			
		||||
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 {
 | 
			
		||||
	if err := db.QueryRow(""+
 | 
			
		||||
		"INSERT INTO markets(description, end_date, status, invoice_id) "+
 | 
			
		||||
		"VALUES($1, $2, 'WAITING_FOR_PAYMENT', $3) "+
 | 
			
		||||
		"INSERT INTO markets(description, end_date, invoice_id) "+
 | 
			
		||||
		"VALUES($1, $2, $3) "+
 | 
			
		||||
		"RETURNING id", market.Description, market.EndDate, market.InvoiceId).Scan(&market.Id); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
@ -22,16 +22,8 @@ func (db *DB) CreateMarket(market *Market) error {
 | 
			
		||||
	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 {
 | 
			
		||||
	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 nil
 | 
			
		||||
@ -43,12 +35,14 @@ func (db *DB) FetchActiveMarkets(markets *[]Market) error {
 | 
			
		||||
		market Market
 | 
			
		||||
		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
 | 
			
		||||
	}
 | 
			
		||||
	defer rows.Close()
 | 
			
		||||
	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)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,6 @@ type (
 | 
			
		||||
		Id          Serial    `json:"id"`
 | 
			
		||||
		Description string    `json:"description"`
 | 
			
		||||
		EndDate     time.Time `json:"endDate"`
 | 
			
		||||
		Status      string    `json:"status"`
 | 
			
		||||
		InvoiceId   UUID
 | 
			
		||||
	}
 | 
			
		||||
	Share struct {
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,6 @@ package lnd
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"log"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
@ -88,10 +87,6 @@ func (lnd *LNDClient) CheckInvoice(d *db.DB, hash lntypes.Hash) {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if lnInvoice.AmountPaid > 0 {
 | 
			
		||||
			if err = RunStateTransition(d, lnInvoice.Hash); err != nil {
 | 
			
		||||
				handleLoopError(err)
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			if preimage, err = lntypes.MakePreimageFromStr(invoice.Preimage); err != nil {
 | 
			
		||||
				handleLoopError(err)
 | 
			
		||||
				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 {
 | 
			
		||||
	var (
 | 
			
		||||
		invoices []db.Invoice
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user