-- ===================================================================== -- aether-medical — Protokoll -- -- Jede Entscheidung im System hinterlässt eine Spur: wer, wann, was -- und warum. Einträge werden nur geschrieben und gelesen, nie -- geändert oder entfernt. -- ===================================================================== Protokoll = {} --- Schreibt einen Protokolleintrag --- @param mitarbeiter table|nil Handelnder Mitarbeiter --- @param modul string Modulkennung --- @param aktion string Was wurde getan --- @param ziel table|nil { typ, id } --- @param details table|nil Beliebige Zusatzdaten --- @param grund string|nil Begründung, falls angegeben function Protokoll.Schreibe(mitarbeiter, modul, aktion, ziel, details, grund) MySQL.insert([[ INSERT INTO medical_protokoll (`character`, personalnummer, modul, aktion, ziel_typ, ziel_id, details, grund) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ]], { mitarbeiter and mitarbeiter.charakterId or nil, mitarbeiter and mitarbeiter.personalnummer or nil, modul, aktion, ziel and ziel.typ or nil, ziel and tostring(ziel.id) or nil, details and json.encode(details) or nil, grund, }) end --- Liest Protokolleinträge mit einfachen Filtern --- @param filter table { modul?, charakterId?, zielTyp?, zielId?, limit? } --- @return table function Protokoll.Lies(filter) filter = filter or {} local bedingungen, werte = {}, {} if filter.modul then bedingungen[#bedingungen + 1] = 'modul = ?' werte[#werte + 1] = filter.modul end if filter.charakterId then bedingungen[#bedingungen + 1] = '`character` = ?' werte[#werte + 1] = filter.charakterId end if filter.zielTyp and filter.zielId then bedingungen[#bedingungen + 1] = 'ziel_typ = ? AND ziel_id = ?' werte[#werte + 1] = filter.zielTyp werte[#werte + 1] = tostring(filter.zielId) end local wo = #bedingungen > 0 and ('WHERE ' .. table.concat(bedingungen, ' AND ')) or '' werte[#werte + 1] = math.min(filter.limit or 100, 500) return MySQL.query.await(([[ SELECT p.*, c.firstname, c.lastname FROM medical_protokoll p LEFT JOIN aether_characters c ON c.id = p.`character` %s ORDER BY p.id DESC LIMIT ? ]]):format(wo), werte) or {} end