Admin notes (#7259)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
This commit is contained in:
@@ -822,6 +822,69 @@ namespace Content.Server.Database
|
||||
|
||||
#endregion
|
||||
|
||||
#region Admin Notes
|
||||
|
||||
public virtual async Task<int> AddAdminNote(AdminNote note)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
db.DbContext.AdminNotes.Add(note);
|
||||
await db.DbContext.SaveChangesAsync();
|
||||
return note.Id;
|
||||
}
|
||||
|
||||
public async Task<AdminNote?> GetAdminNote(int id)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
return await db.DbContext.AdminNotes
|
||||
.Where(note => note.Id == id)
|
||||
.Include(note => note.Round)
|
||||
.Include(note => note.CreatedBy)
|
||||
.Include(note => note.LastEditedBy)
|
||||
.Include(note => note.DeletedBy)
|
||||
.Include(note => note.Player)
|
||||
.SingleOrDefaultAsync();
|
||||
}
|
||||
|
||||
public async Task<List<AdminNote>> GetAdminNotes(Guid player)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
return await db.DbContext.AdminNotes
|
||||
.Where(note => note.PlayerUserId == player)
|
||||
.Where(note => !note.Deleted)
|
||||
.Include(note => note.Round)
|
||||
.Include(note => note.CreatedBy)
|
||||
.Include(note => note.LastEditedBy)
|
||||
.Include(note => note.Player)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
public async Task DeleteAdminNote(int id, Guid deletedBy, DateTime deletedAt)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
|
||||
var note = await db.DbContext.AdminNotes.Where(note => note.Id == id).SingleAsync();
|
||||
|
||||
note.Deleted = true;
|
||||
note.DeletedById = deletedBy;
|
||||
note.DeletedAt = deletedAt;
|
||||
|
||||
await db.DbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public async Task EditAdminNote(int id, string message, Guid editedBy, DateTime editedAt)
|
||||
{
|
||||
await using var db = await GetDb();
|
||||
|
||||
var note = await db.DbContext.AdminNotes.Where(note => note.Id == id).SingleAsync();
|
||||
note.Message = message;
|
||||
note.LastEditedById = editedBy;
|
||||
note.LastEditedAt = editedAt;
|
||||
|
||||
await db.DbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected abstract Task<DbGuard> GetDb();
|
||||
|
||||
protected abstract class DbGuard : IAsyncDisposable
|
||||
|
||||
@@ -195,6 +195,16 @@ namespace Content.Server.Database
|
||||
Task SetLastReadRules(NetUserId player, DateTime time);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Admin Notes
|
||||
|
||||
Task<int> AddAdminNote(int? roundId, Guid player, string message, Guid createdBy, DateTime createdAt);
|
||||
Task<AdminNote?> GetAdminNote(int id);
|
||||
Task<List<AdminNote>> GetAdminNotes(Guid player);
|
||||
Task DeleteAdminNote(int id, Guid deletedBy, DateTime deletedAt);
|
||||
Task EditAdminNote(int id, string message, Guid editedBy, DateTime editedAt);
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public sealed class ServerDbManager : IServerDbManager
|
||||
@@ -485,6 +495,42 @@ namespace Content.Server.Database
|
||||
return _db.SetLastReadRules(player, time);
|
||||
}
|
||||
|
||||
public Task<int> AddAdminNote(int? roundId, Guid player, string message, Guid createdBy, DateTime createdAt)
|
||||
{
|
||||
var note = new AdminNote
|
||||
{
|
||||
RoundId = roundId,
|
||||
CreatedById = createdBy,
|
||||
LastEditedById = createdBy,
|
||||
PlayerUserId = player,
|
||||
Message = message,
|
||||
CreatedAt = createdAt,
|
||||
LastEditedAt = createdAt
|
||||
};
|
||||
|
||||
return _db.AddAdminNote(note);
|
||||
}
|
||||
|
||||
public Task<AdminNote?> GetAdminNote(int id)
|
||||
{
|
||||
return _db.GetAdminNote(id);
|
||||
}
|
||||
|
||||
public Task<List<AdminNote>> GetAdminNotes(Guid player)
|
||||
{
|
||||
return _db.GetAdminNotes(player);
|
||||
}
|
||||
|
||||
public Task DeleteAdminNote(int id, Guid deletedBy, DateTime deletedAt)
|
||||
{
|
||||
return _db.DeleteAdminNote(id, deletedBy, deletedAt);
|
||||
}
|
||||
|
||||
public Task EditAdminNote(int id, string message, Guid editedBy, DateTime editedAt)
|
||||
{
|
||||
return _db.EditAdminNote(id, message, editedBy, editedAt);
|
||||
}
|
||||
|
||||
private DbContextOptions<PostgresServerDbContext> CreatePostgresOptions()
|
||||
{
|
||||
var host = _cfg.GetCVar(CCVars.DatabasePgHost);
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
@@ -11,7 +9,6 @@ using Content.Server.Preferences.Managers;
|
||||
using Content.Shared.CCVar;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Network;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
@@ -491,6 +488,22 @@ namespace Content.Server.Database
|
||||
await db.DbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public override async Task<int> AddAdminNote(AdminNote note)
|
||||
{
|
||||
await using (var db = await GetDb())
|
||||
{
|
||||
var nextId = 1;
|
||||
if (await db.DbContext.AdminNotes.AnyAsync())
|
||||
{
|
||||
nextId = await db.DbContext.AdminNotes.MaxAsync(dbVersion => dbVersion.Id) + 1;
|
||||
}
|
||||
|
||||
note.Id = nextId;
|
||||
}
|
||||
|
||||
return await base.AddAdminNote(note);
|
||||
}
|
||||
|
||||
private async Task<DbGuardImpl> GetDbImpl()
|
||||
{
|
||||
await _dbReadyTask;
|
||||
|
||||
Reference in New Issue
Block a user