private bool ValidateFileUpload(FileUpload[] fileUploads) { var isInvalidFiles = false; foreach (var file in fileUploads) { var validate = CloudinaryUploadHelper.ValidateFileUpload(file); if (validate >= 0) { var errorsLibrary = CloudinaryUploadHelper.FileUploadErrorsDictionary; ModelState.AddModelError(errorsLibrary.Keys.ElementAt(validate), errorsLibrary[errorsLibrary.Keys.ElementAt(validate)]); isInvalidFiles = true; } } return(isInvalidFiles); }
public async Task <IHttpActionResult> UpdateByFaceScan([FromUri] int timeTableId) { var timeTable = await _unitOfWork.TimeTables.GetTimeTable(timeTableId); if (timeTable == null) { return(NotFound()); } var provider = await Request.Content.ReadAsMultipartAsync(); var fileUploads = new List <FileUpload>(); foreach (var content in provider.Contents) { if (content.Headers != null) { fileUploads.Add(new FileUpload { FileStream = await content.ReadAsStreamAsync(), FileName = content.Headers.ContentDisposition.FileName }); } } var isInvalidFile = ValidateFileUpload(fileUploads.ToArray()); if (isInvalidFile) { return(BadRequest(ModelState)); } var uploadResults = (await CloudinaryUploadHelper.UploadImagesToCloudinary(fileUploads)).ToArray(); foreach (var result in uploadResults) { var recognitionImage = new RecognitionImage { TimeTableId = timeTableId, Uri = result.Uri, SecureUri = result.SecureUri }; _unitOfWork.RecognitionImages.Add(recognitionImage); } await _unitOfWork.Completed(); var identifiedPersons = (await FaceAPI.RecognizeFaces(new RecognizeFacesBindingModel { PersonGroupId = FaceAPI.PersonGroupId, FacesUrl = uploadResults.Select(c => c.SecureUri) })).ToList(); var studentIds = (await _unitOfWork.Attendances.GetStudentIdListForTimeTable(timeTableId)).ToArray(); var statusAttendanceListInDb = (await _unitOfWork.StatusAttendances.GetStatusAttendanceList()).ToArray(); var attendedStatus = statusAttendanceListInDb.FirstOrDefault(c => c.Id == (int)StatusAttendanceType.Attended); var absentStatus = statusAttendanceListInDb.FirstOrDefault(c => c.Id == (int)StatusAttendanceType.Absent); var attendancesListWillBeUpdated = (await _unitOfWork.Attendances.GetAttendanceListForStudentsList(timeTableId, studentIds)).ToList(); if (identifiedPersons.Count == 0) { attendancesListWillBeUpdated.ForEach(a => { a.StatusAttendanceId = (int)StatusAttendanceType.Absent; a.StatusAttendance = absentStatus; }); } else { attendancesListWillBeUpdated.ForEach(a => { var identifiedPerson = identifiedPersons.FirstOrDefault (ad => ad.Name.Equals(a.StudentId, StringComparison.CurrentCultureIgnoreCase)); if (identifiedPerson != null) { a.StatusAttendanceId = (int)StatusAttendanceType.Attended; a.StatusAttendance = attendedStatus; } else { a.StatusAttendanceId = (int)StatusAttendanceType.Absent; a.StatusAttendance = absentStatus; } }); } var statusAttendancesList = await _unitOfWork.Attendances.UpdateAttendanceForStudentList(attendancesListWillBeUpdated); timeTable.StatusTakeAttendanceId = (int)StatusTakeAttendanceType.Taken; _unitOfWork.TimeTables.Update(timeTable); await _unitOfWork.Completed(); return(Ok(statusAttendancesList)); }