Skip to content

Commit

Permalink
add: GetProposalForUpdate to separate concerns
Browse files Browse the repository at this point in the history
  • Loading branch information
SpaghettiOverload committed Oct 22, 2023
1 parent 2e476fd commit baee78e
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 10 deletions.
57 changes: 51 additions & 6 deletions database/gov.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"time"

"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
"github.com/lib/pq"
Expand Down Expand Up @@ -130,9 +131,7 @@ INSERT INTO proposal(

// GetProposal returns the proposal with the given id, or nil if not found
func (db *Db) GetProposal(id uint64) (types.Proposal, error) {
var proposal types.Proposal
var rows []*dbtypes.ProposalRow

err := db.SQL.Select(&rows, `SELECT * FROM proposal WHERE id = $1`, id)
if err != nil {
return types.Proposal{}, err
Expand All @@ -143,14 +142,60 @@ func (db *Db) GetProposal(id uint64) (types.Proposal, error) {
}

row := rows[0]
proposal.ID = row.ProposalID
proposal.Status = row.Status
proposal.VotingStartTime = dbtypes.NullTimeToTime(row.VotingStartTime)
proposal.VotingEndTime = dbtypes.NullTimeToTime(row.VotingEndTime)

trimContent := strings.TrimPrefix(row.Content, "{")
trimContent = strings.TrimPrefix(trimContent, "}")
jsonMessages := strings.Split(trimContent, ",")

var messages []*codectypes.Any
for _, jsonMessage := range jsonMessages {
var msg codectypes.Any
err = db.Cdc.UnmarshalJSON([]byte(jsonMessage), &msg)
if err != nil {
return types.Proposal{}, err
}
messages = append(messages, &msg)
}

proposal := types.NewProposal(
row.ProposalID,
row.Title,
row.Description,
row.Metadata,
messages,
row.Status,
row.SubmitTime,
row.DepositEndTime,
dbtypes.NullTimeToTime(row.VotingStartTime),
dbtypes.NullTimeToTime(row.VotingEndTime),
row.Proposer,
)
return proposal, nil
}

// GetProposalForUpdate returns a proposal with data required by NewProposalUpdate type
func (db *Db) GetProposalForUpdate(id uint64) (types.ProposalUpdate, error) {
var proposalForUpdate types.ProposalUpdate
var rows []*dbtypes.ProposalRow

err := db.SQL.Select(&rows, `SELECT status, voting_start_time, voting_end_time FROM proposal WHERE id = $1`, id)
if err != nil {
return types.ProposalUpdate{}, err
}

if len(rows) == 0 {
return types.ProposalUpdate{}, nil
}

row := rows[0]
proposalForUpdate.ProposalID = id
proposalForUpdate.Status = row.Status
proposalForUpdate.VotingStartTime = dbtypes.NullTimeToTime(row.VotingStartTime)
proposalForUpdate.VotingEndTime = dbtypes.NullTimeToTime(row.VotingEndTime)

return proposalForUpdate, nil
}

// GetOpenProposalsIds returns all the ids of the proposals that are in deposit or voting period at the given block time
func (db *Db) GetOpenProposalsIds(blockTime time.Time) ([]uint64, error) {
var ids []uint64
Expand Down
8 changes: 4 additions & 4 deletions modules/gov/utils_proposal.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,17 +82,17 @@ func (m *Module) UpdateProposalStakingPoolSnapshot(height int64, blockVals *tmct
// updateDeletedProposalStatus updates the proposal having the given id by setting its status
// to the one that represents a deleted proposal
func (m *Module) updateDeletedProposalStatus(id uint64) error {
stored, err := m.db.GetProposal(id)
proposalForUpdate, err := m.db.GetProposalForUpdate(id)
if err != nil {
return err
}

return m.db.UpdateProposal(
types.NewProposalUpdate(
stored.ID,
proposalForUpdate.ProposalID,
types.ProposalStatusInvalid,
stored.VotingStartTime,
stored.VotingEndTime,
proposalForUpdate.VotingStartTime,
proposalForUpdate.VotingEndTime,
),
)
}
Expand Down

0 comments on commit baee78e

Please sign in to comment.