/**
 * Transactions Service
 *
 * Replaces: StartTransaction, Commit, Rollback from PublicDataImpl
 * Note: Prisma uses implicit transactions per request.
 * For explicit multi-step transactions, use $transaction()
 */
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';

@Injectable()
export class TransactionsService {
  constructor(private prisma: PrismaService) {}

  /**
   * Execute a function within a transaction
   */
  async runInTransaction<T>(fn: (prisma: PrismaService) => Promise<T>): Promise<T> {
    return this.prisma.$transaction(async (tx) => {
      return fn(tx as PrismaService);
    });
  }
}
