uncloud-mravi/uncloud_django_based/uncloud/doc/README-object-relations.md
2020-04-06 22:08:29 +02:00

2.1 KiB

Introduction

This article describes how models relate to each other and what the design ideas are. It is meant to prevent us from double implementing something or changing something that is already solved.

Products

A product is something someone can order. We might have "low level" products that need to be composed (= higher degree of flexibility, but more amount of details necessary) and "composed products" that present some defaults or select other products automatically (f.i. a "dual stack VM" can be a VM + a disk + an IPv4 address).

Bills

Bills represent active orders of a month. Bills can be shown during a month but only become definitive at the end of the month.

Orders

When customer X order a (set) of product, it generates an order for billing purposes. The ordered products point to that order and register an Order Record at creation.

Orders and Order Records are assumed immutable => they are used to generate bills and should not be mutated. If a product is updated (e.g. adding RAM to VM), a new order should be generated.

The order MUST NOT be deleted when a product is deleted, as it is used for billing (including past bills).

Order record

Used to store billing details of a product at creation: will stay there even if the product change (e.g. new pricing, updated) and act as some kind of archive. Used to generate bills.

Payment Methods

Users/customers can register payment methods.

Sample flows / products

A VM snapshot

A VM snapshot creates a snapshot of all disks attached to a VM to be able to rollback the VM to a previous state.

Creating a VM snapshot (-product) creates a related order. Deleting a VMSnapshotproduct sets the order to deleted.

Object Storage

(tbd by Balazs)

A "raw" VM

(tbd by Ahmed)

An IPv6 only VM

(tbd by Ahmed)

A dual stack VM

(tbd by Ahmed)

A managed service (e.g. Matrix-as-a-Service)

Customer orders service with: * Service-specific configuration: e.g. domain name for matrix * VM configuration: - CPU - Memory - Disk (soon)

It creates a new Order with two products/records: * Service itself (= management) * Underlying VM