Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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)));
                }
            }
        }
Пример #7
0
        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);
        }
Пример #8
0
        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)));
                }
            }
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }