Fix database scheme and introduce automatic database migration

This commit is contained in:
2026-01-19 23:22:16 +01:00
parent 6fb38a795c
commit cc40c33dc9
5 changed files with 114 additions and 42 deletions

View File

@@ -15,13 +15,6 @@ from .models import (
from .validation import encode_hostname, encode_zone, ValidationError
def cmd_init_db(args, app):
"""Initialize database tables."""
create_tables()
print("Database tables created.")
return 0
def cmd_user_list(args, app):
"""List all users."""
users = User.select()
@@ -198,9 +191,11 @@ def cmd_hostname_add(args, app):
print(f"Error: User '{username}' not found.")
return 1
# Check if hostname exists
if Hostname.select().where(Hostname.hostname == hostname_str).exists():
print(f"Error: Hostname '{hostname_str}' already exists.")
# Check if hostname+zone exists
if Hostname.select().where(
(Hostname.hostname == hostname_str) & (Hostname.zone == zone)
).exists():
print(f"Error: Hostname '{hostname_str}' in zone '{zone}' exists.")
return 1
# Create hostname
@@ -217,17 +212,18 @@ def cmd_hostname_add(args, app):
def cmd_hostname_delete(args, app):
"""Delete a hostname."""
# Validate and encode hostname
# Validate and encode hostname and zone
try:
hostname_str = encode_hostname(args.hostname)
zone = encode_zone(args.zone)
except ValidationError as e:
print(f"Error: {e}")
return 1
try:
hostname = get_hostname(hostname_str)
hostname = get_hostname(hostname_str, zone)
except DoesNotExist:
print(f"Error: Hostname '{hostname_str}' not found.")
print(f"Error: Hostname '{hostname_str}' in zone '{zone}' not found.")
return 1
# Delete DNS records if active
@@ -262,17 +258,18 @@ def cmd_hostname_delete(args, app):
def cmd_hostname_modify(args, app):
"""Modify hostname settings."""
# Validate and encode hostname
# Validate and encode hostname and zone
try:
hostname_str = encode_hostname(args.hostname)
zone = encode_zone(args.zone)
except ValidationError as e:
print(f"Error: {e}")
return 1
try:
hostname = get_hostname(hostname_str)
hostname = get_hostname(hostname_str, zone)
except DoesNotExist:
print(f"Error: Hostname '{hostname_str}' not found.")
print(f"Error: Hostname '{hostname_str}' in zone '{zone}' not found.")
return 1
# Get new TTLs