package com.mavlushechka.barbershop.controller; import com.mavlushechka.barbershop.domain.*; import com.mavlushechka.barbershop.repository.*; import org.bson.BsonBinarySubType; import org.bson.types.Binary; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.*; @Controller public class AdminPanelController { @Autowired private AppointmentRepository appointmentRepository; @Autowired private VisitorRepository visitorRepository; @Autowired private LevelRepository levelRepository; @Autowired private BarberRepository barberRepository; @Autowired private SlideRepository slideRepository; @Autowired private TestimonialRepository testimonialRepository; @GetMapping("/admin-panel") public String adminPanel(Map model) { HashSet emails = new HashSet<>(); List appointments = appointmentRepository.findAll(); model.put("views", visitorRepository.count()); model.put("appointments", appointments.size()); appointments.iterator().forEachRemaining(appointment -> emails.add(appointment.getEmail())); model.put("clients", emails.size()); return "/admin-panel/index"; } @GetMapping("/admin-panel/tables/appointments") public String adminPanelTablesAppointments(Map model) { model.put("appointments", appointmentRepository.findAll()); return "/admin-panel/pages/tables/appointments"; } @GetMapping("/admin-panel/tables/visitors") public String adminPanelTablesVisitors(Map model) { model.put("visitors", visitorRepository.findAll()); return "/admin-panel/pages/tables/visitors"; } @GetMapping("/admin-panel/tables/barbers") public String adminPanelTablesBarbers(Map model) { List barbers = barberRepository.findAll(); for (Barber barber : barbers) { barber.setEncodedPhoto(Base64.getEncoder().encodeToString(barber.getPhoto().getData())); } model.put("barbers", barbers); return "/admin-panel/pages/tables/barbers"; } @GetMapping("/admin-panel/tables/slides") public String adminPanelTablesSlides(Map model) { List slides = slideRepository.findAll(); for (Slide slide : slides) { slide.setEncodedPhoto(Base64.getEncoder().encodeToString(slide.getPhoto().getData())); } model.put("slides", slides); return "/admin-panel/pages/tables/slides"; } @GetMapping("/admin-panel/tables/testimonials") public String adminPanelTablesTestimonial(Map model) { List testimonials = testimonialRepository.findAll(); for (Testimonial testimonial : testimonials) { testimonial.setEncodedPhoto(Base64.getEncoder().encodeToString(testimonial.getPhoto().getData())); } model.put("testimonials", testimonials); return "/admin-panel/pages/tables/testimonials"; } @GetMapping("/admin-panel/pages/forms/add-barber") public String adminPanelPagesFormsAddBarber(Map model) { model.put("levels", levelRepository.findAll()); return "/admin-panel/pages/forms/add-barber"; } @PostMapping("/save/barber") public String saveBarber(String firstName, String level, MultipartFile photo) throws IOException { barberRepository.save(new Barber(firstName, levelRepository.findByName(level), new Binary(BsonBinarySubType.BINARY, photo.getBytes()))); return "redirect:/admin-panel/tables/barbers"; } @PostMapping("/save/slide") public String saveSlide(String title, String description, MultipartFile photo) throws IOException { slideRepository.save(new Slide(title, description, new Binary(BsonBinarySubType.BINARY, photo.getBytes()))); return "redirect:/admin-panel/tables/slides"; } @PostMapping("/save/testimonial") public String saveTestimonial(String name, String comment, MultipartFile photo) throws IOException { testimonialRepository.save(new Testimonial(name, comment, new Binary(BsonBinarySubType.BINARY, photo.getBytes()))); return "redirect:/admin-panel/tables/testimonials"; } }