Verschillende functionaliteit:
All checks were successful
Docker Image CI / build-and-push (push) Successful in 11m28s
Docker Image CI / deploy (push) Successful in 30s
Docker Image CI / notify-failure (push) Has been skipped

-een gebruiker kan meerdere bedrijven hebben
 -manier van afspraken maken veranderd in de backend ivm meerdere bedrijven gebruiker
 -bedrijven van een gebruiker zijn op te roepen
 -gebruikers zijn aan een bestaand bedrijf te koppelen via een REST call
 -email is aangepast op bedrijf en gebruiker
This commit is contained in:
2025-04-15 20:39:48 +02:00
parent bb9b5a93f9
commit ebce9820d2
12 changed files with 172 additions and 39 deletions

View File

@@ -4,10 +4,12 @@ import io.quarkus.scheduler.Scheduled;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import nl.veenm.paypoint.domain.AppUser;
import nl.veenm.paypoint.domain.Appointment;
import nl.veenm.paypoint.domain.Company;
import nl.veenm.paypoint.repository.AppointmentRepository;
import nl.veenm.paypoint.repository.CompanyRepository;
import nl.veenm.paypoint.repository.UserRepository;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -18,6 +20,9 @@ public class AppointmentService {
@Inject
AppointmentRepository appointmentRepository;
@Inject
UserRepository userRepository;
@Inject
CompanyRepository companyRepository;
@@ -34,23 +39,25 @@ public class AppointmentService {
}
@Transactional
public Appointment add(Appointment appointment, Long companyId) {
public Appointment add(Appointment appointment, Long companyId, String username) {
Company company = companyRepository.findById(companyId);
AppUser user = userRepository.findByUsername(username);
appointment.setCompany(company);
appointmentRepository.persist(appointment);
emailService.stuurBevestiging(appointment);
emailService.stuurBevestiging(appointment, user);
return appointment;
}
@Transactional
public List<Appointment> getAppointmentsByDate(String start, Long companyId) {
public List<Appointment> getAppointmentsByDate(String start, String username) {
LocalDate date = LocalDate.parse(start);
Company company = companyRepository.findById(companyId);
AppUser user = userRepository.findByUsername(username);
LocalDateTime startOfDay = date.atStartOfDay();
LocalDateTime endOfDay = date.atTime(23, 59, 59);
return appointmentRepository.find("startDate BETWEEN ?1 AND ?2 AND company = ?3", startOfDay, endOfDay, company).list();
return appointmentRepository.findAppointmentsForCompanies(user.getCompanies(), startOfDay, endOfDay);
}
@Transactional
@@ -93,9 +100,7 @@ public class AppointmentService {
List<Appointment> allAppointments = appointmentRepository.find("date BETWEEN ?1 AND ?2", startOfDay, endOfDay).list();
allAppointments.forEach(appointment -> {
emailService.stuurHerinnering(appointment);
});
allAppointments.forEach(emailService::stuurHerinnering);
}
public Appointment getMostRecentByUserId(Long userId) {

View File

@@ -0,0 +1,40 @@
package nl.veenm.paypoint.service;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import nl.veenm.paypoint.domain.AppUser;
import nl.veenm.paypoint.domain.Company;
import nl.veenm.paypoint.repository.CompanyRepository;
import nl.veenm.paypoint.repository.UserRepository;
import java.util.Set;
@ApplicationScoped
public class CompanyService {
@Inject
CompanyRepository companyRepository;
@Inject
UserRepository userRepository;
public Set<Company> getCompanies(String username) {
AppUser user = this.userRepository.findByUsername(username);
return user.getCompanies();
}
@Transactional
public void linkCompany(Long userId, Long companyId) {
AppUser user = this.userRepository.findById(userId);
Company company = this.companyRepository.findById(companyId);
System.out.println(user.getCompanies());
user.getCompanies().add(company);
company.getUsers().add(user);
System.out.println(user.getCompanies());
userRepository.persist(user);
companyRepository.persist(company);
}
}

View File

@@ -3,6 +3,7 @@ package nl.veenm.paypoint.service;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import nl.veenm.paypoint.domain.Company;
import nl.veenm.paypoint.domain.Customer;
import nl.veenm.paypoint.repository.CustomerRepository;
@@ -32,4 +33,8 @@ public class CustomerService {
customerRepository.persist(customer);
return customer;
}
public List<Company> getCompanies() {
return null;
}
}

View File

@@ -3,6 +3,7 @@ package nl.veenm.paypoint.service;
import io.quarkus.mailer.Mail;
import io.quarkus.mailer.Mailer;
import jakarta.enterprise.context.ApplicationScoped;
import nl.veenm.paypoint.domain.AppUser;
import nl.veenm.paypoint.domain.Appointment;
import nl.veenm.paypoint.domain.Company;
import nl.veenm.paypoint.helper.EmailHelper;
@@ -20,7 +21,7 @@ public class EmailService {
this.mailer = mailer;
}
public void stuurBevestiging(Appointment appointment) {
public void stuurBevestiging(Appointment appointment, AppUser user) {
Company company = appointment.getCompany();
String location = String.format("<br>%s<br>%s %s", company.getAddress(), company.getPostal_code(), company.getCity());
String imageUrl = appointment.getCompany().getImg_href();
@@ -98,14 +99,14 @@ public class EmailService {
</div>
<div class="footer">
<img src="%s" alt="Afspraak bevestiging" class="image">
<h4>Met vriendelijke groet,<br>Danielle<br>Hairstyling By Daan</h4>
<h4>Met vriendelijke groet,<br>%s<br>%s</h4>
<p>&copy; 2025 PayPoint. Alle rechten voorbehouden.</p>
</div>
</div>
</body>
</html>
""".formatted(appointment.getCustomer().getFirstName(), formattedDate, formattedTime,
location, imageUrl);
location, imageUrl, user.getFirstName(), appointment.getCompany().getName());
String subject = String.format(" Afspraak bevestigd: %s", formattedDate);
String recipient = appointment.getCustomer().getEmail();
@@ -113,11 +114,12 @@ public class EmailService {
date = date.withHour(appointment.getStartHour()).withMinute(appointment.getStartMinute());
String dtStamp = date.format(DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'"));
String sender = appointment.getCompany().getName() + " <paypoint@melvanveen.nl>";
mailer.send(Mail.withHtml(recipient, subject, emailBody)
.setFrom("Hairstyling By Daan <paypoint@melvanveen.nl>")
.setFrom(sender)
.setReplyTo(company.getEmail())
.addAttachment("afspraak.ics", EmailHelper.getIcs(dtStamp, date.toLocalDate(), formattedTime, formattedEndTime, location).getBytes(), "text/calendar"));
.addAttachment("afspraak.ics", EmailHelper.getIcs(dtStamp, date.toLocalDate(), formattedTime, formattedEndTime, location, appointment).getBytes(), "text/calendar"));
}
public void stuurVerwijdering(Appointment appointment) {

View File

@@ -18,7 +18,6 @@ public class TokenService {
.claim("lastName", appUser.getLastName())
.claim("email", appUser.getEmail())
.claim("groups", appUser.getRole())
.claim("company_id", appUser.getCompany().getId())
.sign();
}
}