CreateCharacterAsync([FromBody] RPGCharacterCreationRequest <TRaceType, TClassType> request, CancellationToken token = default) { //TODO: Fix GetAccountId API int accountId = ClaimsReader.GetAccountId <int>(User); if (!ModelState.IsValid) { return(Failure <RPGCharacterCreationResult, CharacterCreationResponseCode>(CharacterCreationResponseCode.GeneralError)); } //TODO: Add validation pipeline. if (String.IsNullOrWhiteSpace(request.Name)) { return(Failure <RPGCharacterCreationResult, CharacterCreationResponseCode>(CharacterCreationResponseCode.InvalidName)); } try { DBRPGCharacter character = await CharacterRepository.CreateCharacterAsync(accountId, request.Name, request.Race, request.ClassType, token); return(Success <RPGCharacterCreationResult, CharacterCreationResponseCode>(new RPGCharacterCreationResult(character.Id))); } catch (Exception e) { if (Logger.IsEnabled(LogLevel.Error)) { Logger.LogError($"Failed to create Character: {request} Reason: {e}"); } return(Failure <RPGCharacterCreationResult, CharacterCreationResponseCode>(CharacterCreationResponseCode.GeneralError)); } }
public FullCharacterData(DBRPGCharacter character, DBRPGCharacterDefinition <TRaceType, TClassType> definition) { Character = character ?? throw new ArgumentNullException(nameof(character)); Definition = definition ?? throw new ArgumentNullException(nameof(definition)); }