Add history page
This commit is contained in:
parent
4b891dd672
commit
2289b14b5a
|
|
@ -72,7 +72,7 @@ public class HistoryApiController implements HistoryApi {
|
||||||
UserType userTypeEnum = UserType.getUserType(userType);
|
UserType userTypeEnum = UserType.getUserType(userType);
|
||||||
HistoryType historyTypeEnum = HistoryType.getHistoryType(type);
|
HistoryType historyTypeEnum = HistoryType.getHistoryType(type);
|
||||||
CompletableFuture<List<String>> playerGroupFuture = new CompletableFuture<>();
|
CompletableFuture<List<String>> playerGroupFuture = new CompletableFuture<>();
|
||||||
|
|
||||||
Connection.getConnection(Databases.LITE_BANS)
|
Connection.getConnection(Databases.LITE_BANS)
|
||||||
.runQuery(sqlSession -> {
|
.runQuery(sqlSession -> {
|
||||||
log.debug("Loading user names for type {}", type);
|
log.debug("Loading user names for type {}", type);
|
||||||
|
|
@ -93,9 +93,9 @@ public class HistoryApiController implements HistoryApi {
|
||||||
PunishmentHistoryInnerDto innerDto = new PunishmentHistoryInnerDto()
|
PunishmentHistoryInnerDto innerDto = new PunishmentHistoryInnerDto()
|
||||||
.uuid(historyRecord.getUuid())
|
.uuid(historyRecord.getUuid())
|
||||||
.username(historyRecord.getPunishedName())
|
.username(historyRecord.getPunishedName())
|
||||||
.reason(historyRecord.getReason())
|
.reason(PunishmentHistoryInnerDto.ReasonEnum.valueOf(historyRecord.getReason()))
|
||||||
.punishmentUserUuid(historyRecord.getBannedByUuid())
|
.punishedByUuid(historyRecord.getBannedByUuid())
|
||||||
.punishmentUser(historyRecord.getBannedByName())
|
.punishedBy(historyRecord.getBannedByName())
|
||||||
.removedBy(historyRecord.getRemovedByName())
|
.removedBy(historyRecord.getRemovedByName())
|
||||||
.punishmentTime(historyRecord.getTime())
|
.punishmentTime(historyRecord.getTime())
|
||||||
.expiryTime(historyRecord.getUntil())
|
.expiryTime(historyRecord.getUntil())
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@ package com.alttd.altitudeweb.database.litebans;
|
||||||
|
|
||||||
public enum HistoryType {
|
public enum HistoryType {
|
||||||
ALL,
|
ALL,
|
||||||
BANS,
|
BAN,
|
||||||
MUTES,
|
MUTE,
|
||||||
KICKS,
|
KICK,
|
||||||
WARNS;
|
WARN;
|
||||||
|
|
||||||
public static HistoryType getHistoryType(String historyType) {
|
public static HistoryType getHistoryType(String historyType) {
|
||||||
return HistoryType.valueOf(historyType.toUpperCase());
|
return HistoryType.valueOf(historyType.toUpperCase());
|
||||||
|
|
|
||||||
|
|
@ -92,10 +92,10 @@ public interface NameHistoryMapper {
|
||||||
int page) {
|
int page) {
|
||||||
return switch (historyType) {
|
return switch (historyType) {
|
||||||
case ALL -> getRecentAll(userType, partialName, page);
|
case ALL -> getRecentAll(userType, partialName, page);
|
||||||
case BANS -> getRecentBans(userType, partialName, page);
|
case BAN -> getRecentBans(userType, partialName, page);
|
||||||
case MUTES -> getRecentMutes(userType, partialName, page);
|
case MUTE -> getRecentMutes(userType, partialName, page);
|
||||||
case KICKS -> getRecentKicks(userType, partialName, page);
|
case KICK -> getRecentKicks(userType, partialName, page);
|
||||||
case WARNS -> getRecentWarns(userType, partialName, page);
|
case WARN -> getRecentWarns(userType, partialName, page);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ public interface RecentNamesMapper {
|
||||||
default List<String> getRecent(HistoryType historyType, UserType userType) {
|
default List<String> getRecent(HistoryType historyType, UserType userType) {
|
||||||
return switch (historyType) {
|
return switch (historyType) {
|
||||||
case ALL -> getRecentAll(userType);
|
case ALL -> getRecentAll(userType);
|
||||||
case BANS -> getRecentBans(userType);
|
case BAN -> getRecentBans(userType);
|
||||||
case MUTES -> getRecentMutes(userType);
|
case MUTE -> getRecentMutes(userType);
|
||||||
case KICKS -> getRecentKicks(userType);
|
case KICK -> getRecentKicks(userType);
|
||||||
case WARNS -> getRecentWarns(userType);
|
case WARN -> getRecentWarns(userType);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,10 +67,10 @@ public interface UUIDHistoryMapper {
|
||||||
default List<HistoryRecord> getRecent(HistoryType historyType, UserType userType, UUID uuid, int page) {
|
default List<HistoryRecord> getRecent(HistoryType historyType, UserType userType, UUID uuid, int page) {
|
||||||
return switch (historyType) {
|
return switch (historyType) {
|
||||||
case ALL -> getRecentAll(userType, uuid, page);
|
case ALL -> getRecentAll(userType, uuid, page);
|
||||||
case BANS -> getRecentBans(userType, uuid, page);
|
case BAN -> getRecentBans(userType, uuid, page);
|
||||||
case MUTES -> getRecentMutes(userType, uuid, page);
|
case MUTE -> getRecentMutes(userType, uuid, page);
|
||||||
case KICKS -> getRecentKicks(userType, uuid, page);
|
case KICK -> getRecentKicks(userType, uuid, page);
|
||||||
case WARNS -> getRecentWarns(userType, uuid, page);
|
case WARN -> getRecentWarns(userType, uuid, page);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,10 @@ export const routes: Routes = [
|
||||||
{
|
{
|
||||||
path: 'privacy',
|
path: 'privacy',
|
||||||
loadComponent: () => import('./privacy/privacy.component').then(m => m.PrivacyComponent)
|
loadComponent: () => import('./privacy/privacy.component').then(m => m.PrivacyComponent)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'bans',
|
||||||
|
loadComponent: () => import('./bans/bans.component').then(m => m.BansComponent)
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
20
frontend/src/app/bans/bans.component.html
Normal file
20
frontend/src/app/bans/bans.component.html
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
<ng-container>
|
||||||
|
<app-header [current_page]="'bans'" height="200px" background_image="/public/img/backgrounds/staff.png"
|
||||||
|
[overlay_gradient]="0.5">>
|
||||||
|
<div class="title" header-content>
|
||||||
|
<h1>Punishment History</h1>
|
||||||
|
</div>
|
||||||
|
</app-header>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="columnContainer">
|
||||||
|
<button (click)="punishmentType = 'all'">all</button>
|
||||||
|
<button (click)="punishmentType = 'ban'">bans</button>
|
||||||
|
<button (click)="punishmentType = 'mute'">mutes</button>
|
||||||
|
<button (click)="punishmentType = 'warn'">warnings</button>
|
||||||
|
</div>
|
||||||
|
<div class="columnContainer">
|
||||||
|
<app-history [userType]="userType" [punishmentType]="punishmentType"></app-history>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ng-container>
|
||||||
0
frontend/src/app/bans/bans.component.scss
Normal file
0
frontend/src/app/bans/bans.component.scss
Normal file
23
frontend/src/app/bans/bans.component.spec.ts
Normal file
23
frontend/src/app/bans/bans.component.spec.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { BansComponent } from './bans.component';
|
||||||
|
|
||||||
|
describe('BansComponent', () => {
|
||||||
|
let component: BansComponent;
|
||||||
|
let fixture: ComponentFixture<BansComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
imports: [BansComponent]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(BansComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
19
frontend/src/app/bans/bans.component.ts
Normal file
19
frontend/src/app/bans/bans.component.ts
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
import {Component} from '@angular/core';
|
||||||
|
import {HeaderComponent} from "../header/header.component";
|
||||||
|
import {HistoryComponent} from './history/history.component';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-bans',
|
||||||
|
imports: [
|
||||||
|
HeaderComponent,
|
||||||
|
HistoryComponent
|
||||||
|
],
|
||||||
|
templateUrl: './bans.component.html',
|
||||||
|
styleUrl: './bans.component.scss'
|
||||||
|
})
|
||||||
|
export class BansComponent {
|
||||||
|
|
||||||
|
public userType: 'player' | 'staff' = "player";
|
||||||
|
public punishmentType: 'all' | 'ban' | 'mute' | 'kick' | 'warn' = "all";
|
||||||
|
|
||||||
|
}
|
||||||
16
frontend/src/app/bans/history/history.component.html
Normal file
16
frontend/src/app/bans/history/history.component.html
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<ng-container *ngIf="history.length === 0">
|
||||||
|
<p>No history found</p>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container *ngIf="history.length > 0">
|
||||||
|
<table>
|
||||||
|
<tr *ngFor="let entry of history">
|
||||||
|
<td>{{ entry.username }}</td>
|
||||||
|
<td>{{ entry.punishedBy }}</td>
|
||||||
|
<td>{{ entry.reason }}</td>
|
||||||
|
<td>{{ getPunishmentTime(entry) }}</td>
|
||||||
|
<td>{{ getExpiredTime(entry) }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
23
frontend/src/app/bans/history/history.component.spec.ts
Normal file
23
frontend/src/app/bans/history/history.component.spec.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { HistoryComponent } from './history.component';
|
||||||
|
|
||||||
|
describe('HistoryComponent', () => {
|
||||||
|
let component: HistoryComponent;
|
||||||
|
let fixture: ComponentFixture<HistoryComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
imports: [HistoryComponent]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(HistoryComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
66
frontend/src/app/bans/history/history.component.ts
Normal file
66
frontend/src/app/bans/history/history.component.ts
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
import {Component, Input, OnChanges, OnInit} from '@angular/core';
|
||||||
|
import {BASE_PATH, HistoryService, PunishmentHistoryInner} from '../../../api';
|
||||||
|
import {map, shareReplay} from 'rxjs';
|
||||||
|
import {NgForOf, NgIf} from '@angular/common';
|
||||||
|
import {CookieService} from 'ngx-cookie-service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-history',
|
||||||
|
imports: [
|
||||||
|
NgIf,
|
||||||
|
NgForOf
|
||||||
|
],
|
||||||
|
templateUrl: './history.component.html',
|
||||||
|
styleUrl: './history.component.scss',
|
||||||
|
providers: [
|
||||||
|
CookieService,
|
||||||
|
{provide: BASE_PATH, useValue: 'http://localhost:8080/'}
|
||||||
|
],
|
||||||
|
})
|
||||||
|
export class HistoryComponent implements OnInit, OnChanges {
|
||||||
|
|
||||||
|
@Input() userType: 'player' | 'staff' = "player";
|
||||||
|
@Input() punishmentType: 'all' | 'ban' | 'mute' | 'kick' | 'warn' = "all";
|
||||||
|
|
||||||
|
public history: PunishmentHistoryInner[] = []
|
||||||
|
|
||||||
|
constructor(private historyApi: HistoryService) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnChanges(): void {
|
||||||
|
this.reloadHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
this.reloadHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
private reloadHistory(): void {
|
||||||
|
console.log('userType', this.userType);
|
||||||
|
console.log('punishmentType', this.punishmentType);
|
||||||
|
this.historyApi.getHistoryForAll(this.userType, this.punishmentType, 0).pipe(
|
||||||
|
map(history => {
|
||||||
|
this.history = history;
|
||||||
|
console.log("HI");
|
||||||
|
console.log(history);
|
||||||
|
history.forEach(history => {
|
||||||
|
console.log(history);
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
shareReplay(1)
|
||||||
|
).subscribe();
|
||||||
|
}
|
||||||
|
|
||||||
|
public getPunishmentTime(entry: PunishmentHistoryInner) {
|
||||||
|
const date = new Date(entry.punishmentTime);
|
||||||
|
return date.toLocaleDateString(navigator.language);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getExpiredTime(entry: PunishmentHistoryInner) {
|
||||||
|
if (entry.expiryTime === 0) {
|
||||||
|
return "Permanent " + entry.type.charAt(0).toUpperCase() + entry.type.slice(1);
|
||||||
|
}
|
||||||
|
const date = new Date(entry.punishmentTime + entry.expiryTime);
|
||||||
|
return date.toLocaleDateString(navigator.language);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -112,7 +112,7 @@ components:
|
||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
enum: [ all, bans, mutes, kicks ]
|
enum: [ all, ban, mute, kick, warn ]
|
||||||
description: The type of history to retrieve
|
description: The type of history to retrieve
|
||||||
User:
|
User:
|
||||||
name: user
|
name: user
|
||||||
|
|
@ -154,7 +154,9 @@ components:
|
||||||
- reason
|
- reason
|
||||||
- type
|
- type
|
||||||
- punishmentTime
|
- punishmentTime
|
||||||
- punishmentUserUuid
|
- expiryTime
|
||||||
|
- punishedBy
|
||||||
|
- punishedByUuid
|
||||||
properties:
|
properties:
|
||||||
username:
|
username:
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -165,6 +167,7 @@ components:
|
||||||
reason:
|
reason:
|
||||||
type: string
|
type: string
|
||||||
description: The reason for the punishment
|
description: The reason for the punishment
|
||||||
|
enum: [ ban, mute, kick, warn ]
|
||||||
type:
|
type:
|
||||||
type: string
|
type: string
|
||||||
description: The type of punishment
|
description: The type of punishment
|
||||||
|
|
@ -176,10 +179,10 @@ components:
|
||||||
type: integer
|
type: integer
|
||||||
format: int64
|
format: int64
|
||||||
description: The time when the punishment expires
|
description: The time when the punishment expires
|
||||||
punishmentUser:
|
punishedBy:
|
||||||
type: string
|
type: string
|
||||||
description: The username of the punishment issuer
|
description: The username of the punishment issuer
|
||||||
punishmentUserUuid:
|
punishedByUuid:
|
||||||
type: string
|
type: string
|
||||||
description: The UUID of the punishment issuer
|
description: The UUID of the punishment issuer
|
||||||
removedBy:
|
removedBy:
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ getTeam:
|
||||||
description: Retrieve players who are part of the specified team
|
description: Retrieve players who are part of the specified team
|
||||||
operationId: getTeamMembers
|
operationId: getTeamMembers
|
||||||
parameters:
|
parameters:
|
||||||
- name: group
|
- name: team
|
||||||
in: path
|
in: path
|
||||||
required: true
|
required: true
|
||||||
description: The group name of the team
|
description: The group name of the team
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user