Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions internal/api/proposal/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -765,11 +765,11 @@ func SaveProposalToMetaforo(db *gorm.DB, dbProposalId uint, voteType int, metafo
metaforoProposalResponse, err = metaforo.GetProposal(metaforoThreadId, metaforoGroupName, metaforoAccessToken, 0)
if err != nil {
log.Error().Msgf("get metaforoProposal %d error: %+v", metaforoThreadId, err)
_ = UpdateDbRecordsFromMetaforoProposalResponse(db, updatedProposalRecord.ID, metaforoProposalResponse, err)
_ = UpdateDbRecordsFromMetaforoProposalResponse(db, updatedProposalRecord.ID, updatedProposalRecord.IsInFinState(), metaforoProposalResponse, err)
return err
}

err = UpdateDbRecordsFromMetaforoProposalResponse(db, updatedProposalRecord.ID, metaforoProposalResponse, nil)
err = UpdateDbRecordsFromMetaforoProposalResponse(db, updatedProposalRecord.ID, updatedProposalRecord.IsInFinState(), metaforoProposalResponse, nil)
if err != nil {
log.Error().Msgf("update db records from metaforoProposalResponse error: %+v", err)
}
Expand Down Expand Up @@ -979,15 +979,25 @@ func IsUserMetVoteGate(userSeepassData *sdk.SeepassResponse, proposalVoteGate *m
}
}

func UpdateDbRecordsFromMetaforoProposalResponse(db *gorm.DB, dbProposalRcdId uint, metaforoProposal *metaforo.ProposalResponse, mfError error) error {
func UpdateDbRecordsFromMetaforoProposalResponse(db *gorm.DB, dbProposalRcdId uint, isProposalInFinState bool, metaforoProposal *metaforo.ProposalResponse, mfError error) error {
// Check whether update form metaforo contains error, if yes, update state to metaforo error and return
if mfError != nil {
log.Error().Msgf("get metaforo proposal error: %+v", mfError)

// This branch is processing mf error, set the default state to UncategorizedMetaforoError
proposalStateForMetaforoError := model.ProposalStateUncategorizedMetaforoError
if strings.Contains(mfError.Error(), "not found") {
// Proposal not found in metaforo, change the state to DeletedFromMetaforo
proposalStateForMetaforoError = model.ProposalStateDeletedFromMetaforo
} else if isProposalInFinState {
// For mf error other than not found, only update proposal not in fin state
log.Debug().Msgf("proposal %d is in fin state, skip updating proposal state to mf error", dbProposalRcdId)
return nil
} else {
// Keep the new state to be UncategorizedMetaforoError
}

// Update proposal state into mf_error
if err = db.Model(&model.Proposal{}).Where("id = ?", dbProposalRcdId).Update("state", proposalStateForMetaforoError).Error; err != nil {
log.Error().Msgf("update proposal %d state to deleted_by_metaforo error", dbProposalRcdId)
return err
Expand Down
4 changes: 2 additions & 2 deletions internal/api/proposal/req_n_resp.go
Original file line number Diff line number Diff line change
Expand Up @@ -372,11 +372,11 @@ func ConvertProposalToFrontendDetailRecord(db *gorm.DB, proposalId uint, startPo
metaforoProposal, err := metaforo.GetProposal(proposal.GetMetaforoThreadId(), metaforoGroupName, accessToken, startPostId)
if err != nil {
log.Error().Msgf("get metaforo proposal error: %+v", err)
_ = UpdateDbRecordsFromMetaforoProposalResponse(db, proposalId, metaforoProposal, err)
_ = UpdateDbRecordsFromMetaforoProposalResponse(db, proposalId, proposal.IsInFinState(), metaforoProposal, err)
return nil, err
}

err = UpdateDbRecordsFromMetaforoProposalResponse(db, proposalId, metaforoProposal, nil)
err = UpdateDbRecordsFromMetaforoProposalResponse(db, proposalId, proposal.IsInFinState(), metaforoProposal, nil)
if err != nil {
log.Error().Msgf("update proposal %d from metaforo error: %+v", proposalId, err)
return nil, err
Expand Down
4 changes: 2 additions & 2 deletions internal/api/proposal/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,11 @@ func GetMetaforoProposalByInternalId(db *gorm.DB, proposalIdStr string, metaforo
metaforoProposalResponse, err := metaforo.GetProposal(osProposalRcd.GetMetaforoThreadId(), metaforoGroupName, mfAccessToken, 0)
if err != nil {
log.Error().Msgf("get metaforo proposal error: %+v", err)
_ = UpdateDbRecordsFromMetaforoProposalResponse(db, osProposalRcd.ID, metaforoProposalResponse, err)
_ = UpdateDbRecordsFromMetaforoProposalResponse(db, osProposalRcd.ID, osProposalRcd.IsInFinState(), metaforoProposalResponse, err)
return nil, nil, err
}

err = UpdateDbRecordsFromMetaforoProposalResponse(db, osProposalRcd.ID, metaforoProposalResponse, nil)
err = UpdateDbRecordsFromMetaforoProposalResponse(db, osProposalRcd.ID, osProposalRcd.IsInFinState(), metaforoProposalResponse, nil)
if err != nil {
log.Error().Msgf("update db records from metaforoProposalResponse error: %+v", err)
}
Expand Down
4 changes: 3 additions & 1 deletion internal/common/wallet_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"strings"

"github.com/ethereum/go-ethereum/common"
"github.com/theseed-labs/os-backend/internal"
"golang.org/x/crypto/sha3"
)

Expand Down Expand Up @@ -59,7 +60,8 @@ func FormatUserWallet(wallet string) string {
}

func ValidateUserWallet(wallet string) bool {
return common.IsHexAddress(wallet)
return common.IsHexAddress(wallet) && common.HexToAddress(wallet) != internal.BurnAddress

}

// ToFrontendWallet convert wallet address to frontend required format, currently the requirement is lowercased
Expand Down
3 changes: 3 additions & 0 deletions internal/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package internal
import (
"time"

"github.com/ethereum/go-ethereum/common"
"github.com/samber/lo"
)

Expand Down Expand Up @@ -35,6 +36,8 @@ const SeedContractAddr = "0x30093266E34a816a53e302bE3e59a93B52792FD4"
const EnsoulSbtContractType = "erc1155"
const EnsoulSbtContractAddr = "0x9d34D407D8586478b3e4c39BE633ED3D7be1c80C"

var BurnAddress = common.HexToAddress("0x0000000000000000000000000000000000000000")

const CityHallTokenId = "70"

var CityhallGroupNames = map[string]bool{"G_GOVERNANCE": true, "G_BRANDING": true, "G_TECH": true}
Expand Down
4 changes: 2 additions & 2 deletions internal/task_manager/metaforo_task.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@ func RefreshVotingProposalInfoJob(db *gorm.DB, job *model.CronJob, jobParams str
metaforoProposalData, err := metaforo.GetProposal(metaforoThreadId, params.GroupName, cfg.MetaforoData.AccessToken, 0)

if err != nil {
_ = proposal.UpdateDbRecordsFromMetaforoProposalResponse(db, dbRcd.ID, metaforoProposalData, err)
_ = proposal.UpdateDbRecordsFromMetaforoProposalResponse(db, dbRcd.ID, dbRcd.IsInFinState(), metaforoProposalData, err)
log.Warn().Msgf("get metaforo proposal error: %+v", err)
continue
}

// Start transaction to update db records
if err = db.Transaction(func(tx *gorm.DB) error {
err = proposal.UpdateDbRecordsFromMetaforoProposalResponse(tx, dbRcd.ID, metaforoProposalData, nil)
err = proposal.UpdateDbRecordsFromMetaforoProposalResponse(tx, dbRcd.ID, dbRcd.IsInFinState(), metaforoProposalData, nil)
if err != nil {
log.Warn().Msgf("update propsal with metaforo response error: %+v", err)
return err
Expand Down
Loading