public ActionResult SaveRecord(RecordLocatorPassenger record)
        {
            var recordId = 0;

            using (var uow = new UnitOfWork(new Models.PassengerNameListDbContext()))
            {
                var fileRecord = uow.UploadFileRepo.Get(record.FileId);

                var recordDb = new RecordLocator();
                recordDb.UploadFileId = record.FileId;
                recordDb.Code         = record.RecordLocator;
                uow.RecordLocatorRepo.Add(recordDb);
                uow.Complete();
                foreach (var item in record.Passengers)
                {
                    var passenger = new Passenger();
                    passenger.Name            = item;
                    passenger.RecordLocatorId = recordDb.Id;
                    uow.PassengerRepo.Add(passenger);

                    fileRecord.FileContent += Environment.NewLine + "1" + record.RecordLocator;
                }
                uow.Complete();
                recordId = recordDb.Id;
            }

            var jsonResult = new JsonResult();
            var addResult  = new AddRecordResult {
                RecordLocatorId = recordId
            };

            jsonResult.Data = addResult;
            jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
            return(jsonResult);
        }
        public async Task <IHttpActionResult> UploadNameList()
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            var provider = new MultipartMemoryStreamProvider();
            await Request.Content.ReadAsMultipartAsync(provider);

            var rawData = "";

            foreach (var file in provider.Contents)
            {
                var filename = file.Headers.ContentDisposition.FileName.Trim('\"');
                rawData = await file.ReadAsStringAsync();
            }
            var lines = rawData.Split(Environment.NewLine.ToCharArray());

            var tempRecords      = new RecordLocatorPassenger();
            var nameList         = new List <RecordLocatorPassenger>();
            var inputLineResults = new List <InputLineResult>();

            foreach (var line in lines)
            {
                var found      = _recordParser.ParseRecord(line, out string passengerName, out string recordLocator);
                var lineResult = new InputLineResult()
                {
                    LineContent = line, Processed = found
                };

                if (found)
                {
                    var passengers = new List <string> {
                        passengerName
                    };
                    var recordToUpdate = nameList.FirstOrDefault(x => x.RecordLocator == recordLocator);
                    if (recordToUpdate == null)
                    {
                        recordToUpdate = new RecordLocatorPassenger();
                        recordToUpdate.RecordLocator = recordLocator;
                        recordToUpdate.Passengers    = Enumerable.Empty <string>();
                        nameList.Add(recordToUpdate);
                    }

                    recordToUpdate.Passengers = recordToUpdate.Passengers.Concat(passengers);
                }
                inputLineResults.Add(lineResult);
            }
            ;
            var result = new PassengerNameListResponse()
            {
                Records = nameList, InputLineResults = inputLineResults
            };

            return(Ok(result));
        }
        private static List <RecordLocatorPassenger> ShowAllRecords(int fileId)
        {
            var resultRecords = new List <RecordLocatorPassenger>();

            using (var uow = new UnitOfWork(new Models.PassengerNameListDbContext()))
            {
                var records = uow.RecordLocatorRepo.Find(x => x.UploadFileId == fileId).ToList();
                if (records.Any())
                {
                    var recordIds  = records.Select(x => x.Id).ToList();
                    var passengers = uow.PassengerRepo.Find(x => recordIds.Contains(x.RecordLocatorId)).ToList();
                    foreach (var item in records)
                    {
                        var resultRecord = new RecordLocatorPassenger();
                        resultRecord.RecordLocator = item.Code;
                        resultRecord.Passengers    = passengers.Where(x => x.RecordLocatorId == item.Id).Select(x => x.Name);
                        resultRecords.Add(resultRecord);
                    }
                }
            }

            return(resultRecords);
        }