aether-framework/resources/[aether]/aether-admin/server/module/immobilien.lua
Jerrit Fritzsche e4b82dd685 Aether-Framework: Fachmodule, Admin-Panel und Docker-Datenbank
- aether-medical: Stationen/Belegung, Intensivstation, Blutbank, Fuhrpark,
  Nachrichten/Aushänge, Berichte und Textbausteine (server + NUI)
- aether-admin: vollständiges Server-Admin-Panel als echtes FiveM-Resource,
  an aether-core gekoppelt (Rechte über aether_users.admin_group), mit
  WebRTC-Live-Kameras (Bildschirmfreigabe) und separatem Media-Server (SFU)
- Prototypen admin/ vervollständigt
- SQL-Schema aether_admin.sql
- Docker-Compose mit MariaDB und idempotenter Auto-Migration (schema_migrations)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 18:55:32 +02:00

52 lines
2.0 KiB
Lua

-- =====================================================================
-- aether-admin / Modul: Immobilien
--
-- Solange kein eigenständiges Immobilien-Resource läuft, verwaltet das
-- Panel die Objekte. Der Besitzer ist ein Charakter aus aether_characters.
-- =====================================================================
Admin = Admin or {}
Admin.Kern.Registriere('immobilien', 'laden', function(handelnder, daten)
local liste = MySQL.query.await([[
SELECT i.id, i.name, i.ort, i.preis, i.besitzer,
CONCAT(c.firstname, ' ', c.lastname) AS besitzerName
FROM aether_admin_properties i
LEFT JOIN aether_characters c ON c.id = i.besitzer
ORDER BY i.id
]]) or {}
-- Online-Charaktere zur Auswahl als Besitzer
local online = {}
local alle = exports['aether-core']:HoleAlleSpieler() or {}
for _, d in pairs(alle) do
online[#online + 1] = {
charakterId = d.charakterId,
name = (d.vorname or '?') .. ' ' .. (d.nachname or ''),
}
end
return { immobilien = liste, spieler = online,
rechte = Admin.Kern.RechteAbbild(handelnder.quelle) }
end)
Admin.Kern.Registriere('immobilien', 'zuweisen', function(handelnder, daten)
local id = tonumber(daten.id)
if not id then return nil, 'Ungültige Kennung.' end
local besitzer = tonumber(daten.besitzer) -- nil = frei
MySQL.update.await('UPDATE aether_admin_properties SET besitzer = ? WHERE id = ?',
{ besitzer, id })
Admin.Log.Schreibe(handelnder, 'Immobilie zugewiesen', 'Objekt #' .. id,
besitzer and ('Charakter #' .. besitzer) or 'frei')
return { ok = true }
end)
Admin.Kern.Registriere('immobilien', 'raeumen', function(handelnder, daten)
local id = tonumber(daten.id)
if not id then return nil, 'Ungültige Kennung.' end
MySQL.update.await('UPDATE aether_admin_properties SET besitzer = NULL WHERE id = ?', { id })
Admin.Log.Schreibe(handelnder, 'Immobilie geräumt', 'Objekt #' .. id)
return { ok = true }
end)