module transaction.data; import handy_http_primitives : Optional; import std.datetime; import transaction.model; import transaction.api : TransactionsListItem; import util.money; import util.pagination; interface TransactionVendorRepository { Optional!TransactionVendor findById(ulong id); TransactionVendor[] findAll(); bool existsByName(string name); TransactionVendor insert(string name, string description); void deleteById(ulong id); TransactionVendor updateById(ulong id, string name, string description); } interface TransactionCategoryRepository { Optional!TransactionCategory findById(ulong id); TransactionCategory[] findAllByParentId(Optional!ulong parentId); TransactionCategory insert(Optional!ulong parentId, string name, string description, string color); void deleteById(ulong id); TransactionCategory updateById(ulong id, string name, string description, string color); } interface TransactionTagRepository { string[] findAllByTransactionId(ulong transactionId); void updateTags(ulong transactionId, string[] tags); string[] findAll(); } interface TransactionRepository { Page!TransactionsListItem findAll(PageRequest pr); Optional!Transaction findById(ulong id); Transaction insert( SysTime timestamp, SysTime addedAt, ulong amount, Currency currency, string description, Optional!ulong vendorId, Optional!ulong categoryId ); void deleteById(ulong id); }