174 lines
5.7 KiB
Java
174 lines
5.7 KiB
Java
package fr.la_banquise.backend.services;
|
|
|
|
import fr.la_banquise.backend.data.model.Instance;
|
|
import fr.la_banquise.backend.data.model.Ji;
|
|
import fr.la_banquise.backend.data.model.Site;
|
|
import fr.la_banquise.backend.data.model.User;
|
|
import fr.la_banquise.backend.data.repository.JiRepository;
|
|
import fr.la_banquise.backend.data.repository.UserRepository;
|
|
import jakarta.enterprise.context.ApplicationScoped;
|
|
import jakarta.inject.Inject;
|
|
import jakarta.transaction.Transactional;
|
|
import jakarta.ws.rs.core.SecurityContext;
|
|
import java.util.List;
|
|
|
|
@ApplicationScoped
|
|
public class JiService {
|
|
|
|
@Inject JiRepository jiRepository;
|
|
@Inject UserRepository userRepository;
|
|
@Inject SiteService siteService;
|
|
@Inject UserService userService;
|
|
@Inject InstanceService instanceService;
|
|
@Inject SecurityContext security;
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
///
|
|
/// First, we create our JI and basic functions
|
|
@Transactional
|
|
public Ji createJi(String name, String description, String date,
|
|
Long siteId, Long ownerId) {
|
|
Site site = siteService.getSite(siteId);
|
|
User user = userService.getUser(ownerId);
|
|
Ji ji = new Ji(name, description, List.of(user), date, site);
|
|
jiRepository.persist(ji);
|
|
siteService.registerJi(site, ji);
|
|
createInstance(user.id, ji.id);
|
|
return ji;
|
|
}
|
|
|
|
public List<Ji> getAllJiAdmin() { return jiRepository.listAll(); }
|
|
|
|
public List<Ji> getAllJiRespo(String username) {
|
|
User user = userRepository.findByName(username);
|
|
return user.jiRespo;
|
|
}
|
|
|
|
public Ji getJi(Long id) { return jiRepository.findById(id); }
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
/// Now that the JI is created, we want to add users to it and assign them
|
|
/// instances, but DONT create their containers yet !
|
|
|
|
@Transactional
|
|
public Instance createInstance(Long userId, Long jiId) {
|
|
Ji ji = jiRepository.findById(jiId);
|
|
Instance instance = instanceService.createInstance(userId, ji);
|
|
ji.instances.add(instance);
|
|
return instance;
|
|
}
|
|
|
|
@Transactional
|
|
public Instance getInstance(Long jiId, Long userId) {
|
|
Ji ji = jiRepository.findById(jiId);
|
|
for (Instance inst : ji.instances) {
|
|
if (inst.owner.id == userId) {
|
|
return inst;
|
|
}
|
|
}
|
|
throw new Error("Instance or user not found");
|
|
}
|
|
|
|
@Transactional
|
|
public void registerUser(Long userId, Long jiId) {
|
|
User user = userService.getUser(userId);
|
|
Ji ji = getJi(jiId);
|
|
ji.participants.add(user);
|
|
createInstance(userId, jiId);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
/// Then, when an admin decides it, we create the containers
|
|
|
|
/*@Transactional
|
|
public void createContainer(Long jiId, Long userId) {
|
|
Ji ji = jiRepository.findById(jiId);
|
|
String username = userService.getUser(userId).name;
|
|
for (Instance instance : ji.instances) {
|
|
|
|
if (instance.name.equals(username + "-" + jiId)) {
|
|
instanceService.createContainer(instance.id);
|
|
break;
|
|
}
|
|
}
|
|
}*/
|
|
|
|
// On dit a toute les instances de creer leur container.
|
|
// Instance gere le cas ou le container existe deja.
|
|
@Transactional
|
|
public void createContainers(Long jiId) {
|
|
Ji ji = jiRepository.findById(jiId);
|
|
for (Instance instance : ji.instances) {
|
|
instanceService.createContainer(instance.id);
|
|
}
|
|
}
|
|
|
|
public String getStatusContainer(Long jiId, Long userId) {
|
|
Ji ji = jiRepository.findById(jiId);
|
|
String username = userService.getUser(userId).name;
|
|
String retour = "";
|
|
for (Instance instance : ji.instances) {
|
|
if (instance.name.equals(username + "-" + jiId)) {
|
|
if (instance.containerId.equals("Not created"))
|
|
return "Not created";
|
|
retour = instanceService.getStatusContainer(instance.id)
|
|
.toString()
|
|
.replaceAll(".*status=([^,]+).*", "$1");
|
|
break;
|
|
}
|
|
}
|
|
if (retour == "")
|
|
return "Not created";
|
|
return retour;
|
|
}
|
|
|
|
public String getStatusContainers(Long jiId) {
|
|
Ji ji = jiRepository.findById(jiId);
|
|
String retour = "";
|
|
for (Instance instance : ji.instances) {
|
|
if (instance.containerId.equals("Not created"))
|
|
retour += "Not created";
|
|
else {
|
|
retour +=
|
|
instanceService.getStatusContainer(instance.id).toString();
|
|
}
|
|
}
|
|
return retour;
|
|
}
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
/// Finally, start/stop the containers
|
|
|
|
@Transactional
|
|
public void startContainers(Long jiId) {
|
|
Ji ji = jiRepository.findById(jiId);
|
|
for (Instance instance : ji.instances) {
|
|
instanceService.startContainer(instance.id);
|
|
}
|
|
}
|
|
|
|
@Transactional
|
|
public void stopContainers(Long jiId) {
|
|
Ji ji = jiRepository.findById(jiId);
|
|
for (Instance instance : ji.instances) {
|
|
instanceService.stopContainer(instance.id);
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
/// Last but not least, be able do delete every container and instance
|
|
|
|
@Transactional
|
|
public void deleteJi(Long jiId) {
|
|
Ji ji = getJi(jiId);
|
|
for (Instance instance : ji.instances) {
|
|
instanceService.deleteInstance(instance.id);
|
|
}
|
|
siteService.removeJi(ji.site, ji);
|
|
jiRepository.deleteById(jiId);
|
|
}
|
|
}
|