fix: correct generate endpoint return type, migration server_default SQL, and auth loading propagation

This commit is contained in:
2026-02-28 21:22:11 +01:00
parent 1de7974921
commit 488c385de3
3 changed files with 23 additions and 21 deletions

View File

@@ -30,7 +30,7 @@ def upgrade() -> None:
"configs",
sa.Column("id", sa.Integer, primary_key=True),
sa.Column("name", sa.String(128), nullable=False),
sa.Column("description", sa.Text, server_default=""),
sa.Column("description", sa.Text, server_default="''"),
sa.Column("is_active", sa.Boolean, server_default="true"),
sa.Column("created_at", sa.DateTime, server_default=sa.func.now()),
sa.Column("updated_at", sa.DateTime, server_default=sa.func.now()),
@@ -42,7 +42,7 @@ def upgrade() -> None:
sa.Column("config_id", sa.Integer, sa.ForeignKey("configs.id"), nullable=False),
sa.Column("name", sa.String(32), nullable=False),
sa.Column("type", sa.String(16), nullable=False),
sa.Column("options", sa.Text, server_default=""),
sa.Column("options", sa.Text, server_default="''"),
sa.UniqueConstraint("config_id", "name", name="uq_zone_name_per_config"),
)
op.create_table(
@@ -51,7 +51,7 @@ def upgrade() -> None:
sa.Column("config_id", sa.Integer, sa.ForeignKey("configs.id"), nullable=False),
sa.Column("name", sa.String(32), nullable=False),
sa.Column("zone_id", sa.Integer, sa.ForeignKey("zones.id"), nullable=False),
sa.Column("options", sa.Text, server_default=""),
sa.Column("options", sa.Text, server_default="''"),
)
op.create_table(
"policies",
@@ -60,8 +60,8 @@ def upgrade() -> None:
sa.Column("src_zone_id", sa.Integer, sa.ForeignKey("zones.id"), nullable=False),
sa.Column("dst_zone_id", sa.Integer, sa.ForeignKey("zones.id"), nullable=False),
sa.Column("policy", sa.String(16), nullable=False),
sa.Column("log_level", sa.String(16), server_default=""),
sa.Column("comment", sa.Text, server_default=""),
sa.Column("log_level", sa.String(16), server_default="''"),
sa.Column("comment", sa.Text, server_default="''"),
sa.Column("position", sa.Integer, server_default="0"),
)
op.create_table(
@@ -71,12 +71,12 @@ def upgrade() -> None:
sa.Column("action", sa.String(32), nullable=False),
sa.Column("src_zone_id", sa.Integer, sa.ForeignKey("zones.id"), nullable=True),
sa.Column("dst_zone_id", sa.Integer, sa.ForeignKey("zones.id"), nullable=True),
sa.Column("src_ip", sa.String(64), server_default=""),
sa.Column("dst_ip", sa.String(64), server_default=""),
sa.Column("proto", sa.String(16), server_default=""),
sa.Column("dport", sa.String(64), server_default=""),
sa.Column("sport", sa.String(64), server_default=""),
sa.Column("comment", sa.Text, server_default=""),
sa.Column("src_ip", sa.String(64), server_default="''"),
sa.Column("dst_ip", sa.String(64), server_default="''"),
sa.Column("proto", sa.String(16), server_default="''"),
sa.Column("dport", sa.String(64), server_default="''"),
sa.Column("sport", sa.String(64), server_default="''"),
sa.Column("comment", sa.Text, server_default="''"),
sa.Column("position", sa.Integer, server_default="0"),
)
op.create_table(
@@ -85,8 +85,8 @@ def upgrade() -> None:
sa.Column("config_id", sa.Integer, sa.ForeignKey("configs.id"), nullable=False),
sa.Column("source_network", sa.String(64), nullable=False),
sa.Column("out_interface", sa.String(32), nullable=False),
sa.Column("to_address", sa.String(64), server_default=""),
sa.Column("comment", sa.Text, server_default=""),
sa.Column("to_address", sa.String(64), server_default="''"),
sa.Column("comment", sa.Text, server_default="''"),
)
# --- Seed data ---

View File

@@ -82,7 +82,7 @@ def generate_config(
format: str = "json",
db: Session = Depends(get_db),
current_user: models.User = Depends(get_current_user),
) -> Response:
):
config = (
db.query(models.Config)
.options(

View File

@@ -10,20 +10,22 @@ export interface User {
// Simple module-level state (no external lib needed)
let currentUser: User | null = null
let isLoading = true
let fetchPromise: Promise<void> | null = null
const listeners = new Set<() => void>()
export function useAuth() {
const [user, setUser] = useState<User | null>(currentUser)
const [loading, setLoading] = useState(currentUser === null)
const [loading, setLoading] = useState(isLoading)
useEffect(() => {
const update = () => setUser(currentUser)
const update = () => { setUser(currentUser); setLoading(isLoading) }
listeners.add(update)
if (currentUser === null) {
authApi.me()
.then((res) => { currentUser = res.data; listeners.forEach((l) => l()) })
.catch(() => { currentUser = null; listeners.forEach((l) => l()) })
.finally(() => setLoading(false))
if (!fetchPromise) {
fetchPromise = authApi.me()
.then((res) => { currentUser = res.data })
.catch(() => { currentUser = null })
.finally(() => { isLoading = false; listeners.forEach((l) => l()) })
}
return () => { listeners.delete(update) }
}, [])