Skip to content
Snippets Groups Projects
Commit 33ca92b3 authored by xTheodor's avatar xTheodor
Browse files

Init Server files

parent 9e988a7a
No related branches found
No related tags found
No related merge requests found
package cz.cvut.fit.tjv.seidlpet.semestralka.controller;
import cz.cvut.fit.tjv.seidlpet.semestralka.dto.ServerCreateDTO;
import cz.cvut.fit.tjv.seidlpet.semestralka.dto.ServerDTO;
import cz.cvut.fit.tjv.seidlpet.semestralka.service.ServerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import java.util.List;
@RestController
public class ServerController {
private final ServerService serverService;
@Autowired
public ServerController(ServerService serverService) {
this.serverService = serverService;
}
@GetMapping("/server/all")
List<ServerDTO> all() { return serverService.findAll(); }
@GetMapping("/server/{id}")
ServerDTO byId(@PathVariable int id) {
return serverService.findByIdAsDTO(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
}
@PostMapping("/server")
ServerDTO save(@RequestBody ServerCreateDTO server) throws Exception {
return serverService.create(server);
}
@PutMapping("/server/{id}")
ServerDTO save(@PathVariable int id, @RequestBody ServerCreateDTO server) throws Exception {
return serverService.update(id, server);
}
}
package cz.cvut.fit.tjv.seidlpet.semestralka.dto;
import java.util.List;
public class ServerCreateDTO {
private final String name;
private final String country;
private final int slots;
private final List<Integer> playerIds;
public ServerCreateDTO(String name, String country, int slots, List<Integer> playerIds) {
this.name = name;
this.country = country;
this.slots = slots;
this.playerIds = playerIds;
}
public String getName() {
return name;
}
public String getCountry() {
return country;
}
public int getSlots() {
return slots;
}
public List<Integer> getPlayerIds() {
return playerIds;
}
}
package cz.cvut.fit.tjv.seidlpet.semestralka.dto;
import java.util.List;
public class ServerDTO {
private final int id;
private final String name;
private final String country;
private final int slots;
private final List<Integer> playerIds;
public ServerDTO(int id, String name, String country, int slots, List<Integer> playerIds) {
this.id = id;
this.name = name;
this.country = country;
this.slots = slots;
this.playerIds = playerIds;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getCountry() {
return country;
}
public int getSlots() {
return slots;
}
public List<Integer> getPlayerIds() {
return playerIds;
}
}
package cz.cvut.fit.tjv.seidlpet.semestralka.entity;
import com.sun.istack.NotNull;
import javax.persistence.*;
import java.util.List;
@Entity
public class Server {
@Id
@GeneratedValue
private int id;
@NotNull
private String name;
@NotNull
private String country;
@NotNull
private int slots;
@ManyToMany
@JoinTable(
name="server_player",
joinColumns = @JoinColumn(name="server_id"),
inverseJoinColumns = @JoinColumn(name="player_id")
)
private List<Player> players;
public Server() {
}
public Server(String name, String country, int slots, List<Player> players) {
this.name = name;
this.country = country;
this.slots = slots;
this.players = players;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public int getSlots() {
return slots;
}
public void setSlots(int slots) {
this.slots = slots;
}
public List<Player> getPlayers() {
return players;
}
public void setPlayers(List<Player> players) {
this.players = players;
}
}
package cz.cvut.fit.tjv.seidlpet.semestralka.repozitory;
import cz.cvut.fit.tjv.seidlpet.semestralka.entity.Server;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ServerRepository extends JpaRepository<Server, Integer> {
}
package cz.cvut.fit.tjv.seidlpet.semestralka.service;
import cz.cvut.fit.tjv.seidlpet.semestralka.dto.ServerCreateDTO;
import cz.cvut.fit.tjv.seidlpet.semestralka.dto.ServerDTO;
import cz.cvut.fit.tjv.seidlpet.semestralka.entity.Player;
import cz.cvut.fit.tjv.seidlpet.semestralka.entity.Server;
import cz.cvut.fit.tjv.seidlpet.semestralka.repozitory.ServerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Service
public class ServerService {
private final PlayerService playerService;
private final ServerRepository serverRepository;
@Autowired
public ServerService(PlayerService playerService, ServerRepository serverRepository) {
this.playerService = playerService;
this.serverRepository = serverRepository;
}
public List<ServerDTO> findAll() {
return serverRepository
.findAll()
.stream()
.map(this::toDTO)
.collect(Collectors.toList());
}
public ServerDTO create(ServerCreateDTO serverCreateDTO) throws Exception {
List<Player> players = playerService.findByIds(serverCreateDTO.getPlayerIds());
if(players.size() != serverCreateDTO.getPlayerIds().size())
throw new Exception("Some players not found.");
return toDTO(
serverRepository.save(
new Server(serverCreateDTO.getName(), serverCreateDTO.getCountry(),serverCreateDTO.getSlots(),players)
)
);
}
@Transactional
public ServerDTO update(int id, ServerCreateDTO serverCreateDTO) throws Exception {
Optional<Server> optionalTable = serverRepository.findById(id);
if(optionalTable.isEmpty())
throw new Exception("No such table.");
List<Player> players = playerService.findByIds(serverCreateDTO.getPlayerIds());
if(players.size() != serverCreateDTO.getPlayerIds().size())
throw new Exception("Some players not found.");
Server server = optionalTable.get();
server.setName(serverCreateDTO.getName());
server.setCountry(serverCreateDTO.getCountry());
server.setSlots(serverCreateDTO.getSlots());
server.setPlayers(players);
return toDTO(server);
}
public List<Server> findByIds(List<Integer> ids) {
return serverRepository.findAllById(ids);
}
public Optional<Server> findById(int id) {
return serverRepository.findById(id);
}
public Optional<ServerDTO> findByIdAsDTO(int id) {
return toDTO(serverRepository.findById(id));
}
private ServerDTO toDTO(Server server) {
return new ServerDTO(
server.getId(),
server.getName(),
server.getCountry(),
server.getSlots(),
server.getPlayers().stream().map(Player::getId).collect(Collectors.toList())
);
}
private Optional<ServerDTO> toDTO(Optional<Server> optionalTable) {
if(optionalTable.isEmpty())
return Optional.empty();
return Optional.of(toDTO(optionalTable.get()));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment