Initialize Django project #8

Merged
rixx merged 34 commits from 1-initialize-project into main 2025-03-16 09:09:26 +00:00
4 changed files with 27 additions and 1 deletions
Showing only changes of commit e8c624d408 - Show all commits

View file

@ -33,3 +33,6 @@ SERVALA_EMAIL_PASSWORD=''
# At most one of the following settings may be set to True # At most one of the following settings may be set to True
SERVALA_EMAIL_TLS='False' SERVALA_EMAIL_TLS='False'
SERVALA_EMAIL_SSL='False' SERVALA_EMAIL_SSL='False'
# If the default OrganizationOrigin is **not** the one with the database ID 1, set it here.
SERVALA_DEFAULT_ORIGIN='1'

View file

@ -49,7 +49,8 @@ class BillingEntity(models.Model):
class OrganizationOrigin(models.Model): class OrganizationOrigin(models.Model):
""" """
Every organization has an origin, though origins may be Every organization has an origin, though origins may be
shared across different organizations. shared across different organizations. The default origin
(by PK) is configured in the settings as SERVALA_DEFAULT_ORIGIN.
""" """
name = models.CharField(max_length=100, verbose_name=_("Name")) name = models.CharField(max_length=100, verbose_name=_("Name"))

View file

@ -3,6 +3,10 @@ from django.utils.translation import gettext_lazy as _
class ServiceCategory(models.Model): class ServiceCategory(models.Model):
"""
Categories for services, e.g. "Databases", "Storage", "Compute".
"""
name = models.CharField(max_length=100, verbose_name=_("Name")) name = models.CharField(max_length=100, verbose_name=_("Name"))
description = models.TextField(blank=True, verbose_name=_("Description")) description = models.TextField(blank=True, verbose_name=_("Description"))
logo = models.ImageField( logo = models.ImageField(
@ -26,6 +30,10 @@ class ServiceCategory(models.Model):
class Service(models.Model): class Service(models.Model):
"""
A service that can be offered, e.g. "PostgreSQL", "MinIO", "Kubernetes".
"""
name = models.CharField(max_length=100, verbose_name=_("Name")) name = models.CharField(max_length=100, verbose_name=_("Name"))
description = models.TextField(blank=True, verbose_name=_("Description")) description = models.TextField(blank=True, verbose_name=_("Description"))
logo = models.ImageField( logo = models.ImageField(
@ -64,6 +72,10 @@ class ControlPlane(models.Model):
class CloudProvider(models.Model): class CloudProvider(models.Model):
"""
A cloud provider, e.g. "Exoscale".
"""
name = models.CharField(max_length=100, verbose_name=_("Name")) name = models.CharField(max_length=100, verbose_name=_("Name"))
description = models.TextField(blank=True, verbose_name=_("Description")) description = models.TextField(blank=True, verbose_name=_("Description"))
logo = models.ImageField( logo = models.ImageField(
@ -79,6 +91,10 @@ class CloudProvider(models.Model):
class Plan(models.Model): class Plan(models.Model):
"""
Each service offering can have multiple plans, e.g. for different tiers.
"""
name = models.CharField(max_length=100, verbose_name=_("Name")) name = models.CharField(max_length=100, verbose_name=_("Name"))
description = models.TextField(blank=True, verbose_name=_("Description")) description = models.TextField(blank=True, verbose_name=_("Description"))
# TODO schema # TODO schema
@ -98,6 +114,10 @@ class Plan(models.Model):
class ServiceOffering(models.Model): class ServiceOffering(models.Model):
"""
A service offering, e.g. "PostgreSQL on AWS", "MinIO on GCP".
"""
description = models.TextField(blank=True, verbose_name=_("Description")) description = models.TextField(blank=True, verbose_name=_("Description"))
service = models.ForeignKey( service = models.ForeignKey(
to="Service", to="Service",

View file

@ -62,6 +62,8 @@ EMAIL_HOST_PASSWORD = os.environ.get("SERVALA_EMAIL_PASSWORD", "")
EMAIL_USE_TLS = os.environ.get("SERVALA_EMAIL_TLS", "False") == "True" EMAIL_USE_TLS = os.environ.get("SERVALA_EMAIL_TLS", "False") == "True"
EMAIL_USE_SSL = os.environ.get("SERVALA_EMAIL_SSL", "False") == "True" EMAIL_USE_SSL = os.environ.get("SERVALA_EMAIL_SSL", "False") == "True"
SERVALA_DEFAULT_ORIGIN = int(os.environ.get("SERVALA_DEFAULT_ORIGIN", "1"))
####################################### #######################################
# Non-configurable settings below # # Non-configurable settings below #
####################################### #######################################