package com.kpaudel.service;
import com.kpaudel.model.ApplicationStatus;
import com.kpaudel.model.Company;
import com.kpaudel.model.JobApplication;
import com.kpaudel.model.User;
import com.kpaudel.repository.CompanyRepository;
import com.kpaudel.repository.JobApplicationRepository;
import com.kpaudel.repository.UserRepository;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.UUID;
@Service
public class JobService {
private final JobApplicationRepository jobRepo;
private final CompanyRepository companyRepo;
private final UserRepository userRepo;
public JobService(JobApplicationRepository jobRepo, CompanyRepository companyRepo, UserRepository userRepo) {
this.jobRepo = jobRepo;
this.companyRepo = companyRepo;
this.userRepo = userRepo;
}
public JobApplication create(JobApplication data, UUID userId) {
User user = this.userRepo.findById(userId).orElseThrow(() -> new IllegalArgumentException("User not found!"));
data.setUser(user);
Company company = this.companyRepo.findById(data.getCompany().getId()).orElseThrow(() -> new IllegalArgumentException("Company not found!"));
data.setCompany(company);
return jobRepo.save(data);
}
public JobApplication updateStatus(UUID id, ApplicationStatus status, UUID userId) {
JobApplication job = this.jobRepo.findById(id).orElseThrow(() -> new IllegalArgumentException("Job not found"));
if (!job.getUser().getId().equals(userId)) {
throw new AccessDeniedException("You can only update your own jobs");
}
job.setStatus(status);
return this.jobRepo.save(job);
}
public List<JobApplication> listAllByUser(UUID userId) {
return this.jobRepo.findByUserId(userId);
}
public List<JobApplication> listByUserAndStatus(UUID userId, ApplicationStatus status) {
return this.jobRepo.findByUserIdAndStatus(userId, status);
}
public List<JobApplication> listByCompanyAndUser(UUID companyId, UUID userId) {
return this.jobRepo.findByUserIdAndCompanyId(userId, companyId);
}
}