# Muteservice - Devnotes
## Datatable
| id | user_id | level | reason | evidence | executor | timestamp | deleted? |
| -------- | -------- | -------- |----------|----------|-----------|-----------|----------|
| 1 | 110817 | 1 | "insult" | "https://wi.timolia.de/cr/225" |110817 | 1634524336|0 |
| 2 | 249914 | 5 | "advertising" | | 110817 | 1634524409|0 |
| 3 | 110817 | 2 | "spam" | | 110817 | 1634524529|0 |
level: geht nach Knozpet von 1-5, könnte vom Muteservice als config hinterlegt werden.
reason: wird von teamplern selbst ausgewählt
executor: teamler der den mute vollziehen will
## Endpoints
### Queries
* mute_info (liefert zeit bis mute abläuft, 0 wenn kein mute vorliegt + reason -> null wenn kein mute)
* mute_info_detailed (liefert alle spalten + wann mute abläuft -> aktueller mute)
* all_mutes_user (liefert zu einem user alle mutes als liste)
* possible_mutes_user (liefert zu einem user allen möglichen mute zeit die mit dem jeweiligen level erreicht wäre)
### Mutations
* mute_user (mute mit user_id, level, reason, evidence und initiator)
* delete_entry (delete entry mit id)
* edit_entry (edit mit allen spalten)
## Notizen / Verwarnungen
Bei jedem mute wird eine Notiz mit Verwarnung erstellt (insbesondere wenn der user offline ist), könnte auch im wi/ig erstellt werden.
## Mute Zeit bestimmen
Bei einem neuen mute wird das level auf eine gewisse Zeit gemappt z.B.
```
1 -> 2h
2 -> 5h
3 -> 12h
4 -> 24h
5 -> 48h
```
Dann werden die bisher gesammelten punkte der letzen 360?(config, verjährung) Tage summiert
```sql
SELECT SUM('level') FROM 'timolia_mutes' WHERE 'user_id' = :user_id AND 'timestamp' > 1602981209
```
diese Anzahl wird dann mit einem faktor/algorithmus normalisiert und auf die Mute-Zeit addiert. Die maximale zeit soll dabei nicht 180 Tage überschreiten.
## Redis
Sinnvoll wäre zu jedem (kürzlich angeschauten) user die letzten mutepunkte abzuspeichern und erst mit einem Mute zu updaten.