COOPENOMICS  v1
Кооперативная Экономика
appendix.hpp
См. документацию.
1#pragma once
2
3using namespace eosio;
4using std::string;
5
13 namespace Status {
14 constexpr eosio::name CREATED = "created"_n;
15 }
16}
17
18namespace Capital {
27 struct [[eosio::table, eosio::contract(CAPITAL)]] appendix {
28 uint64_t id;
29 name coopname;
30 name username;
31 checksum256 project_hash;
32 checksum256 appendix_hash;
33 name status;
34 time_point_sec created_at;
36
37 uint64_t primary_key() const { return id; }
38
39 uint64_t by_username() const { return username.value; }
40 checksum256 by_project() const { return project_hash; }
41 checksum256 by_hash() const { return appendix_hash; }
42 uint128_t by_project_user() const { return combine_checksum_ids(project_hash, username); }
43 };
44
45typedef eosio::multi_index<
46 "appendixes"_n, appendix,
47 indexed_by<"byusername"_n, const_mem_fun<appendix, uint64_t, &appendix::by_username>>,
48 indexed_by<"byproject"_n, const_mem_fun<appendix, checksum256, &appendix::by_project>>,
49 indexed_by<"byhash"_n, const_mem_fun<appendix, checksum256, &appendix::by_hash>>,
50 indexed_by<"byprojuser"_n, const_mem_fun<appendix, uint128_t, &appendix::by_project_user>>
52
53}// namespace Capital
54
55
56namespace Capital::Appendix {
57 inline void create_appendix(eosio::name coopname, eosio::name username, checksum256 project_hash, checksum256 appendix_hash, document2 document){
58 Capital::appendix_index appendixes(_capital, coopname.value);
59 auto appendix_id = get_global_id_in_scope(_capital, coopname, "appendixes"_n);
60
61 appendixes.emplace(coopname, [&](auto &a) {
62 a.id = appendix_id;
63 a.coopname = coopname;
64 a.username = username;
65 a.project_hash = project_hash;
66 a.appendix_hash = appendix_hash;
68 a.created_at = current_time_point();
69 a.appendix = document;
70 });
71 }
72
76 inline std::optional<appendix> get_appendix(eosio::name coopname, const checksum256 &appendix_hash) {
77 appendix_index appendixes(_capital, coopname.value);
78 auto by_hash = appendixes.get_index<"byhash"_n>();
79 auto itr = by_hash.find(appendix_hash);
80
81 if (itr == by_hash.end()) {
82 return std::nullopt;
83 }
84
85 return *itr;
86 }
87
91 inline void delete_appendix(eosio::name coopname, uint64_t appendix_id){
92 // Удаляем запись из таблицы appendixes
93 Capital::appendix_index appendixes(_capital, coopname.value);
94 auto itr = appendixes.find(appendix_id);
95 appendixes.erase(itr);
96 }
97
98}// namespace Capital::Appendix
static constexpr eosio::name _capital
Definition: consts.hpp:150
contract
Definition: eosio.msig_tests.cpp:977
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: counts.hpp:61
constexpr eosio::name CREATED
Приложение создано
Definition: appendix.hpp:14
Definition: appendix.hpp:6
void create_appendix(eosio::name coopname, eosio::name username, checksum256 project_hash, checksum256 appendix_hash, document2 document)
Definition: appendix.hpp:57
void delete_appendix(eosio::name coopname, uint64_t appendix_id)
Удаляет приложение из таблицы appendixes.
Definition: appendix.hpp:91
std::optional< appendix > get_appendix(eosio::name coopname, const checksum256 &appendix_hash)
Получает приложение по хэшу
Definition: appendix.hpp:76
Definition: balances.cpp:6
eosio::multi_index< "appendixes"_n, appendix, indexed_by<"byusername"_n, const_mem_fun< appendix, uint64_t, &appendix::by_username > >, indexed_by<"byproject"_n, const_mem_fun< appendix, checksum256, &appendix::by_project > >, indexed_by<"byhash"_n, const_mem_fun< appendix, checksum256, &appendix::by_hash > >, indexed_by<"byprojuser"_n, const_mem_fun< appendix, uint128_t, &appendix::by_project_user > > > appendix_index
Definition: appendix.hpp:51
Definition: eosio.msig.hpp:34
Таблица приложений хранит данные о приложениях к договору УХД для конкретных проектов.
Definition: appendix.hpp:27
checksum256 by_hash() const
Индекс по хэшу приложения (4)
Definition: appendix.hpp:41
uint128_t by_project_user() const
Индекс по проекту и пользователю (5)
Definition: appendix.hpp:42
checksum256 by_project() const
Индекс по проекту (3)
Definition: appendix.hpp:40
document2 appendix
Документ приложения
Definition: appendix.hpp:35
checksum256 project_hash
Хэш проекта
Definition: appendix.hpp:31
name coopname
Имя кооператива
Definition: appendix.hpp:29
time_point_sec created_at
Время создания приложения
Definition: appendix.hpp:34
name status
Статус приложения
Definition: appendix.hpp:33
uint64_t by_username() const
Индекс по имени пользователя (2)
Definition: appendix.hpp:39
uint64_t primary_key() const
Первичный ключ (1)
Definition: appendix.hpp:37
checksum256 appendix_hash
Хэш приложения
Definition: appendix.hpp:32
name username
Имя пользователя
Definition: appendix.hpp:30
uint64_t id
ID приложения (внутренний ключ)
Definition: appendix.hpp:28
Definition: drafts.hpp:28
Definition: drafts.hpp:7
static uint128_t combine_checksum_ids(const checksum256 &hash, eosio::name username)
Definition: utils.hpp:9