81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
from django.db import models
|
|
from django.urls import reverse
|
|
|
|
|
|
class PostizInstallBrief(models.Model):
|
|
PACKAGE_MANAGER_CHOICES = [
|
|
("pnpm", "pnpm"),
|
|
("npm", "npm"),
|
|
]
|
|
NODE_VERSION_CHOICES = [
|
|
("18 LTS", "18 LTS"),
|
|
("20 LTS", "20 LTS"),
|
|
("22 Current", "22 Current"),
|
|
]
|
|
EMAIL_PROVIDER_CHOICES = [
|
|
("none", "Skip for now"),
|
|
("resend", "Resend"),
|
|
("smtp", "SMTP / Nodemailer"),
|
|
]
|
|
UPLOAD_STRATEGY_CHOICES = [
|
|
("local", "Local uploads"),
|
|
("r2", "Cloudflare R2"),
|
|
("later", "Decide later"),
|
|
]
|
|
|
|
title = models.CharField(max_length=120)
|
|
public_url = models.URLField(help_text="Public URL where the reverse proxy will expose Postiz.")
|
|
node_version = models.CharField(max_length=20, choices=NODE_VERSION_CHOICES, default="20 LTS")
|
|
package_manager = models.CharField(max_length=10, choices=PACKAGE_MANAGER_CHOICES, default="pnpm")
|
|
postgres_ready = models.BooleanField(default=False)
|
|
redis_ready = models.BooleanField(default=False)
|
|
temporal_ready = models.BooleanField(default=False)
|
|
email_provider = models.CharField(max_length=20, choices=EMAIL_PROVIDER_CHOICES, default="none")
|
|
upload_strategy = models.CharField(max_length=20, choices=UPLOAD_STRATEGY_CHOICES, default="local")
|
|
notes = models.TextField(blank=True)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
class Meta:
|
|
ordering = ["-updated_at"]
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
def get_absolute_url(self):
|
|
return reverse("brief_detail", args=[self.pk])
|
|
|
|
@property
|
|
def ready_services_count(self):
|
|
return sum([self.postgres_ready, self.redis_ready, self.temporal_ready])
|
|
|
|
@property
|
|
def readiness_percent(self):
|
|
return int((self.ready_services_count / 3) * 100)
|
|
|
|
@property
|
|
def status_label(self):
|
|
if self.ready_services_count == 3:
|
|
return "Ready for repo bootstrap"
|
|
if self.ready_services_count == 0:
|
|
return "Blocked by missing services"
|
|
return "Infrastructure in progress"
|
|
|
|
@property
|
|
def status_tone(self):
|
|
if self.ready_services_count == 3:
|
|
return "success"
|
|
if self.ready_services_count == 0:
|
|
return "danger"
|
|
return "warning"
|
|
|
|
@property
|
|
def next_milestone(self):
|
|
if self.ready_services_count == 3:
|
|
return "Clone the Postiz repository and run the first development boot commands."
|
|
if not self.postgres_ready:
|
|
return "Provision PostgreSQL and capture DATABASE_URL for the .env file."
|
|
if not self.redis_ready:
|
|
return "Bring Redis online so background queues can start locally."
|
|
return "Prepare Temporal and point TEMPORAL_ADDRESS at the stack."
|