mirror of https://github.com/elunez/eladmin
checkin
parent
5d6a859214
commit
707cd002f8
|
@ -26,4 +26,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
|||
**/
|
||||
public interface TeamPlayerRepository extends JpaRepository<TeamPlayer, Long>, JpaSpecificationExecutor<TeamPlayer> {
|
||||
boolean existsByTeamIdAndPlayerId(Long teamId, Long playerId);
|
||||
|
||||
TeamPlayer findByTeamIdAndPlayerId(Long teamId, Long playerId);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* Copyright 2019-2025 Zheng Jie
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.srr.rest;
|
||||
|
||||
import com.srr.dto.TeamPlayerDto;
|
||||
import com.srr.service.TeamPlayerService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import me.zhengjie.annotation.Log;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author Chanheng
|
||||
* @website https://eladmin.vip
|
||||
* @date 2025-05-26
|
||||
**/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@Api(tags = "Team Player Management")
|
||||
@RequestMapping("/api/team-player")
|
||||
public class TeamPlayerController {
|
||||
|
||||
private final TeamPlayerService teamPlayerService;
|
||||
|
||||
@GetMapping("/{id}")
|
||||
@ApiOperation("Get team player details")
|
||||
@PreAuthorize("@el.check('event:list')")
|
||||
public ResponseEntity<TeamPlayerDto> getTeamPlayer(@PathVariable Long id) {
|
||||
return new ResponseEntity<>(teamPlayerService.findById(id), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PutMapping("/{id}/check-in")
|
||||
@Log("Check in player")
|
||||
@ApiOperation("Check in player for an event")
|
||||
@PreAuthorize("@el.check('event:edit')")
|
||||
public ResponseEntity<TeamPlayerDto> checkIn(@PathVariable Long id) {
|
||||
return new ResponseEntity<>(teamPlayerService.checkIn(id), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/find")
|
||||
@ApiOperation("Find team player by team and player IDs")
|
||||
@PreAuthorize("@el.check('event:list')")
|
||||
public ResponseEntity<TeamPlayerDto> findByTeamAndPlayer(
|
||||
@RequestParam Long teamId,
|
||||
@RequestParam Long playerId) {
|
||||
TeamPlayerDto teamPlayer = teamPlayerService.findByTeamIdAndPlayerId(teamId, playerId);
|
||||
if (teamPlayer == null) {
|
||||
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
|
||||
}
|
||||
return new ResponseEntity<>(teamPlayer, HttpStatus.OK);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Copyright 2019-2025 Zheng Jie
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.srr.service;
|
||||
|
||||
import com.srr.domain.TeamPlayer;
|
||||
import com.srr.dto.TeamPlayerDto;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import me.zhengjie.utils.PageResult;
|
||||
|
||||
/**
|
||||
* @author Chanheng
|
||||
* @website https://eladmin.vip
|
||||
* @description Service interface for TeamPlayer
|
||||
* @date 2025-05-26
|
||||
**/
|
||||
public interface TeamPlayerService {
|
||||
|
||||
/**
|
||||
* Get a specific TeamPlayer by ID
|
||||
* @param id TeamPlayer ID
|
||||
* @return TeamPlayerDto
|
||||
*/
|
||||
TeamPlayerDto findById(Long id);
|
||||
|
||||
/**
|
||||
* Check in a player for an event
|
||||
* @param id TeamPlayer ID
|
||||
* @return The updated TeamPlayerDto
|
||||
*/
|
||||
TeamPlayerDto checkIn(Long id);
|
||||
|
||||
/**
|
||||
* Find TeamPlayer by teamId and playerId
|
||||
* @param teamId the team ID
|
||||
* @param playerId the player ID
|
||||
* @return TeamPlayerDto if found, null otherwise
|
||||
*/
|
||||
TeamPlayerDto findByTeamIdAndPlayerId(Long teamId, Long playerId);
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Copyright 2019-2025 Zheng Jie
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.srr.service.impl;
|
||||
|
||||
import com.srr.domain.TeamPlayer;
|
||||
import com.srr.dto.TeamPlayerDto;
|
||||
import com.srr.dto.mapstruct.TeamPlayerMapper;
|
||||
import com.srr.repository.TeamPlayerRepository;
|
||||
import com.srr.service.TeamPlayerService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.exception.EntityNotFoundException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author Chanheng
|
||||
* @website https://eladmin.vip
|
||||
* @date 2025-05-26
|
||||
**/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class TeamPlayerServiceImpl implements TeamPlayerService {
|
||||
|
||||
private final TeamPlayerRepository teamPlayerRepository;
|
||||
private final TeamPlayerMapper teamPlayerMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public TeamPlayerDto findById(Long id) {
|
||||
TeamPlayer teamPlayer = teamPlayerRepository.findById(id)
|
||||
.orElseThrow(() -> new EntityNotFoundException(TeamPlayer.class, "id", id.toString()));
|
||||
return teamPlayerMapper.toDto(teamPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public TeamPlayerDto checkIn(Long id) {
|
||||
TeamPlayer teamPlayer = teamPlayerRepository.findById(id)
|
||||
.orElseThrow(() -> new EntityNotFoundException(TeamPlayer.class, "id", id.toString()));
|
||||
|
||||
if (teamPlayer.isCheckedIn()) {
|
||||
throw new BadRequestException("Player is already checked in");
|
||||
}
|
||||
|
||||
teamPlayer.setCheckedIn(true);
|
||||
teamPlayerRepository.save(teamPlayer);
|
||||
|
||||
return teamPlayerMapper.toDto(teamPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public TeamPlayerDto findByTeamIdAndPlayerId(Long teamId, Long playerId) {
|
||||
TeamPlayer teamPlayer = teamPlayerRepository.findByTeamIdAndPlayerId(teamId, playerId);
|
||||
return teamPlayer != null ? teamPlayerMapper.toDto(teamPlayer) : null;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue