This commit is contained in:
hz
2025-05-08 09:29:20 -05:00
parent 4f67e2b56f
commit c0a94f26d6
31 changed files with 1181 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
using System;
using System.Threading.Tasks;
using GameAuthApi.Models;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
namespace GameAuthApi.Services;
public class BlacklistService
{
private readonly IMongoCollection<BlacklistedToken> _blacklist;
public BlacklistService(IConfiguration config)
{
var client = new MongoClient(config["MongoDB:ConnectionString"]);
var db = client.GetDatabase(config["MongoDB:DatabaseName"]);
_blacklist = db.GetCollection<BlacklistedToken>("BlacklistedTokens");
}
public async Task AddToBlacklistAsync(string token, DateTime expiry)
{
var entry = new BlacklistedToken { Token = token, Expiry = expiry };
await _blacklist.InsertOneAsync(entry);
}
public async Task<bool> IsTokenBlacklistedAsync(string token)
{
var exists = await _blacklist.Find(x => x.Token == token && x.Expiry > DateTime.UtcNow).FirstOrDefaultAsync();
return exists != null;
}
}
+39
View File
@@ -0,0 +1,39 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using GameAuthApi.Models;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
namespace GameAuthApi.Services;
public class ItemService
{
private readonly IMongoCollection<Item> _items;
public ItemService(IConfiguration config)
{
var client = new MongoClient(config["MongoDB:ConnectionString"]);
var db = client.GetDatabase(config["MongoDB:DatabaseName"]);
_items = db.GetCollection<Item>("Items");
}
public async Task CreateAsync(Item item)
{
await _items.InsertOneAsync(item);
}
public async Task<List<Item>> GetByLocationAsync(string locationId)
{
return await _items.Find(i => i.LocationId == locationId).ToListAsync();
}
public async Task<Item> GetByIdAsync(string id)
{
return await _items.Find(i => i.Id == id).FirstOrDefaultAsync();
}
public async Task UpdateAsync(Item item)
{
await _items.ReplaceOneAsync(i => i.Id == item.Id, item);
}
}
+69
View File
@@ -0,0 +1,69 @@
using System.Threading.Tasks;
using GameAuthApi.Models;
using Microsoft.Extensions.Configuration;
using MongoDB.Bson;
using MongoDB.Driver;
namespace GameAuthApi.Services;
public class LocationService
{
private readonly IMongoCollection<Location> _locations;
public LocationService(IConfiguration config)
{
var client = new MongoClient(config["MongoDB:ConnectionString"]);
var db = client.GetDatabase(config["MongoDB:DatabaseName"]);
_locations = db.GetCollection<Location>("Locations");
}
public async Task<Location> GetByIdAsync(string id)
{
if (!ObjectId.TryParse(id, out _))
return null; // prevent crash if id is invalid
return await _locations.Find(x => x.Id == id).FirstOrDefaultAsync();
}
public async Task CreateAsync(Location loc) =>
await _locations.InsertOneAsync(loc);
public async Task DeleteAsync(string id) =>
await _locations.DeleteOneAsync(loc => loc.Id == id);
public async Task UpdateAsync(Location loc) =>
await _locations.ReplaceOneAsync(l => l.Id == loc.Id, loc);
public async Task AddPlayerToLocationAsync(string locationId, string playerId)
{
var update = Builders<Location>.Update.AddToSet(l => l.Players, playerId);
await _locations.UpdateOneAsync(l => l.Id == locationId, update);
}
public async Task<Location> GetByCoordinatesAsync(int x, int y, int z)
{
return await _locations.Find(loc => loc.X == x && loc.Y == y && loc.Z == z).FirstOrDefaultAsync();
}
public async Task<Location> GetSpawnLocationAsync()
{
return await _locations.Find(loc => loc.X == 0 && loc.Y == 0).FirstOrDefaultAsync();
}
public async Task RemovePlayerFromLocationAsync(string locationId, string playerId)
{
var update = Builders<Location>.Update.Pull(l => l.Players, playerId);
await _locations.UpdateOneAsync(l => l.Id == locationId, update);
}
public async Task AddItemToLocationAsync(string locationId, string itemId)
{
var update = Builders<Location>.Update.Push(l => l.Content, itemId);
await _locations.UpdateOneAsync(l => l.Id == locationId, update);
}
public async Task RemoveItemFromLocationAsync(string locationId, string itemId)
{
var update = Builders<Location>.Update.Pull(l => l.Content, itemId);
await _locations.UpdateOneAsync(l => l.Id == locationId, update);
}
}
+44
View File
@@ -0,0 +1,44 @@
// Services/PlayerService.cs
using System.Collections.Generic;
using System.Threading.Tasks;
using GameAuthApi.Models;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
namespace GameAuthApi.Services;
public class PlayerService
{
private readonly IMongoCollection<Player> _players;
public PlayerService(IConfiguration config)
{
var client = new MongoClient(config["MongoDB:ConnectionString"]);
var db = client.GetDatabase(config["MongoDB:DatabaseName"]);
_players = db.GetCollection<Player>("Players");
}
public async Task<Player> GetByUserIdAsync(string userId) =>
await _players.Find(p => p.UserId == userId).FirstOrDefaultAsync();
public async Task<List<Player>> GetByLocationIdAsync(string locationId)
{
return await _players.Find(p => p.LocationId == locationId).ToListAsync();
}
public async Task<Player> GetByIdAsync(string id) =>
await _players.Find(p => p.Id == id).FirstOrDefaultAsync();
public async Task CreateAsync(Player player) =>
await _players.InsertOneAsync(player);
public async Task UpdateAsync(Player player)
{
await _players.ReplaceOneAsync(p => p.Id == player.Id, player);
}
public async Task DeleteAsync(string id)
{
await _players.DeleteOneAsync(p => p.Id == id);
}
}
+29
View File
@@ -0,0 +1,29 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using GameAuthApi.Models;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
namespace GameAuthApi.Services;
public class SpawnableService
{
private readonly IMongoCollection<Spawnable> _spawnables;
public SpawnableService(IConfiguration config)
{
var client = new MongoClient(config["MongoDB:ConnectionString"]);
var db = client.GetDatabase(config["MongoDB:DatabaseName"]);
_spawnables = db.GetCollection<Spawnable>("Spawnables");
}
public async Task CreateAsync(Spawnable spawnable)
{
await _spawnables.InsertOneAsync(spawnable);
}
public async Task<List<Spawnable>> GetAllAsync()
{
return await _spawnables.Find(_ => true).ToListAsync();
}
}
+27
View File
@@ -0,0 +1,27 @@
using System.Threading.Tasks;
using GameAuthApi.Models;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
namespace GameAuthApi.Services;
public class UserService
{
private readonly IMongoCollection<User> _users;
public UserService(IConfiguration config)
{
var client = new MongoClient(config["MongoDB:ConnectionString"]);
var database = client.GetDatabase(config["MongoDB:DatabaseName"]);
_users = database.GetCollection<User>("Users");
}
public async Task<User> GetByUsernameAsync(string username) =>
await _users.Find(u => u.Username == username).FirstOrDefaultAsync();
public async Task CreateAsync(User user) =>
await _users.InsertOneAsync(user);
public async Task UpdateAsync(User user) =>
await _users.ReplaceOneAsync(u => u.Id == user.Id, user);
}