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));
        }
Beispiel #2
0
        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));
        }