API V1 Aeldria

This commit is contained in:
2026-06-23 13:32:17 +02:00
commit b56c82d229
164 changed files with 5666 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
using BCrypt.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Aeldria.Api.Data;
using Aeldria.Api.DTOs;
using Aeldria.Api.Models;
using Aeldria.Api.Services;
namespace Aeldria.Api.Controllers;
[ApiController]
[Route("api/auth")]
public class AuthController : ControllerBase
{
private readonly AeldriaDbContext _db;
private readonly JwtService _jwt;
public AuthController(AeldriaDbContext db, JwtService jwt)
{
_db = db;
_jwt = jwt;
}
[HttpPost("register")]
public async Task<IActionResult> Register(RegisterRequest request)
{
if (await _db.Accounts.AnyAsync(x => x.Username == request.Username))
return BadRequest("Nom d'utilisateur déjà utilisé.");
if (await _db.Accounts.AnyAsync(x => x.Email == request.Email))
return BadRequest("Email déjà utilisé.");
var account = new Account
{
Username = request.Username,
Email = request.Email,
PasswordHash = PasswordService.HashPassword(request.Password),
CreatedAt = DateTime.UtcNow,
IsBanned = false,
IsVerified = false
};
_db.Accounts.Add(account);
await _db.SaveChangesAsync();
return Ok(new
{
Message = "Compte créé avec succès.",
AccountId = account.AccountId
});
}
[HttpPost("login")]
public async Task<IActionResult> Login(LoginRequest request)
{
var account = await _db.Accounts
.FirstOrDefaultAsync(x => x.Username == request.Username);
if (account == null)
return Unauthorized("Compte introuvable.");
if (!PasswordService.VerifyPassword(request.Password, account.PasswordHash))
return Unauthorized("Mot de passe incorrect.");
account.LastLogin = DateTime.UtcNow;
await _db.SaveChangesAsync();
var token = _jwt.GenerateToken(account);
return Ok(new
{
Message = "Connexion réussie.",
AccountId = account.AccountId,
Username = account.Username,
Token = token
});
}
}
+98
View File
@@ -0,0 +1,98 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Aeldria.Api.Data;
using Aeldria.Api.Models;
using Aeldria.Api.DTOs;
namespace Aeldria.Api.Controllers;
[ApiController]
[Authorize]
[Route("api/[controller]")]
public class CharactersController : ControllerBase
{
private readonly AeldriaDbContext _db;
public CharactersController(AeldriaDbContext db)
{
_db = db;
}
[HttpPost("create")]
public async Task<IActionResult> Create(CreateCharacterRequest request)
{
if (await _db.Characters.AnyAsync(x => x.Name == request.Name))
return BadRequest("Nom déjà utilisé.");
var accountId = long.Parse(
User.FindFirst(
System.Security.Claims.ClaimTypes.NameIdentifier
)!.Value
);
var character = new Character
{
AccountId = accountId,
Name = request.Name,
Level = 1,
Experience = 0,
PosX = 0,
PosY = 0,
PosZ = 0,
CreatedAt = DateTime.UtcNow,
FactionId = 1,
RaceId = 1
};
_db.Characters.Add(character);
await _db.SaveChangesAsync();
return Ok(character);
}
[HttpGet("my")]
public async Task<IActionResult> GetCharacters()
{
var accountId = long.Parse(
User.FindFirst(
System.Security.Claims.ClaimTypes.NameIdentifier
)!.Value
);
var characters = await _db.Characters
.Where(x => x.AccountId == accountId)
.ToListAsync();
return Ok(characters);
}
[HttpGet("{characterId}")]
public async Task<IActionResult> GetCharacter(long characterId)
{
var character = await _db.Characters
.FirstOrDefaultAsync(x => x.CharacterId == characterId);
if (character == null)
return NotFound();
return Ok(character);
}
[HttpPut("position")]
public async Task<IActionResult> UpdatePosition(UpdatePositionRequest request)
{
var character = await _db.Characters
.FirstOrDefaultAsync(x => x.CharacterId == request.CharacterId);
if (character == null)
return NotFound();
character.PosX = request.PosX;
character.PosY = request.PosY;
character.PosZ = request.PosZ;
await _db.SaveChangesAsync();
return Ok(new
{
Message = "Position sauvegardée."
});
}
}