package domain import ( "context" "time" ) // ProposalStatus represents the status of a proposal type ProposalStatus string const ( ProposalStatusPending ProposalStatus = "pending" ProposalStatusAccepted ProposalStatus = "accepted" ProposalStatusRejected ProposalStatus = "rejected" ) // Proposal represents a symbiosis proposal between organizations type Proposal struct { ID string `gorm:"primaryKey;type:text" json:"id"` FromOrgID string `gorm:"not null;type:text;index" json:"from_org_id"` ToOrgID string `gorm:"not null;type:text;index" json:"to_org_id"` ResourceID string `gorm:"not null;type:text;index" json:"resource_id"` ResourceType ResourceDirection `gorm:"not null;type:varchar(50)" json:"resource_type"` ResourceName string `gorm:"type:text" json:"resource_name"` Message string `gorm:"type:text" json:"message"` Status ProposalStatus `gorm:"type:varchar(50);default:'pending'" json:"status"` CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` } // TableName specifies the table name for GORM func (Proposal) TableName() string { return "proposals" } // ProposalRepository interface for proposal data access type ProposalRepository interface { Create(ctx context.Context, proposal *Proposal) error GetByID(ctx context.Context, id string) (*Proposal, error) GetAll(ctx context.Context) ([]*Proposal, error) GetByOrganizationID(ctx context.Context, orgID string) ([]*Proposal, error) UpdateStatus(ctx context.Context, id string, status ProposalStatus) error Delete(ctx context.Context, id string) error }