Table of Contents

Class CharacterAbilityService

Namespace
FishMMO.Database.Npgsql.Services
Assembly
FishMMO-DB.dll

Service for managing character abilities in the database. Provides async operations for CRUD operations on character ability data. Uses the BaseService execution strategy for automatic retry on transient database failures. Returns DatabaseResult for consistent, safe error handling.

public sealed class CharacterAbilityService : BaseService<CharacterAbilityEntity>, ICharacterAbilityService, ICountByKeyAction<long>, IPersistAction<CharacterAbilityData, long>, IPersistManyAction<CharacterAbilityData>, IDeleteByKeyVersionedAction<long>, IFetchCollectionByKeyAction<long, CharacterAbilityData>
Inheritance
CharacterAbilityService
Implements
Inherited Members

Constructors

CharacterAbilityService(INpgsqlDbContextFactory)

Initializes a new instance of the CharacterAbilityService class.

public CharacterAbilityService(INpgsqlDbContextFactory dbContextFactory)

Parameters

dbContextFactory INpgsqlDbContextFactory

Factory for creating database contexts.

Exceptions

ArgumentNullException

Thrown when dbContextFactory is null.

Methods

CountAsync(long, CancellationToken)

Counts items for the given key.

public Task<DatabaseResult<int>> CountAsync(long characterId, CancellationToken cancellationToken = default)

Parameters

characterId long
cancellationToken CancellationToken

Token to cancel the operation.

Returns

Task<DatabaseResult<int>>

DeleteAsync(long, long, long, CancellationToken)

Deletes a single ability record for a character if incomingVersion is newer.

public Task<DatabaseResult> DeleteAsync(long characterId, long abilityId, long incomingVersion, CancellationToken cancellationToken = default)

Parameters

characterId long

The character ID that owns the ability.

abilityId long

The ability identifier.

incomingVersion long

The authoritative, monotonic version for this delete operation.

cancellationToken CancellationToken

Token to cancel the operation.

Returns

Task<DatabaseResult>

A DatabaseResult indicating success or failure.

DeleteAsync(long, long, CancellationToken)

Deletes the entity identified by the given key if incomingVersion is newer.

public Task<DatabaseResult> DeleteAsync(long characterId, long incomingVersion, CancellationToken cancellationToken = default)

Parameters

characterId long
incomingVersion long

The authoritative, monotonic version for this delete operation.

cancellationToken CancellationToken

Token to cancel the operation.

Returns

Task<DatabaseResult>

FetchAsync(long, CancellationToken)

Fetches a collection of items for the given key.

public Task<DatabaseResult<IReadOnlyList<CharacterAbilityData>>> FetchAsync(long characterId, CancellationToken cancellationToken = default)

Parameters

characterId long
cancellationToken CancellationToken

Token to cancel the operation.

Returns

Task<DatabaseResult<IReadOnlyList<CharacterAbilityData>>>

PersistAsync(CharacterAbilityData, CancellationToken)

Persists the provided data.

public Task<DatabaseResult<long>> PersistAsync(CharacterAbilityData abilityData, CancellationToken cancellationToken = default)

Parameters

abilityData CharacterAbilityData
cancellationToken CancellationToken

Token to cancel the operation.

Returns

Task<DatabaseResult<long>>

PersistAsync(IEnumerable<CharacterAbilityData>, CancellationToken)

Persists the provided items.

public Task<DatabaseResult<BulkWriteResult>> PersistAsync(IEnumerable<CharacterAbilityData> abilities, CancellationToken cancellationToken = default)

Parameters

abilities IEnumerable<CharacterAbilityData>
cancellationToken CancellationToken

Token to cancel the operation.

Returns

Task<DatabaseResult<BulkWriteResult>>

What the write actually did, or a failure.

Remarks

A successful result does not mean every supplied row was written. Batched writes are version-gated and the service filters what it cannot act on, so the outcome carries counts rather than a bare boolean — see BulkWriteResult, which explains which discrepancies a caller should care about and which are routine.