Skip to content

Instantly share code, notes, and snippets.

@JuliaKrivonos
Created August 20, 2021 11:58
Show Gist options
  • Select an option

  • Save JuliaKrivonos/601176ba7e60e98d5b230696117eba10 to your computer and use it in GitHub Desktop.

Select an option

Save JuliaKrivonos/601176ba7e60e98d5b230696117eba10 to your computer and use it in GitHub Desktop.
OfficeService impl
package org.jazzteam.fitnesclub.service.impl;
import com.google.common.collect.Lists;
import lombok.Builder;
import org.jazzteam.fitnesclub.dto.OfficeDto;
import org.jazzteam.fitnesclub.dto.RoomDto;
import org.jazzteam.fitnesclub.model.Office;
import org.jazzteam.fitnesclub.model.Room;
import org.jazzteam.fitnesclub.repository.OfficeRepository;
import org.jazzteam.fitnesclub.repository.RoomRepository;
import org.jazzteam.fitnesclub.repository.addictional.FitnessCategoryRepository;
import org.jazzteam.fitnesclub.repository.addictional.InventoryRepository;
import org.jazzteam.fitnesclub.repository.addictional.impl.FitnessCategoryRepositoryImpl;
import org.jazzteam.fitnesclub.repository.addictional.impl.InventoryRepositoryImpl;
import org.jazzteam.fitnesclub.repository.impl.OfficeRepositoryImpl;
import org.jazzteam.fitnesclub.repository.impl.RoomRepositoryImpl;
import org.jazzteam.fitnesclub.service.OfficeService;
import org.jazzteam.fitnesclub.validators.RoomValidator;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@Builder
public class OfficeServiceImpl implements OfficeService {
private final OfficeRepository officeRepository = new OfficeRepositoryImpl();
private final RoomValidator roomValidator;
private final RoomRepository roomRepository = new RoomRepositoryImpl();
private final FitnessCategoryRepository fitnessCategoryRepository = new FitnessCategoryRepositoryImpl();
private final InventoryRepository inventoryRepository = new InventoryRepositoryImpl();
@Override
public Office addOffice(OfficeDto officeDto) {
Office office = new Office();
office.setAddress(officeDto.getAddress());
return officeRepository.save(office);
}
@Override
public Office updateOffice(OfficeDto officeDto) {
Office office = officeRepository.findById(officeDto.getId());
office.setAddress(officeDto.getAddress());
return officeRepository.save(office);
}
@Override
public void deleteOffice(OfficeDto officeDto) {
Office officeToDelete = officeRepository.findById(officeDto.getId());
officeRepository.delete(officeToDelete);
}
@Override
public Room addRoom(RoomDto roomDto, Long officeId) {
Room room = new Room();
addFitnessCategoriesToRoom(roomDto, room);
// TODO: 20.08.2021 validate that inventories in db enough to add in room
addInventoryToRoom(roomDto, room);
Office officeFromDb = officeRepository.findById(officeId);
room.setOffice(officeFromDb);
return roomRepository.save(room);
}
private void addFitnessCategoriesToRoom(RoomDto roomDto, Room room) {
room.getFitnessCategories().addAll(
roomDto.getFitnessCategories().stream()
.map(fitnessDto -> fitnessCategoryRepository.findById(fitnessDto.getId()))
.collect(Collectors.toList()));
}
private void addInventoryToRoom(RoomDto roomDto, Room room) {
room.getInventories().addAll(roomDto.getInventories().stream()
.map(inventoryDto -> inventoryRepository.findById(inventoryDto.getId()))
.collect(Collectors.toList()));
}
@Override
public Room updateRoom(RoomDto roomDto) {
Room room = roomRepository.findById(roomDto.getId());
addFitnessCategoriesToRoom(roomDto, room);
// TODO: 20.08.2021 validate that inventories in db enough to add in room
addInventoryToRoom(roomDto, room);
return roomRepository.save(room);
}
@Override
public void deleteRoom(RoomDto roomDto) {
Room roomToDelete = roomRepository.findById(roomDto.getId());
roomRepository.delete(roomToDelete);
}
public List<Office> findAllOffices(Predicate<Office> predicate) {
return Lists.newArrayList(officeRepository.findAll(predicate));
}
public List<Room> findAllRooms(Predicate<Room> predicate) {
return Lists.newArrayList(roomRepository.findAll(predicate));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment