[V 0.1] api to get data from database

This commit is contained in:
helori_ollivier
2025-11-18 10:11:28 +01:00
commit ca22b2f79e
37 changed files with 1447 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
package bzh.risotto.galactik.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}

View File

@@ -0,0 +1,21 @@
package bzh.risotto.galactik.api.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
@Profile("dev")
public class SpringSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(auth -> auth.anyRequest().permitAll());
return http.build();
}
}

View File

@@ -0,0 +1,33 @@
package bzh.risotto.galactik.api.controler;
import bzh.risotto.galactik.api.model.Corpo;
import bzh.risotto.galactik.api.service.CorpoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
@RequestMapping("/corpo")
public class CorpoController {
private final CorpoService corpoService;
@Autowired
public CorpoController(CorpoService corpoService) {
this.corpoService = corpoService;
}
@GetMapping("")
public Iterable<Corpo> getCorpos() {
return this.corpoService.getCorpos();
}
@GetMapping("/{corpoId}")
public Optional<Corpo> getCorpos(@PathVariable Long corpoId) {
return this.corpoService.getCorpo(corpoId);
}
}

View File

@@ -0,0 +1,34 @@
package bzh.risotto.galactik.api.controler;
import bzh.risotto.galactik.api.model.Facility;
import bzh.risotto.galactik.api.service.FacilityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
@RequestMapping("/facility")
public class FacilityController {
private final FacilityService facilityService;
@Autowired
public FacilityController(FacilityService facilityService) {
this.facilityService = facilityService;
}
@GetMapping("")
public Iterable<Facility> getFacilities() {
return this.facilityService.getFacilities();
}
@GetMapping("/{facilityId}")
public Optional<Facility> getFacility(@PathVariable Long facilityId) {
return this.facilityService.getFacility(facilityId);
}
}

View File

@@ -0,0 +1,35 @@
package bzh.risotto.galactik.api.controler;
import bzh.risotto.galactik.api.service.ModuleService;
import bzh.risotto.galactik.api.model.Module;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
@RequestMapping("/module")
public class ModuleController {
private final ModuleService moduleService;
@Autowired
public ModuleController(ModuleService moduleService) {
this.moduleService = moduleService;
}
@GetMapping("")
public Iterable<Module> getModules() {
return this.moduleService.getModules();
}
@GetMapping("/{moduleId}")
public Optional<Module> getModule(@PathVariable Long moduleId) {
return this.moduleService.getModule(moduleId);
}
}

View File

@@ -0,0 +1,34 @@
package bzh.risotto.galactik.api.controler;
import bzh.risotto.galactik.api.model.Planet;
import bzh.risotto.galactik.api.service.PlanetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
@RequestMapping("/planet")
public class PlanetController {
private final PlanetService planetService;
@Autowired
public PlanetController(PlanetService planetService) {
this.planetService = planetService;
}
@GetMapping("")
public Iterable<Planet> getPlanets() {
return this.planetService.findAll();
}
@GetMapping("/{planetId}")
public Optional<Planet> getPlanet(@PathVariable Long planetId) {
return this.planetService.getPlanet(planetId);
}
}

View File

@@ -0,0 +1,34 @@
package bzh.risotto.galactik.api.controler;
import bzh.risotto.galactik.api.model.Ressource;
import bzh.risotto.galactik.api.service.RessourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
@RequestMapping("/ressource")
public class RessourceController {
private final RessourceService ressourceService;
@Autowired
public RessourceController(RessourceService ressourceService) {
this.ressourceService = ressourceService;
}
@GetMapping("")
public Iterable<Ressource> getRessources() {
return this.ressourceService.getRessources();
}
@GetMapping("/{ressourceId}")
public Optional<Ressource> getRessource(@PathVariable("ressourceId") Long ressourceId) {
return this.ressourceService.getRessource(ressourceId);
}
}

View File

@@ -0,0 +1,34 @@
package bzh.risotto.galactik.api.controler;
import bzh.risotto.galactik.api.model.Ship;
import bzh.risotto.galactik.api.service.ShipService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
@RequestMapping("/ship")
public class ShipController {
private final ShipService shipService;
@Autowired
public ShipController(ShipService shipService) {
this.shipService = shipService;
}
@GetMapping("")
public Iterable<Ship> getShips() {
return this.shipService.findAll();
}
@GetMapping("/{shipId}")
public Optional<Ship> getShip(@PathVariable Long shipId) {
return this.shipService.getShipRepository().findById(shipId);
}
}

View File

@@ -0,0 +1,33 @@
package bzh.risotto.galactik.api.controler;
import bzh.risotto.galactik.api.model.Star;
import bzh.risotto.galactik.api.service.StarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
@RequestMapping("/star")
public class StarController {
private final StarService starService;
@Autowired
public StarController(StarService starService) {
this.starService = starService;
}
@GetMapping("")
public Iterable<Star> getStars() {
return starService.getStars();
}
@GetMapping("/{starId}")
public Optional<Star> getStar(@PathVariable Long starId) {
return starService.getStar(starId);
}
}

View File

@@ -0,0 +1,43 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
import java.util.List;
@Entity
@Data
@Table(name="corpo")
public class Corpo {
@Id
@Column(name = "c_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "c_name")
private String name;
@Column(name = "c_money")
private Double money;
@OneToMany()
@JoinTable(
name = "corpo_ressource",
joinColumns = @JoinColumn(name = "cr_corpo"),
inverseJoinColumns = @JoinColumn(name = "cr_ressource")
)
private List<Ressource> ressources;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "s_propritary")
private List<Ship> ships;
@OneToMany()
@JoinColumn(name = "p_corpo", referencedColumnName = "c_id")
private List<Planet> planets;
@OneToMany()
@JoinColumn(name = "f_proprietary", referencedColumnName = "c_id")
private List<Facility> facilities;
}

View File

@@ -0,0 +1,34 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
import java.util.Date;
@Data
@Entity
@Table(name = "facility")
public class Facility {
@Id
@Column(name = "f_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne()
@JoinColumn(name = "f_type", referencedColumnName = "ft_id")
private FacilityType facilityType;
@OneToOne()
@JoinColumn(name = "f_processing", referencedColumnName = "r_id")
private Ressource processingRessource;
@Column(name = "f_start_time")
private Date startTime;
@Column(name = "f_planet")
private Integer planet;
@Column(name = "f_proprietary")
private Integer corpo;
}

View File

@@ -0,0 +1,36 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
@Entity
@Data
@Table(name = "facility_type")
public class FacilityType {
@Id
@Column(name = "ft_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "ft_name")
private String name;
@OneToOne()
@JoinColumn(name = "ft_ressource_in", referencedColumnName = "rt_id")
private RessourceType ressourceIn;
@OneToOne()
@JoinColumn(name = "ft_ressource_out", referencedColumnName = "rt_id")
private RessourceType ressourceOut;
@Column(name = "ft_process_max_in")
private int processMaxIn;
@Column(name = "ft_process_max_out")
private int processMaxOut;
@Column(name = "ft_process_time")
private float processTime;
}

View File

@@ -0,0 +1,24 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
@Entity
@Data
@Table(name = "modules")
public class Module {
@Id
@Column(name = "m_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "m_name")
private String name;
@Column(name = "m_price")
private float price;
@Column(name = "m_size")
private float size;
}

View File

@@ -0,0 +1,41 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
import java.util.List;
@Entity
@Data
@Table(name = "planet")
public class Planet {
@Id
@Column(name = "p_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "p_name")
private String name;
@Column(name = "p_star")
private String star;
@Column(name = "p_corpo")
private String corpo;
@OneToMany()
@JoinColumn(name = "s_planet", referencedColumnName = "p_id")
private List<Ship> ships;
@OneToMany()
@JoinTable(
name = "planet_ressource",
joinColumns = @JoinColumn(name = "pr_planet"),
inverseJoinColumns = @JoinColumn(name = "pr_ressource")
)
private List<Ressource> ressources;
@OneToMany()
@JoinColumn(name = "f_planet")
private List<Facility> facilities;
}

View File

@@ -0,0 +1,22 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
@Entity
@Data
@Table(name = "ressource")
public class Ressource {
@Id
@Column(name = "r_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "r_type", referencedColumnName = "rt_id")
private RessourceType type;
@Column(name = "r_quantity")
private Integer quantity;
}

View File

@@ -0,0 +1,17 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
@Entity
@Data
@Table(name = "ressources_type")
public class RessourceType {
@Id
@Column(name = "rt_id")
private Long id;
@Column(name = "rt_name")
private String name;
}

View File

@@ -0,0 +1,43 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
import java.util.List;
@Entity
@Data
@Table(name = "ship")
public class Ship {
@Id
@Column(name = "s_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "s_name")
private String name;
@Column(name = "s_value")
private float value;
@Column(name = "s_size")
private int size;
@Column(name = "s_power")
private float power;
@Column(name = "s_speed")
private float speed;
@OneToMany()
@JoinTable(
name = "ship_modules",
joinColumns = @JoinColumn(name = "sm_ship_id"),
inverseJoinColumns = @JoinColumn(name = "sm_modules_id")
)
List<Module> modules;
@Column(name = "s_planet")
private int planet;
}

View File

@@ -0,0 +1,31 @@
package bzh.risotto.galactik.api.model;
import jakarta.persistence.*;
import lombok.Data;
import java.util.List;
@Data
@Entity
@Table(name = "star")
public class Star {
@Id
@Column(name = "st_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "st_name")
private String name;
@Column(name = "pos_x")
private Double posX;
@Column(name = "pos_y")
private Double posY;
@OneToMany()
@JoinColumn(name = "p_star")
private List<Planet> planets;
}

View File

@@ -0,0 +1,10 @@
package bzh.risotto.galactik.api.repository;
import bzh.risotto.galactik.api.model.Corpo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CorpoRepository extends CrudRepository<Corpo, Long> {
}

View File

@@ -0,0 +1,9 @@
package bzh.risotto.galactik.api.repository;
import bzh.risotto.galactik.api.model.Facility;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface FacilityRepository extends CrudRepository<Facility, Long> {
}

View File

@@ -0,0 +1,10 @@
package bzh.risotto.galactik.api.repository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import bzh.risotto.galactik.api.model.Module;
@Repository
public interface ModuleRepository extends CrudRepository<Module, Long> {
}

View File

@@ -0,0 +1,9 @@
package bzh.risotto.galactik.api.repository;
import bzh.risotto.galactik.api.model.Planet;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PlanetRepository extends CrudRepository<Planet, Long> {
}

View File

@@ -0,0 +1,9 @@
package bzh.risotto.galactik.api.repository;
import bzh.risotto.galactik.api.model.Ressource;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface RessourceRepository extends CrudRepository<Ressource, Long> {
}

View File

@@ -0,0 +1,9 @@
package bzh.risotto.galactik.api.repository;
import bzh.risotto.galactik.api.model.Ship;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ShipRepository extends CrudRepository<Ship, Long> {
}

View File

@@ -0,0 +1,10 @@
package bzh.risotto.galactik.api.repository;
import bzh.risotto.galactik.api.model.Star;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface StarRepository extends CrudRepository<Star, Long> {
}

View File

@@ -0,0 +1,29 @@
package bzh.risotto.galactik.api.service;
import bzh.risotto.galactik.api.model.Corpo;
import bzh.risotto.galactik.api.repository.CorpoRepository;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Data
@Service
public class CorpoService {
private final CorpoRepository corpoRepository;
@Autowired
public CorpoService(CorpoRepository corpoRepository) {
this.corpoRepository = corpoRepository;
}
public Iterable<Corpo> getCorpos() {
return this.corpoRepository.findAll();
}
public Optional<Corpo> getCorpo(Long id) {
return this.corpoRepository.findById(id);
}
}

View File

@@ -0,0 +1,30 @@
package bzh.risotto.galactik.api.service;
import bzh.risotto.galactik.api.model.Facility;
import bzh.risotto.galactik.api.repository.FacilityRepository;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Data
@Service
public class FacilityService {
private FacilityRepository facilityRepository;
@Autowired
public FacilityService(FacilityRepository facilityRepository) {
this.facilityRepository = facilityRepository;
}
public Iterable<Facility> getFacilities() {
return this.facilityRepository.findAll();
}
public Optional<Facility> getFacility(Long id) {
return this.facilityRepository.findById(id);
}
}

View File

@@ -0,0 +1,30 @@
package bzh.risotto.galactik.api.service;
import bzh.risotto.galactik.api.repository.ModuleRepository;
import bzh.risotto.galactik.api.model.Module;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Data
@Service
public class ModuleService {
private ModuleRepository moduleRepository;
@Autowired
public ModuleService(ModuleRepository moduleRepository) {
this.moduleRepository = moduleRepository;
}
public Iterable<Module> getModules() {
return this.moduleRepository.findAll();
}
public Optional<Module> getModule(Long id) {
return this.moduleRepository.findById(id);
}
}

View File

@@ -0,0 +1,29 @@
package bzh.risotto.galactik.api.service;
import bzh.risotto.galactik.api.model.Planet;
import bzh.risotto.galactik.api.repository.PlanetRepository;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Data
@Service
public class PlanetService {
private PlanetRepository planetRepository;
@Autowired
public void setPlanetRepository(PlanetRepository planetRepository) {
this.planetRepository = planetRepository;
}
public Iterable<Planet> findAll() {
return this.planetRepository.findAll();
}
public Optional<Planet> getPlanet(Long id) {
return this.planetRepository.findById(id);
}
}

View File

@@ -0,0 +1,30 @@
package bzh.risotto.galactik.api.service;
import bzh.risotto.galactik.api.model.Ressource;
import bzh.risotto.galactik.api.repository.RessourceRepository;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Data
@Service
public class RessourceService {
private RessourceRepository ressourceRepository;
@Autowired
public RessourceService(RessourceRepository ressourceRepository) {
this.ressourceRepository = ressourceRepository;
}
public Iterable<Ressource> getRessources() {
return this.ressourceRepository.findAll();
}
public Optional<Ressource> getRessource(Long id) {
return this.ressourceRepository.findById(id);
}
}

View File

@@ -0,0 +1,30 @@
package bzh.risotto.galactik.api.service;
import bzh.risotto.galactik.api.model.Ship;
import bzh.risotto.galactik.api.repository.ShipRepository;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Data
@Service
public class ShipService {
private ShipRepository shipRepository;
@Autowired
public void setShipRepository(ShipRepository shipRepository) {
this.shipRepository = shipRepository;
}
public Iterable<Ship> findAll() {
return this.shipRepository.findAll();
}
public Optional<Ship> getShip(Long id) {
return this.shipRepository.findById(id);
}
}

View File

@@ -0,0 +1,29 @@
package bzh.risotto.galactik.api.service;
import bzh.risotto.galactik.api.model.Star;
import bzh.risotto.galactik.api.repository.StarRepository;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Data
@Service
public class StarService {
private final StarRepository starRepository;
@Autowired
public StarService(StarRepository starRepository) {
this.starRepository = starRepository;
}
public Iterable<Star> getStars() {
return starRepository.findAll();
}
public Optional<Star> getStar(Long id) {
return starRepository.findById(id);
}
}

View File

@@ -0,0 +1,19 @@
spring.application.name=api
#server
server.port=8081
# spring security
spring.profiles.active=dev
# sql
spring.datasource.url=jdbc:mysql://localhost:3306/galactifeur
spring.datasource.username=gltk_user
spring.datasource.password=user
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# hibernate
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

View File

@@ -0,0 +1,13 @@
package bzh.risotto.galactik.api;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ApiApplicationTests {
@Test
void contextLoads() {
}
}