public async Task <GeneralResponse> CreateCompany(NewCompany newCompany) { var response = new GeneralResponse(); var user = new User() { FirstName = newCompany.CompanyName, Email = newCompany.Email, UserName = newCompany.Email.ToLower() }; var existingUser = await _userManager.FindByEmailAsync(newCompany.Email); if (existingUser != null) { return(response.ErrorHandling <ClientManager>("Email already in use", objects: newCompany.Email)); } var result = await _userManager.CreateAsync(user, "ClientDefaultPassword"); if (!result.Succeeded) { return(response.ErrorHandling(ErrorConstants.FailedToUpdateDatabase, _logger, user)); } var company = new Client() { User = user, }; company = _mapper.Map(newCompany, company); Create(company, RoleConstants.ADMIN); response.Succeeded = true; return(response); }
public async Task <GeneralResponse> UpdateApplicantProfile(int id, ApplicantUpdate applicantUpdate) { var response = new GeneralResponse(); var user = await _userManager.FindByIdAsync(id.ToString()); var applicant = GetById <Applicant>(id); applicant = _mapper.Map(applicantUpdate, applicant); bool educationParse = Enum.TryParse(applicantUpdate.EducationType, out EducationType educationType); if (!educationParse) { return(response.ErrorHandling(ErrorConstants.InvalidInput, _logger, applicantUpdate.EducationType)); } applicant.EducationType = educationType; applicant.User.ModifiedBy = applicant.User.FirstName; applicant.User.ModifiedDate = DateTime.UtcNow; var existingUser = await _userManager.FindByEmailAsync(applicant.User.Email); //Allow the current user to use their existing email if (existingUser != null && user != existingUser) { return(response.ErrorHandling <ApplicantManager>("Email is already in use", objects: existingUser.Email)); } Update(applicant, applicant.User.FirstName); await _userManager.UpdateAsync(user); response.Succeeded = true; return(response); }
public async Task <GeneralResponse> CreateJobPosting(JobSubmit jobSubmit, int currentUserId) { var userRole = await _userManager.GetRolesAsync(await _userManager.FindByIdAsync(currentUserId.ToString())); var response = new GeneralResponse(); if (jobSubmit.Id != currentUserId && !userRole.Contains(RoleConstants.ADMIN)) { return(response.ErrorHandling(ErrorConstants.UnauthorizedAccess, _logger, jobSubmit.Id, currentUserId)); } var company = new Client(); company = GetById <Client>(jobSubmit.Id); var jobPost = new JobPosting() { Client = company, }; jobPost = _mapper.Map(jobSubmit, jobPost); bool dateFromParse = DateTime.TryParse(jobSubmit.DateFrom, out DateTime dateFrom); bool dateToParse = DateTime.TryParse(jobSubmit.DateTo, out DateTime dateTo); bool educationParse = Enum.TryParse(jobSubmit.Education, out EducationType education); bool empCategoryParse = Enum.TryParse(jobSubmit.EmpCategory, out JobType empCategory); if (!dateFromParse || !dateToParse || !educationParse || !empCategoryParse || dateFrom > dateTo) { return(response.ErrorHandling(ErrorConstants.InvalidInput, _logger, dateFrom, dateTo, education, empCategory)); } jobPost.DateFrom = dateFrom; jobPost.DateTo = dateTo; jobPost.EmpCategory = empCategory; jobPost.Education = education; if (userRole.Contains(RoleConstants.CLIENT)) { jobPost.Status = JobPostingStatus.Pending; Create(jobPost, company.User.FirstName); } else { jobPost.Status = JobPostingStatus.Approved; Create(jobPost, RoleConstants.ADMIN); } response.Succeeded = true; return(response); }
public GeneralResponse UploadCSV(FileUpload fileUpload) { var response = new GeneralResponse(); var result = HelperMethods.ValidateCSV(fileUpload.FormFile); if (!result.Response.Errors["Error"].Any()) { var company = GetById <Client>(fileUpload.Id); if (company == null) { response.ErrorHandling(ErrorConstants.InvalidInput, _logger, company); return(response); } foreach (var job in result.Jobs) { var jobPost = new JobPosting(); jobPost = _mapper.Map(job, jobPost); jobPost.Client = company; Create(jobPost, RoleConstants.ADMIN); } response.Succeeded = true; } response.Errors = result.Response.Errors; return(response); }
public async Task <GeneralResponse> CreateApplication(Apply apply) { var response = new GeneralResponse(); var jobPost = GetOne <JobPosting>(filter: x => x.Id == apply.JobId, includeProperties: $"{nameof(JobPosting.Client)},{nameof(JobPosting.Applications)}"); var applicant = GetOne <Applicant>(filter: x => x.Id == apply.ApplicantId, includeProperties: $"{nameof(User)},{nameof(Applicant.Applications)}"); bool applied = jobPost.Applications.Any(x => x.ApplicantId == apply.ApplicantId); if (jobPost == null || jobPost.Client.Status == ClientStatus.Inactive || jobPost.Status != JobPostingStatus.Approved || applied) { return(response.ErrorHandling <ApplicationManager>(ErrorConstants.InvalidInput)); } else { var application = new Application() { Applicant = applicant, Date = DateTime.UtcNow, JobPosting = jobPost, Status = ApplicationStatus.Pending }; Create(application, applicant.User.FirstName); response.Succeeded = true; await _emailSender.SendEmail(applicant, jobPost); return(response); } }
public async Task <GeneralResponse> SendEmail(User user) { var roles = await _userManager.GetRolesAsync(user); var role = roles.Contains(RoleConstants.APPLICANT) ? "Applicant" : "Client"; var totalUsersInRole = await _userManager.GetUsersInRoleAsync(role); using (var client = new AmazonSimpleEmailServiceClient(new EnvironmentVariablesAWSCredentials(), RegionEndpoint.USWest2)) { var sendRequest = new SendEmailRequest { Source = ConstantStrings.EMAIL_SENDER, Destination = new Destination { ToAddresses = new List <string> { ConstantStrings.EMAIL_RECIEVER } }, Message = new Message { Subject = new Content("New user registration"), Body = new Body { Html = new Content { Charset = "UTF-8", Data = await _emailTemplate.NewUserTemplate(user) }, Text = new Content { Charset = "UTF-8", Data = $"New {role} has just registered!" + $"Dear Admin," + $"This email was sent to you to notify when a user is registered on your website." + $"The new {role} with email {user.Email} became the {totalUsersInRole.Count + " "}{role} on your application!" } } }, }; var emailResponse = new SendEmailResponse(); var generalResponse = new GeneralResponse(); try { emailResponse = await client.SendEmailAsync(sendRequest); generalResponse.Succeeded = true; return(generalResponse); } catch (Exception e) { return(generalResponse.ErrorHandling <EmailSenderManager>(emailResponse.MessageId, objects: (sendRequest, e))); } } }
public GeneralResponse UpdateJob(JobUpdate jobUpdate) { var response = new GeneralResponse(); var jobPost = GetOne <JobPosting>(filter: x => x.Id == jobUpdate.Id, includeProperties: $"{nameof(Client)}.{nameof(Client.User)},{nameof(JobPosting.Applications)}"); if (jobPost == null) { return(response.ErrorHandling <JobManager>(ErrorConstants.NullValue, objects: jobPost)); } if (!string.IsNullOrEmpty(jobUpdate.Status)) { bool statusParse = Enum.TryParse(jobUpdate.Status, out JobPostingStatus statusToUpdate); if (!statusParse) { return(response.ErrorHandling(ErrorConstants.InvalidInput, _logger, jobUpdate.Status)); } jobPost.Status = statusToUpdate; } else { jobPost = _mapper.Map(jobUpdate, jobPost); bool jobTypeParse = Enum.TryParse(jobUpdate.JobType, out JobType currentJobType); bool educationParse = Enum.TryParse(jobUpdate.Education, out EducationType currentEducation); bool dateFromParse = DateTime.TryParse(jobUpdate.DateFrom, out DateTime dateFrom); bool dateToParse = DateTime.TryParse(jobUpdate.DateTo, out DateTime dateTo); if (!jobTypeParse || !educationParse || !dateToParse || !dateToParse || dateFrom > dateTo) { return(response.ErrorHandling(ErrorConstants.InvalidInput, _logger, dateFrom, dateTo, currentEducation, currentJobType)); } jobPost.DateTo = dateTo; jobPost.DateFrom = dateFrom; jobPost.EmpCategory = currentJobType; jobPost.Education = currentEducation; } Update(jobPost, RoleConstants.ADMIN); response.Succeeded = true; return(response); }
public async Task <GeneralResponse> SendEmail(Applicant applicant, JobPosting jobPosting) { var numOfApplication = applicant.Applications.Count; using (var client = new AmazonSimpleEmailServiceClient(new EnvironmentVariablesAWSCredentials(), RegionEndpoint.USWest2)) { var sendRequest = new SendEmailRequest { Source = ConstantStrings.EMAIL_SENDER, Destination = new Destination { ToAddresses = new List <string> { applicant.User.Email } }, Message = new Message { Subject = new Content("New job post application"), Body = new Body { Html = new Content { Charset = "UTF-8", Data = _emailTemplate.NewApplicantAppliedTemplate(applicant, jobPosting) }, Text = new Content { Charset = "UTF-8", Data = $"Congratulations on your {numOfApplication}{(numOfApplication == 1 ? "st" : numOfApplication == 2 ? "nd" : numOfApplication == 3 ? "rd" : "th")} application, {applicant.User.FirstName}!" + "You have just applied for the following Job:" + $"Position: {jobPosting.Title}" + "You can see all your job applications on http://dev-docker:9014/applicant/my-applications" + "Sincerely, HRHunters" } } }, }; var generalResponse = new GeneralResponse(); var emailResponse = new SendEmailResponse(); try { emailResponse = await client.SendEmailAsync(sendRequest); generalResponse.Succeeded = true; return(generalResponse); } catch (Exception e) { return(generalResponse.ErrorHandling <EmailSenderManager>(emailResponse.MessageId, objects: (sendRequest, e))); } } }
public async Task <GeneralResponse> UpdateCompanyLogo(FileUpload fileUpload) { var response = new GeneralResponse(); var result = await _s3Manager.UploadProfileImage(EnvironmentVariables.BUCKET_NAME, fileUpload); if (!result.Succeeded) { return(response.ErrorHandling(ErrorConstants.FailedToUpdateDatabase, _logger, fileUpload)); } var client = GetOne <Client>(x => x.Id == fileUpload.Id, includeProperties: $"{nameof(User)}"); client.Logo = result.Guid; Update(client, client.User.FirstName); response.Succeeded = true; return(response); }
public GeneralResponse UpdateApplicationStatus(int id, ApplicationStatusUpdate statusUpdate) { var response = new GeneralResponse(); var application = GetOne <Application>(filter: x => x.Id == id, includeProperties: $"{nameof(Applicant)}.{nameof(Applicant.User)}," + $"{nameof(JobPosting)}"); bool success = Enum.TryParse(statusUpdate.Status, out ApplicationStatus statusToUpdate); if (!success) { return(response.ErrorHandling(ErrorConstants.InvalidInput, _logger, statusUpdate.Status)); } application.Status = statusToUpdate; Update(application, RoleConstants.ADMIN); response.Succeeded = true; return(response); }
public async Task <GeneralResponse> UpdateClientProfile(int id, ClientUpdate clientUpdate) { var response = new GeneralResponse(); var user = await _userManager.FindByIdAsync(id.ToString()); var client = GetById <Client>(id); client = _mapper.Map(clientUpdate, client); client.User.ModifiedDate = DateTime.UtcNow; client.User.ModifiedBy = client.User.FirstName; var existingUser = await _userManager.FindByEmailAsync(client.User.Email); if (existingUser != null && user != existingUser) { response.Succeeded = false; return(response.ErrorHandling <ClientManager>("Email is already in use", objects: (existingUser, clientUpdate))); } Update(client, client.User.FirstName); await _userManager.UpdateAsync(user); response.Succeeded = true; return(response); }