using Microsoft.EntityFrameworkCore; using ServerBase; namespace BrokerApiCore; public class PlanetItemExchangeOrderAmountTotalLimitRepo { private readonly MetaverseBrokerDbContext m_db_context; public PlanetItemExchangeOrderAmountTotalLimitRepo(MetaverseBrokerDbContext dbContext) { m_db_context = dbContext; } // 총 교환 제한 추가 public async Task add(PlanetItemExchangeOrderAmountTotalLimit limit, CancellationToken cancellationToken = default) { var result = new Result(); try { m_db_context.PlanetItemExchangeOrderAmountTotalLimits.Add(limit); await m_db_context.SaveChangesAsync(cancellationToken); } catch (Exception e) { result.setFail(ServerErrorCode.RdbError, e.Message); } return result; } // 총 교환 제한 업데이트 public async Task update(PlanetItemExchangeOrderAmountTotalLimit limit, CancellationToken cancellationToken = default) { var result = new Result(); try { m_db_context.PlanetItemExchangeOrderAmountTotalLimits.Update(limit); await m_db_context.SaveChangesAsync(cancellationToken); } catch (Exception e) { result.setFail(ServerErrorCode.RdbError, e.Message); } return result; } public async Task increaseDailyAmount( PlanetItemExchangeOrderAmountTotalLimit limit, int increaseAmount, CancellationToken cancellationToken = default) { var result = new Result(); try { limit.DailyAmount += increaseAmount; // DailyAmount만 업데이트하기 위해 특정 열만 업데이트 var entity = m_db_context.Entry(limit); entity.Property(x => x.DailyAmount).IsModified = true; await m_db_context.SaveChangesAsync(cancellationToken); } catch (Exception e) { result.setFail(ServerErrorCode.RdbError, e.Message); } return result; } // 총 교환 제한 삭제 public async Task delete(PlanetItemExchangeOrderAmountTotalLimit limit, CancellationToken cancellationToken = default) { var result = new Result(); try { m_db_context.PlanetItemExchangeOrderAmountTotalLimits.Remove(limit); await m_db_context.SaveChangesAsync(cancellationToken); } catch (Exception e) { result.setFail(ServerErrorCode.RdbError, e.Message); } return result; } // 특정 교환 메타 아이디와 날짜에 대한 교환 제한 조회 public async Task<(Result, PlanetItemExchangeOrderAmountTotalLimit?)> findByExchangeMetaAndDateOrCreate( string exchangeMetaId, DateOnly exchangeDate, string seasonId, CancellationToken cancellationToken = default) { var result = new Result(); try { var limit = await m_db_context.PlanetItemExchangeOrderAmountTotalLimits .Where(x => x.ExchangeMetaId == exchangeMetaId && x.ExchangeDate == exchangeDate && x.SeasonId == seasonId) .FirstOrDefaultAsync(cancellationToken); if (limit == null) { limit = new PlanetItemExchangeOrderAmountTotalLimit { ExchangeMetaId = exchangeMetaId, ExchangeDate = exchangeDate, SeasonId = seasonId, DailyAmount = 0 }; await add(limit, cancellationToken); } return (result, limit); } catch (Exception e) { result.setFail(ServerErrorCode.RdbError, e.Message); return (result, null); } } public async Task<(Result, PlanetItemExchangeOrderAmountTotalLimit?)> findByExchangeMetaAndDate( string exchangeMetaId, DateOnly exchangeDate, string seasonId, CancellationToken cancellationToken = default) { var result = new Result(); try { var limit = await m_db_context.PlanetItemExchangeOrderAmountTotalLimits .Where(x => x.ExchangeMetaId == exchangeMetaId && x.ExchangeDate == exchangeDate && x.SeasonId == seasonId) .FirstOrDefaultAsync(cancellationToken); return (result, limit); } catch (Exception e) { result.setFail(ServerErrorCode.RdbError, e.Message); return (result, null); } } // // 특정 교환 메타 아이디에 대한 모든 교환 제한 조회 // public async Task<(Result, IEnumerable?)> findByExchangeMeta( // string exchangeMetaId, // int pageIndex = 1, // int pageSize = 20, // CancellationToken cancellationToken = default) // { // var result = new Result(); // try // { // var limits = await m_db_context.PlanetItemExchangeOrderAmountTotalLimits // .Where(x => x.ExchangeMetaId == exchangeMetaId) // .OrderBy(x => x.ExchangeDate) // .Skip((pageIndex - 1) * pageSize) // .Take(pageSize) // .ToArrayAsync(cancellationToken); // // return (result, limits); // } // catch (Exception e) // { // result.setFail(ServerErrorCode.RdbError, e.Message); // return (result, null); // } // } // // // 특정 날짜에 대한 모든 교환 제한 조회 // public async Task<(Result, IEnumerable?)> findByDate( // DateOnly exchangeDate, // int pageIndex = 1, // int pageSize = 20, // CancellationToken cancellationToken = default) // { // var result = new Result(); // try // { // var limits = await m_db_context.PlanetItemExchangeOrderAmountTotalLimits // .Where(x => x.ExchangeDate == exchangeDate) // .OrderBy(x => x.ExchangeMetaId) // .Skip((pageIndex - 1) * pageSize) // .Take(pageSize) // .ToArrayAsync(cancellationToken); // // return (result, limits); // } // catch (Exception e) // { // result.setFail(ServerErrorCode.RdbError, e.Message); // return (result, null); // } // } }