mirror of
https://github.com/SoDOff-Project/sodoff.git
synced 2025-10-11 16:28:50 -07:00
-Implement Schema And Model For Bans And Implement `ModerationService
`
-Modify ``User`` To Have Ban Collection -Add ``Bans`` Table To ``DBContext``
This commit is contained in:
parent
3ddbb93b10
commit
0e90d5a111
@ -25,6 +25,7 @@ public class DBContext : DbContext {
|
||||
public DbSet<Party> Parties { get; set; } = null!;
|
||||
public DbSet<Neighborhood> Neighborhoods { get; set; } = null!;
|
||||
// we had a brief debate on whether it's neighborhoods or neighborheed
|
||||
public DbSet<UserBan> UserBans { get; set; } = null!;
|
||||
|
||||
private readonly IOptions<ApiServerConfig> config;
|
||||
|
||||
@ -252,5 +253,9 @@ public class DBContext : DbContext {
|
||||
builder.Entity<Neighborhood>().HasOne(r => r.Viking)
|
||||
.WithOne(e => e.Neighborhood)
|
||||
.HasForeignKey<Neighborhood>(e => e.VikingId);
|
||||
|
||||
builder.Entity<UserBan>().HasOne(r => r.User)
|
||||
.WithMany(e => e.Bans)
|
||||
.HasForeignKey(e => e.UserId);
|
||||
}
|
||||
}
|
||||
|
@ -17,4 +17,5 @@ public class User {
|
||||
public virtual ICollection<Session> Sessions { get; set; } = null!;
|
||||
public virtual ICollection<Viking> Vikings { get; set; } = null!;
|
||||
public virtual ICollection<PairData> PairData { get; set; } = null!;
|
||||
public virtual ICollection<UserBan> Bans { get; set; } = null!;
|
||||
}
|
||||
|
20
src/Model/UserBan.cs
Normal file
20
src/Model/UserBan.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using sodoff.Schema;
|
||||
|
||||
namespace sodoff.Model;
|
||||
|
||||
public class UserBan
|
||||
{
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public Guid? UserId { get; set; } = null!;
|
||||
|
||||
public UserBanType BanType { get; set; } = UserBanType.TemporarySuspension;
|
||||
public DateTime? CreatedAt { get; set; } = new DateTime();
|
||||
public DateTime? EndsAt { get; set; } = new DateTime();
|
||||
|
||||
public virtual User User { get; set; } = null!;
|
||||
}
|
@ -40,6 +40,7 @@ builder.Services.AddScoped<GameDataService>();
|
||||
builder.Services.AddScoped<ProfileService>();
|
||||
builder.Services.AddScoped<NeighborhoodService>();
|
||||
builder.Services.AddScoped<MMOCommunicationService>();
|
||||
builder.Services.AddScoped<ModerationService>();
|
||||
|
||||
bool assetServer = builder.Configuration.GetSection("AssetServer").GetValue<bool>("Enabled");
|
||||
string assetIP = builder.Configuration.GetSection("AssetServer").GetValue<string>("ListenIP");
|
||||
|
11
src/Schema/UserBanType.cs
Normal file
11
src/Schema/UserBanType.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace sodoff.Schema;
|
||||
|
||||
public enum UserBanType
|
||||
{
|
||||
IndefiniteSuspension = 1,
|
||||
IndefiniteMPSuspension = 2,
|
||||
TemporarySuspension = 3,
|
||||
TemporaryMPSuspension = 4,
|
||||
IndefiniteTCSuspension = 5,
|
||||
TemporaryTCSuspension = 6
|
||||
}
|
67
src/Services/ModerationService.cs
Normal file
67
src/Services/ModerationService.cs
Normal file
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using sodoff.Model;
|
||||
using sodoff.Schema;
|
||||
|
||||
namespace sodoff.Services;
|
||||
|
||||
public class ModerationService
|
||||
{
|
||||
private readonly DBContext ctx;
|
||||
|
||||
public ModerationService(DBContext ctx)
|
||||
{
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
public UserBan AddBanToUser(User user, UserBanType banType, DateTime dateEnd = new DateTime())
|
||||
{
|
||||
// create a ban in relation to the specified user
|
||||
UserBan userBan = new UserBan
|
||||
{
|
||||
BanType = banType,
|
||||
CreatedAt = DateTime.UtcNow
|
||||
};
|
||||
|
||||
// if suspension is indefinite, set end date to infinity
|
||||
if(banType == UserBanType.IndefiniteSuspension || banType == UserBanType.IndefiniteMPSuspension || banType == UserBanType.IndefiniteTCSuspension) userBan.EndsAt = new DateTime(9999, 01, 01);
|
||||
else userBan.EndsAt = dateEnd;
|
||||
|
||||
// add ban to user ban list
|
||||
user.Bans.Add(userBan);
|
||||
|
||||
// update database
|
||||
ctx.SaveChanges();
|
||||
|
||||
// return ban
|
||||
return userBan;
|
||||
}
|
||||
|
||||
public bool RemoveBanFromUser(User user, UserBan ban)
|
||||
{
|
||||
// remove ban from database if it exists on the user
|
||||
if(user.Bans.FirstOrDefault(e => e == ban) != null) { user.Bans.Remove(ban); ctx.SaveChanges(); return true; }
|
||||
else return false;
|
||||
}
|
||||
|
||||
public bool RemoveAllBansFromUser(User user)
|
||||
{
|
||||
// remove all bans from user if user has any
|
||||
if(user.Bans.Count >= 0) { foreach(var ban in user.Bans) user.Bans.Remove(ban); ctx.SaveChanges(); return true; }
|
||||
else return false;
|
||||
}
|
||||
|
||||
public UserBan GetLatestBanFromUser(User user)
|
||||
{
|
||||
// retreive the most recently created ban from user
|
||||
UserBan? userBan = user.Bans.OrderByDescending(e => e.CreatedAt).FirstOrDefault();
|
||||
|
||||
if(userBan != null) return userBan;
|
||||
else return null!; // return null if the user has no bans on record
|
||||
}
|
||||
|
||||
public ICollection<UserBan> GetAllBansFromUser(User user, bool descendingOrder = false)
|
||||
{
|
||||
if(descendingOrder) return user.Bans.OrderByDescending(e => e.CreatedAt).ToList();
|
||||
else return user.Bans.OrderBy(e => e.CreatedAt).ToList(); // return sorted list by created date
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user