From a58fefbd2d5375aa4bca1d8da0a8aa46e31d1a30 Mon Sep 17 00:00:00 2001 From: zihluwang Date: Thu, 16 Apr 2026 09:52:55 +0800 Subject: [PATCH] feat: add addFirearm endpoint and FirearmRequest DTO for firearm creation --- .../controller/FirearmController.java | 12 +++++++----- .../domain/dto/FirearmRequest.java | 15 +++++++++++++++ .../deltaforceguide/service/FirearmService.java | 16 ++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/onixbyte/deltaforceguide/domain/dto/FirearmRequest.java diff --git a/src/main/java/com/onixbyte/deltaforceguide/controller/FirearmController.java b/src/main/java/com/onixbyte/deltaforceguide/controller/FirearmController.java index d6e8ca7..2f723fe 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/controller/FirearmController.java +++ b/src/main/java/com/onixbyte/deltaforceguide/controller/FirearmController.java @@ -1,5 +1,6 @@ package com.onixbyte.deltaforceguide.controller; +import com.onixbyte.deltaforceguide.domain.dto.FirearmRequest; import com.onixbyte.deltaforceguide.domain.dto.FirearmResponse; import com.onixbyte.deltaforceguide.domain.dto.PageResponse; import com.onixbyte.deltaforceguide.enumeration.FirearmType; @@ -11,11 +12,7 @@ import jakarta.validation.constraints.Min; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.validation.annotation.Validated; -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.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @Tag(name = "武器管理", description = "与武器有关的操作") @RestController @@ -46,5 +43,10 @@ public class FirearmController { public FirearmResponse queryById(@PathVariable Long id) { return firearmService.queryById(id); } + + @PostMapping + public FirearmResponse addFirearm(@Validated @RequestBody FirearmRequest request) { + return firearmService.addFirearm(request); + } } diff --git a/src/main/java/com/onixbyte/deltaforceguide/domain/dto/FirearmRequest.java b/src/main/java/com/onixbyte/deltaforceguide/domain/dto/FirearmRequest.java new file mode 100644 index 0000000..74e1993 --- /dev/null +++ b/src/main/java/com/onixbyte/deltaforceguide/domain/dto/FirearmRequest.java @@ -0,0 +1,15 @@ +package com.onixbyte.deltaforceguide.domain.dto; + +import com.onixbyte.deltaforceguide.enumeration.FirearmType; + +public record FirearmRequest( + String name, + FirearmType type, + String level, + String calibre, + Integer fireRate, + Integer armourDamage, + Integer bodyDamage, + String review +) { +} diff --git a/src/main/java/com/onixbyte/deltaforceguide/service/FirearmService.java b/src/main/java/com/onixbyte/deltaforceguide/service/FirearmService.java index 327254c..dc7f090 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/service/FirearmService.java +++ b/src/main/java/com/onixbyte/deltaforceguide/service/FirearmService.java @@ -1,5 +1,6 @@ package com.onixbyte.deltaforceguide.service; +import com.onixbyte.deltaforceguide.domain.dto.FirearmRequest; import com.onixbyte.deltaforceguide.domain.dto.FirearmResponse; import com.onixbyte.deltaforceguide.domain.dto.PageResponse; import com.onixbyte.deltaforceguide.domain.entity.Firearm; @@ -36,5 +37,20 @@ public class FirearmService { .map(FirearmResponse::from) .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Firearm not found: " + id)); } + + public FirearmResponse addFirearm(FirearmRequest request) { + var firearm = firearmRepository.save(Firearm.builder() + .name(request.name()) + .type(request.type()) + .level(request.level()) + .calibre(request.calibre()) + .fireRate(request.fireRate()) + .armourDamage(request.armourDamage()) + .bodyDamage(request.bodyDamage()) + .review(request.review()) + .build()); + + return FirearmResponse.from(firearm); + } }