diff --git a/campaign/src/get_all_milestones.rs b/campaign/src/get_all_milestones.rs index 7d0a8d4..8891951 100644 --- a/campaign/src/get_all_milestones.rs +++ b/campaign/src/get_all_milestones.rs @@ -1,8 +1,8 @@ use soroban_sdk::{panic_with_error, Env, Vec}; -use crate::storage::get_campaign; +use crate::storage::{get_campaign, get_milestone}; use crate::types::Error; -use crate::views::{self, MilestoneView}; +use crate::views::{find_next_pending_index, MilestoneView}; /// Issue #200 – Returns enriched views for ALL milestones in the campaign. /// @@ -16,9 +16,21 @@ pub fn get_all_milestones_view(env: &Env) -> Vec { let campaign = get_campaign(env).unwrap_or_else(|| panic_with_error!(env, Error::NotInitialized)); + let next_pending = find_next_pending_index(env); + let mut result: Vec = Vec::new(env); for i in 0..campaign.milestone_count { - result.push_back(views::get_milestone_by_index(env, i)); + let data = get_milestone(env, i) + .unwrap_or_else(|| panic_with_error!(env, Error::MilestoneNotFound)); + let pending_release = data.pending_release(); + let is_fully_released = data.is_fully_released(); + let is_next_pending = next_pending == i; + result.push_back(MilestoneView { + data, + pending_release, + is_fully_released, + is_next_pending, + }); } result }