All checks were successful
Build / build (push) Successful in 2m10s
114 lines
2.9 KiB
Java
114 lines
2.9 KiB
Java
package be.seeseepuff.pcinv.services;
|
|
|
|
import be.seeseepuff.pcinv.models.Build;
|
|
import be.seeseepuff.pcinv.models.BuildInfo;
|
|
import be.seeseepuff.pcinv.repositories.BuildRepository;
|
|
import be.seeseepuff.pcinv.repositories.RamRepository;
|
|
import jakarta.annotation.PostConstruct;
|
|
import jakarta.transaction.Transactional;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* A service that manages computer builds.
|
|
*/
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
public class BuildService {
|
|
private final BuildRepository buildRepository;
|
|
private final RamRepository ramRepository;
|
|
|
|
@PostConstruct
|
|
private void init() {
|
|
Build empty = buildRepository.getBuildByNameAndMeta("None", true);
|
|
if (empty == null) {
|
|
empty = Build.builder()
|
|
.name("None")
|
|
.meta(true)
|
|
.build();
|
|
}
|
|
empty.setDescription("A meta build to hold unused parts.");
|
|
empty = buildRepository.save(empty);
|
|
}
|
|
|
|
/**
|
|
* Gets a list of all computer builds, including meta builds.
|
|
*
|
|
* @return A list of all builds.
|
|
*/
|
|
public List<Build> getAllBuilds() {
|
|
return buildRepository.findAll();
|
|
}
|
|
|
|
/**
|
|
* Gets a list of all computer builds, excluding meta builds.
|
|
*
|
|
* @return A list of all builds.
|
|
*/
|
|
public List<Build> getAllRealBuilds() {
|
|
return buildRepository.findAllByMeta(false);
|
|
}
|
|
|
|
/**
|
|
* Gets a build by its ID.
|
|
*
|
|
* @param id The ID of the build to retrieve.
|
|
* @return The build with the given ID, or null if not found.
|
|
*/
|
|
public Build getBuildById(long id) {
|
|
return buildRepository.getBuildById(id);
|
|
}
|
|
|
|
/**
|
|
* Creates a new build with the given name and description.
|
|
*
|
|
* @param name The name of the build.
|
|
* @param description The description of the build.
|
|
* @return The created build.
|
|
*/
|
|
@Transactional
|
|
public Build createBuild(String name, String description) {
|
|
Build build = Build.builder()
|
|
.name(name)
|
|
.description(description)
|
|
.build();
|
|
return buildRepository.saveAndFlush(build);
|
|
}
|
|
|
|
/**
|
|
* Deletes a build by its ID.
|
|
*
|
|
* @param id The ID of the build to delete.
|
|
*/
|
|
@Transactional
|
|
public void deleteBuild(long id) {
|
|
Build build = buildRepository.getBuildById(id);
|
|
for (var part : build.getParts()) {
|
|
part.setBuild(null);
|
|
}
|
|
buildRepository.deleteById(id);
|
|
}
|
|
|
|
/**
|
|
* Gets the build information for a given build ID.
|
|
*
|
|
* @param build The build object for which to retrieve the information.
|
|
* @return The BuildInfo object containing the build information.
|
|
* @throws IllegalArgumentException if the build with the given ID does not exist.
|
|
*/
|
|
public BuildInfo getBuildInfo(Build build) {
|
|
var buildInfo = new BuildInfo();
|
|
for (var part : build.getParts()) {
|
|
if (part.getType().equals("ram")) {
|
|
var asset = ramRepository.findByAsset(part);
|
|
if (asset.getCapacity() != null) {
|
|
buildInfo.setTotalRam(buildInfo.getTotalRam() + asset.getCapacity());
|
|
}
|
|
}
|
|
}
|
|
return buildInfo;
|
|
}
|
|
}
|