pub use crate::state::*;
use anchor_lang::{prelude::*, solana_program::clock::Clock, system_program::System};
#[derive(Accounts)]
#[instruction(task_args: Task, trigger_index: u64, task_index: u8)]
pub struct UpdateTask<'info> {
#[account(mut)]
signer: Signer<'info>,
#[account(mut, seeds = ["user".as_bytes(), &signer.key().to_bytes()], bump)]
user: Account<'info, User>,
#[account(mut, seeds = ["trigger".as_bytes(), &signer.key().to_bytes()[..], &trigger_index.to_le_bytes()], bump )]
trigger: Account<'info, Trigger>,
#[account(
mut,
seeds = ["task".as_bytes(), &trigger.key().to_bytes()[..], &task_index.to_le_bytes()[..]],
bump,
realloc = 8 + task_args.try_to_vec()?.len(),
realloc::payer = signer,
realloc::zero = true
)]
task: Account<'info, Task>,
system_program: Program<'info, System>,
}
pub fn handler(
ctx: Context<UpdateTask>,
task_args: Task,
_trigger_index: u64,
_task_index: u8,
) -> Result<()> {
ctx.accounts.task.status = task_args.status;
ctx.accounts.task.bundles = task_args.bundles;
ctx.accounts.task.updated_at = Clock::get()?.unix_timestamp;
Ok(())
}