Files
pcinv/src/main/java/be/seeseepuff/pcinv/services/BuildService.java
Sebastiaan de Schaetzen 8e26a73243
All checks were successful
Build / build (push) Successful in 2m10s
Add build management features and views
2025-06-15 09:03:47 +02:00

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;
}
}