public async Task <JournalVoucherCreateResponse> AddVoucher(JournalVoucherCreateRequest request) { JournalVoucherCreateResponse response; // TODO: validation logic (라인 체크 및 기타 등등) - 일단 수동으로 체크 if (request == null || request.Entries == null || request.Entries.Count() < 1) { response = new JournalVoucherCreateResponse { Error = new ResponseError { Message = "Bad request" } }; return(await Task.FromResult(response)); } // NOTE: 이벤트 스트림 생성 var eventStreamRequest = new EventStreamCreateRequest() { StreamId = Guid.NewGuid() }; var eventStreamResponse = await this._service.CreateEventStreamAsync(eventStreamRequest); if (eventStreamResponse.Error != null) { response = new JournalVoucherCreateResponse() { Error = eventStreamResponse.Error }; } request.StreamId = eventStreamResponse.Data.StreamId; response = await this._service.CreateJournalVoucherAsync(request); // memo 에 테스트를 위해 streamId 를 넣었음 // 해당 streamId를 조회 var result = await _repository.GetJournalVouchersListBy(request.StreamId); response.Data.VoucherListNumber = result.BatchNum; return(await Task.FromResult(response)); }
public async Task <JournalVoucherCreateResponse> CreateJournalVoucherAsync(JournalVoucherCreateRequest request) { await this._builder.BuildAsync(request); var handler = this._handlers.SingleOrDefault(p => p.CanHandle(request)); if (handler == null) { return(await Task.FromResult(default(JournalVoucherCreateResponse))); } var ev = handler.CreateEvent(request) as JournalVoucherCreatedEvent; PopulateBaseProperties(ev); JournalVoucherCreateResponse response; try { await this._processor.ProcessEventsAsync(new[] { ev }); response = new JournalVoucherCreateResponse() { Data = new JournalVoucherCreateResponseData() { Entries = ev.Entries, VoucherListNumber = ev.VoucherListNumber } }; } catch (Exception ex) { response = new JournalVoucherCreateResponse() { Error = new ResponseError() { Message = ex.Message, StackTrace = ex.StackTrace } }; } return(await Task.FromResult(response)); }