/* * Copyright (c) 2023 Vaughn Nugent * * Library: VNLib * Package: Emails.Transactional * File: TransactionStore.cs * * TransactionStore.cs is part of Emails.Transactional which is part of the larger * VNLib collection of libraries and utilities. * * Emails.Transactional is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 2 of the License, * or (at your option) any later version. * * Emails.Transactional is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Emails.Transactional. If not, see http://www.gnu.org/licenses/. */ using System; using System.Linq; using Microsoft.EntityFrameworkCore; using VNLib.Plugins.Extensions.Data; using VNLib.Plugins.Extensions.Data.Abstractions; using VNLib.Plugins.Extensions.Loading; namespace Emails.Transactional.Transactions { internal class TransactionStore : DbStore { private readonly IAsyncLazy Options; public TransactionStore(IAsyncLazy options) { Options = options; } /// public override IDbContextHandle GetNewContext() => new EmailDbCtx(Options.Value); /// public override string GetNewRecordId() => Guid.NewGuid().ToString("N"); /// public override void OnRecordUpdate(EmailTransaction newRecord, EmailTransaction oldRecord) { oldRecord.LastModified = DateTime.UtcNow; } public override IDbQueryLookup QueryTable { get; } = new DbQueries(); private sealed record class DbQueries : IDbQueryLookup { public IQueryable GetCollectionQueryBuilder(IDbContextHandle context, params string[] constraints) { string userId = constraints[0]; //Get the last transactions for the specifed user EmailDbCtx ctx = (context as EmailDbCtx)!; return from trans in ctx.EmailTransactions where trans.UserId == userId orderby trans.LastModified descending select trans; } public IQueryable GetSingleQueryBuilder(IDbContextHandle context, params string[] constraints) { string transactionid = constraints[0]; EmailDbCtx ctx = (context as EmailDbCtx)!; //Selet the exact transaction from its id return from trans in ctx.EmailTransactions where trans.Id == transactionid select trans; } } } }