1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// This file is part of Anagolay Foundation.
// Copyright (C) 2019-2022 Anagolay Foundation.
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

use super::*;
use crate::types::{Workflow, WorkflowRecord, WorkflowVersion, WorkflowVersionRecord};
use sp_std::borrow::ToOwned;

impl<T: Config> Pallet<T> {
  /// Inserts the Operation into the `WorkflowsByAccountIdAndWorkflowId` storage
  /// Increases the `Total` Workflow count
  ///
  /// Does no checks.
  ///
  /// # Arguments
  ///  * workflow - The Workflow to insert
  ///  * account_id - The owner of the Workflow
  ///  * block_number - Current block
  pub fn do_create_workflow(workflow: &Workflow, account_id: &T::AccountId, block_number: &T::BlockNumber) {
    let workflow_record = WorkflowRecord::<T> {
      record: workflow.clone(),
      account_id: account_id.clone(),
      block_number: *block_number,
    };

    WorkflowByWorkflowIdAndAccountId::<T>::insert(&workflow.id, &account_id, workflow_record.clone());

    Total::<T>::put(Self::total().saturating_add(1));
  }

  /// Inserts the Workflow Version into the `VersionsByOperationId` and
  /// `Versions` storages Insert each package cid in the `PackageCid` storage
  ///
  /// Does no checks.
  ///
  /// # Arguments
  ///  * workflow_version - The Operation to insert
  ///  * account_id - The owner of the Operation
  ///  * block_number - Current block
  pub fn do_create_workflow_version(
    workflow_version: &WorkflowVersion,
    account_id: &T::AccountId,
    block_number: T::BlockNumber,
  ) {
    let record = WorkflowVersionRecord::<T> {
      record: workflow_version.clone(),
      account_id: account_id.clone(),
      block_number,
    };

    let workflow_id = &workflow_version.data.entity_id.as_ref().unwrap();
    let workflow_version_id = workflow_version.id.to_owned();

    VersionByVersionId::<T>::insert(&workflow_version_id, record);

    VersionIdsByWorkflowId::<T>::mutate(workflow_id, |versions| {
      versions.push(workflow_version_id.clone());
    });

    anagolay_support::Pallet::<T>::store_artifacts(&workflow_version.data.artifacts);
  }
}