triggr-program 0.1.1

Created with Anchor
Documentation
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(())
}