// // DatabaseInfoService.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using Microsoft.EntityFrameworkCore; using NosSmooth.Data.Abstractions; using NosSmooth.Data.Abstractions.Infos; using Remora.Results; namespace NosSmooth.Data.Database; /// public class DatabaseInfoService : IInfoService { private readonly IDbContextFactory _dbContextFactory; /// /// Initializes a new instance of the class. /// /// The database context factory. public DatabaseInfoService(IDbContextFactory dbContextFactory) { _dbContextFactory = dbContextFactory; } /// public async Task> GetItemInfoAsync(int vnum, CancellationToken ct = default) { await using var context = await _dbContextFactory.CreateDbContextAsync(ct); var item = await context.Items.AsNoTracking().FirstOrDefaultAsync(x => x.VNum == vnum, ct); if (item is null) { return new NotFoundError($"Couldn't find item {vnum}"); } return item; } /// public async Task> GetMapInfoAsync(int id, CancellationToken ct = default) { await using var context = await _dbContextFactory.CreateDbContextAsync(ct); var item = await context.Maps.AsNoTracking().FirstOrDefaultAsync(x => x.Id == id, ct); if (item is null) { return new NotFoundError($"Couldn't find map {id}"); } return item; } /// public async Task> GetMonsterInfoAsync(int vnum, CancellationToken ct = default) { await using var context = await _dbContextFactory.CreateDbContextAsync(ct); var item = await context.Monsters.AsNoTracking().FirstOrDefaultAsync(x => x.VNum == vnum, ct); if (item is null) { return new NotFoundError($"Couldn't find monster {vnum}"); } return item; } /// public async Task> GetSkillInfoAsync(int vnum, CancellationToken ct = default) { await using var context = await _dbContextFactory.CreateDbContextAsync(ct); var item = await context.Skills.AsNoTracking().FirstOrDefaultAsync(x => x.VNum == vnum, ct); if (item is null) { return new NotFoundError($"Couldn't find skill {vnum}"); } return item; } }