type ModelDefinition = Type.Topology.Model.Definition const Account: ModelDefinition = { name: "Account", backend: { engine: "mongodb", }, unique: ["id", "name"] } const Authentication: ModelDefinition = { name: "Authentication", backend: { engine: "mongodb", }, unique: ["guid"] } const TTL: ModelDefinition = { name: "TTL", backend: { engine: "mongodb", }, unique: ["id"] } export const AccountTopology: Type.Topology.Specification.Definition = { model: { Account, Authentication, TTL }, topic: { account: ["Account.id", "Authentication.accountId"] } } import * as Root from "@root-ts/topology" type ModelDefinition = Type.Topology.Model.Definition //type ModelAlias = Type.Topology.ModelAlias export const PlotterModel: ModelDefinition = { name: "Plotter", backend: { engine: "mongodb", }, unique: ["plotterId"], permission: { owner: { from: "Account.id", create: true, read: true, }, } } export const MineModel: ModelDefinition = { name: "Mine", backend: { engine: "mongodb", }, unique: ["blockHeight"], permission: { public: { read: true } } } export const SubmissionModel: ModelDefinition = { name: "Submission", backend: { engine: "mongodb", }, unique: ["nonce"], permission: { owner: { from: "Account.id", read: true, create: true }, } } export const PoolModel: ModelDefinition = { name: "Pool", backend: { engine: "map", index: "name" }, unique: ["name"], permission: { public: { read: true } } } export const BlockchainModel: ModelDefinition = { name: "Blockchain", backend: { engine: "single", }, permission: { public: { read: true } } } export const MinerModel: ModelDefinition = { name: "Miner", backend: { engine: "mongodb" }, unique: ["uuid"], permission: { owner: { from: "Account.id", via: ["Plotter.plotterId"], delete: true } } } export const AccountBalance: ModelDefinition = { name: "AccountBalance", backend: { engine: "mongodb" }, unique: ["accountId"], permission: { owner: { from: "Account.id", read: true } } } export const AccountSettlement: ModelDefinition = { name: "AccountSettlement", backend: { engine: "mongodb" }, unique: ["id"], permission: { owner: { from: "Account.id", read: true } } } export const SystemSettlement: ModelDefinition = { name: "SystemSettlement", backend: { engine: "mongodb" }, unique: ["id"], permission: { user: { read: true } } } export const Payout: ModelDefinition = { name: "Payout", backend: { engine: "mongodb" }, unique: ["id"] } export const POCTopology: Type.Topology.Specification.Definition = { name: "POC", base: ["account"], model: { PlotterModel, MineModel, SubmissionModel, PoolModel, BlockchainModel, MinerModel, AccountBalance, AccountSettlement, SystemSettlement, Payout }, topic: { account: ["Account.id", "Plotter.accountId", "Mine.accountId", "Submission.accountId", "AccountBalance.accountId", "AccountSettlement.accountId", "Payout.accountId"], settlement: ["AccountSettlement.systemSettlementId", "SystemSettlement.id"], plotter: ["Plotter.id", "Mine.plotter", "Submission.plotter"], plotterId: ["Plotter.plotterId", "Mine.plotterId", "Submission.plotterId", "Miner.plotterId"], submission: ["Mine.submissionId", "Submission.id"], blockHeight: ["Mine.blockHeight", "Submission.blockHeight", "Blockchain.currentHeight"] } } export const TestTopology = POCTopology