module governance import base import freeflowuniverse.herolib.data.ourtime // ProposalStatus enum is used from governance_enums.v in the same module // Proposal represents a governance proposal that can be voted upon. // It now incorporates the voting mechanism from biz/vote.v. pub struct Proposal { base.Base // Provides Proposal's own ID, created_at, updated_at pub mut: // Fields from original Proposal struct creator_id string // User ID of the proposal creator title string // Title of the proposal description string // Detailed description of the proposal status ProposalStatus // Status of the proposal lifecycle (draft, active, approved etc.) // Fields from biz/vote.v's Vote struct (representing the voting event aspects of the proposal) vote_start_date ourtime.OurTime // When voting on this proposal starts vote_end_date ourtime.OurTime // When voting on this proposal ends vote_status VoteEventStatus // Status of the voting event (open, closed, cancelled) options []VoteOption // The choices users can vote for ballots []Ballot // The cast votes by users private_group []u32 // Optional: list of user IDs who are eligible to vote } // ProposalStatus defines the lifecycle status of a governance proposal itself pub enum ProposalStatus { draft // Proposal is being prepared active // Proposal is active (might be pre-voting, during voting, or post-voting but not yet finalized) approved // Proposal has been formally approved rejected // Proposal has been formally rejected cancelled// Proposal was cancelled } // -- Structures from biz/vote.v, adapted for integration -- // VoteEventStatus represents the status of the voting process for a proposal // Renamed from VoteStatus in biz/vote.v to avoid confusion with ProposalStatus pub enum VoteEventStatus { open // Voting is currently open closed // Voting has finished cancelled // The voting event was cancelled } // VoteOption represents a specific choice that can be voted on within a proposal's voting event pub struct VoteOption { pub mut: id u8 // Simple identifier for this option within this proposal's vote (e.g., 1, 2, 3) text string // The descriptive text of the option (e.g., "Option A: Approve budget") count int // How many votes this option has received min_valid int // Optional: minimum votes needed for this option to be considered valid } // Ballot represents an individual vote cast by a user for a specific proposal pub struct Ballot { base.Base // Provides Ballot's own ID, created_at, updated_at pub mut: user_id u32 // The ID of the user who cast this ballot vote_option_id u8 // The 'id' of the VoteOption chosen by the user shares_count int // Number of shares/tokens/voting power used for this ballot }