Код: Выделить всё
{}Код: Выделить всё
package com.backend.basketMarkt.Entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Table(name = "Player_Stats")
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true)
private Integer id;
@Column(name = "player")
private String playerName;
private Integer age;
private String team;
@Column(name = "pos")
private String position;
@Column(name = "games_played")
private Integer gamesPlayed;
@Column(name = "games_started")
private Integer gamesStarted;
@Column(name = "minutes_played")
private float minutesPlayed;
@Column(name = "field_goals")
private float fg;
@Column(name = "field_goals_attempted")
private float fga;
@Column(name = "field_goals_percentage")
private float fgp;
@Column(name = "three_point_fg")
private float threePointFg;
@Column(name = "three_point_attempted")
private float threePointA;
@Column(name = "three_point_percentage")
private float threePointP;
@Column(name = "two_point_fg")
private float twoPointFg;
@Column(name = "two_point_attempted")
private float twoPointA;
@Column(name = "two_point_percentage")
private float twoPointP;
@Column(name = "effective_fg_percentage")
private float effectiveFgPercentage;
@Column(name = "free_throws")
private float freeThrows;
@Column(name = "free_throws_attempted")
private float freeThrowsAttempted;
@Column(name = "free_throw_percentage")
private float freeThrowsPercentage;
@Column(name = "offensive_rebounds")
private float offensiveRebounds;
@Column(name = "defensive_rebounds")
private float defensiveRebounds;
@Column(name = "total_rebounds")
private float totalRebounds;
private float assists;
private float steals;
private float blocks;
private float turnovers;
@Column(name = "personal_fouls")
private float personalFouls;
private float points;
}
< /code>
Repository < /h3>
package com.backend.basketMarkt.Repository;
import com.backend.basketMarkt.Entity.Player;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
public interface PlayerRepository extends JpaRepository {
void deleteByPlayerName(String player);
Optional findByPlayerName(String player);
List findByPosition(String position);
List findByPositionAndPlayerName(String position, String player);
List findByTeam(String team);
List findByTeamAndPlayerName(String team, String player);
void deleteByPosition(String position);
}
< /code>
Service < /h3>
package com.backend.basketMarkt.Service;
import com.backend.basketMarkt.Entity.Player;
import com.backend.basketMarkt.Repository.PlayerRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Component
public class PlayerService {
final private PlayerRepository playerRepository;
@Autowired
public PlayerService(PlayerRepository playerRepository) {
this.playerRepository = playerRepository;
}
public List getPlayers() {
List players = playerRepository.findAll();
System.out.println("Total players in DB: " + players.size()); // Debug için
return players;
}
public Optional getPlayerByName(String player) { // repositorydeki birinci
return playerRepository.findByPlayerName(player);
}
public List getPlayersByPosition(String position) { // repositorydeki ikinci
return playerRepository.findByPosition(position);
}
public List getPlayersByPositionAndPlayer(String position, String player) { // repositorydeki ucuncu
return playerRepository.findByPositionAndPlayerName(position, player);
}
public List getPlayersByTeam(String team) { // repositorydeki dorduncu
return playerRepository.findByTeam(team);
}
public List getPlayersByTeamAndPlayer(String team, String player) { // repositorydeki besinci
return playerRepository.findByTeamAndPlayerName(team, player);
}
public Player addPlayer(Player player) {
return playerRepository.save(player);
}
@GetMapping("/test")
public ResponseEntity testEndpoint() {
List players = playerRepository.findAll();
return ResponseEntity.ok("Total players in DB: " + players.size());
}
public Player updatePlayer(Player player) {
Optional existingPlayer = playerRepository.findByPlayerName(player.getPlayerName());
if (existingPlayer.isPresent()) {
Player playerToUpdate = existingPlayer.get();
playerToUpdate.setPosition(player.getPosition());
playerToUpdate.setTeam(player.getTeam());
playerToUpdate.setAge(player.getAge());
playerRepository.save(playerToUpdate);
return playerToUpdate;
}
return null;
}
@Transactional
public void deleteByPlayerName(String playerName) {
playerRepository.deleteByPlayerName(playerName);
}
@Transactional
public void deleteByPosition(String position) {
if (position == null || position.isEmpty()) {
throw new IllegalArgumentException("Position cannot be null or empty");
}
playerRepository.deleteByPosition(position);
}
}
< /code>
контроллер < /h3>
package com.backend.basketMarkt.Controller;
import com.backend.basketMarkt.Entity.Player;
import com.backend.basketMarkt.Service.PlayerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping(path = "api/v1/player")
public class PlayerController {
private final PlayerService playerService;
@Autowired
public PlayerController(PlayerService playerService) {
this.playerService = playerService;
}
@GetMapping("/get")
public ResponseEntity getPlayers(
@RequestParam(required = false) String playerName,
@RequestParam(required = false) String team,
@RequestParam(required = false) String position
) {
if(team != null && position != null) {
return ResponseEntity.ok(playerService.getPlayersByTeamAndPlayer(team, position));
} else if (playerName != null) {
return playerService.getPlayerByName(playerName)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
} else if(position != null) {
return ResponseEntity.ok(playerService.getPlayersByPosition(position));
} else if (team != null) {
return ResponseEntity.ok(playerService.getPlayersByTeam(team));
} else {
return ResponseEntity.ok(playerService.getPlayers());
}
}
@PostMapping
public ResponseEntity addPlayer(@RequestBody Player playerName) {
Player newPlayer = playerService.addPlayer(playerName);
return new ResponseEntity(newPlayer, HttpStatus.CREATED);
}
@PutMapping
public ResponseEntity updatePlayer(@RequestBody Player playerName) {
Player updatedPlayer = playerService.updatePlayer(playerName);
if(updatedPlayer != null) {
return new ResponseEntity(updatedPlayer, HttpStatus.OK);
}else{
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
}
@DeleteMapping("/{playerName}")
public ResponseEntity deletePlayer(@PathVariable String playerName) {
playerService.deleteByPlayerName(playerName);
return new ResponseEntity("Player Deleted", HttpStatus.OK);
}
@DeleteMapping("/deleteByPosition/{position}")
public ResponseEntity deletePlayerByPosition(@PathVariable String position) {
playerService.deleteByPosition(position);
return new ResponseEntity("Player Deleted", HttpStatus.OK);
}
}
< /code>
база данных < /h3>
-- Table: public.Player_Stats
-- DROP TABLE IF EXISTS public."Player_Stats";
CREATE TABLE IF NOT EXISTS public."Player_Stats"
(
id integer NOT NULL DEFAULT nextval('"Player_Stats_id_seq"'::regclass),
player character varying(100) COLLATE pg_catalog."default",
age integer,
team character varying(60) COLLATE pg_catalog."default",
pos character varying(60) COLLATE pg_catalog."default",
games_played integer,
games_started integer,
minutes_played real,
field_goals real,
field_goals_attempted real,
field_goals_percentage real,
three_point_fg real,
three_point_attempted real,
three_point_percentage real,
two_point_fg real,
two_point_attempted real,
two_point_percentage real,
effective_fg_percentage real,
free_throws real,
free_throws_attempted real,
free_throw_percentage real,
offensive_rebounds real,
defensive_rebounds real,
total_rebounds real,
assists real,
steals real,
blocks real,
turnovers real,
personal_fouls real,
points real,
CONSTRAINT "Player_Stats_pkey" PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public."Player_Stats"
OWNER to postgres;
SELECT * FROM "Player_Stats";
GRANT ALL ON TABLE public."Player_Stats" TO postgres;
Подробнее здесь: https://stackoverflow.com/questions/795 ... n-database