-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #88 from Team-KeepGoing/feature/damage
Feat :: Damage Create, Read, Delete
- Loading branch information
Showing
11 changed files
with
266 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
src/main/java/com/keepgoing/keepserver/domain/damage/entity/Damage.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package com.keepgoing.keepserver.domain.damage.entity; | ||
|
||
import jakarta.persistence.*; | ||
import lombok.AccessLevel; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import lombok.Setter; | ||
import lombok.experimental.SuperBuilder; | ||
import org.springframework.data.jpa.domain.support.AuditingEntityListener; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
@Entity | ||
@Getter | ||
@Setter | ||
@SuperBuilder | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@EntityListeners(AuditingEntityListener.class) | ||
@Table(name = "damage") | ||
public class Damage { | ||
/* | ||
id | ||
*/ | ||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long idx; | ||
|
||
/* | ||
기기 식별 코드 (nfc/이름) | ||
*/ | ||
@Column(nullable = false) | ||
private String code; | ||
|
||
/* | ||
문제 유형 | ||
*/ | ||
@Column(nullable = false) | ||
private String issueType; | ||
|
||
/* | ||
유형에 맞는 자세한 내용 | ||
*/ | ||
@Lob | ||
@Column(nullable = false, columnDefinition = "MEDIUMTEXT") | ||
private String description; | ||
|
||
/* | ||
신고 날짜 | ||
*/ | ||
@Column(nullable = false) | ||
private LocalDateTime reportDate; | ||
|
||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/com/keepgoing/keepserver/domain/damage/mapper/DamageMapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.keepgoing.keepserver.domain.damage.mapper; | ||
|
||
import com.keepgoing.keepserver.domain.damage.entity.Damage; | ||
import com.keepgoing.keepserver.domain.damage.payload.request.DamageCreateRequest; | ||
import com.keepgoing.keepserver.domain.damage.payload.response.DamageResponseDto; | ||
import org.mapstruct.Mapper; | ||
import org.mapstruct.Mapping; | ||
|
||
@Mapper(componentModel = "spring") | ||
public interface DamageMapper { | ||
|
||
DamageResponseDto entityToDto(Damage damage); | ||
|
||
@Mapping(target = "reportDate", expression = "java(java.time.LocalDateTime.now())") | ||
Damage dtoToEntity(DamageCreateRequest damageCreateRequest); | ||
} | ||
|
19 changes: 19 additions & 0 deletions
19
...main/java/com/keepgoing/keepserver/domain/damage/payload/request/DamageCreateRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package com.keepgoing.keepserver.domain.damage.payload.request; | ||
|
||
import jakarta.validation.constraints.NotBlank; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
@Builder | ||
public class DamageCreateRequest { | ||
@NotBlank(message = "Code cannot be blank") | ||
private String code; | ||
|
||
@NotBlank(message = "Issue type cannot be blank") | ||
private String issueType; | ||
|
||
@NotBlank(message = "Description cannot be blank") | ||
private final String description; | ||
|
||
} |
15 changes: 15 additions & 0 deletions
15
src/main/java/com/keepgoing/keepserver/domain/damage/payload/response/DamageResponseDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package com.keepgoing.keepserver.domain.damage.payload.response; | ||
|
||
import lombok.Builder; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
@Builder | ||
public record DamageResponseDto( | ||
Long idx, | ||
String code, | ||
String issueType, | ||
String description, | ||
LocalDateTime reportDate | ||
) { | ||
} |
38 changes: 38 additions & 0 deletions
38
src/main/java/com/keepgoing/keepserver/domain/damage/presentation/DamageController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package com.keepgoing.keepserver.domain.damage.presentation; | ||
|
||
import com.keepgoing.keepserver.domain.damage.payload.request.DamageCreateRequest; | ||
import com.keepgoing.keepserver.domain.damage.service.DamageService; | ||
import com.keepgoing.keepserver.global.common.BaseResponse; | ||
import io.swagger.v3.oas.annotations.Operation; | ||
import io.swagger.v3.oas.annotations.tags.Tag; | ||
import jakarta.validation.Valid; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
@Slf4j | ||
@Tag(name = "파손", description = " 관련 api 입니다.") | ||
@RequiredArgsConstructor | ||
@RestController | ||
@RequestMapping("/damage") | ||
public class DamageController { | ||
private final DamageService damageService; | ||
|
||
@Operation(summary = "파손 등록", description = "파손된 항목 등록을 진행합니다.") | ||
@PostMapping("/report") | ||
public BaseResponse reportDamage(@Valid @RequestBody DamageCreateRequest request) { | ||
return damageService.reportDamage(request); | ||
} | ||
|
||
@Operation(summary = "파손 정보 불러오기", description = "파손된 항목들을 불러옵니다.") | ||
@GetMapping("/all") | ||
public BaseResponse getAllDamages() { | ||
return damageService.getAllDamages(); | ||
} | ||
|
||
@Operation(summary = "파손 정보 삭제하기", description = "파손된 항목을 삭제합니다.") | ||
@DeleteMapping("/{id}") | ||
public BaseResponse deleteDamage(@PathVariable Long id) { | ||
return damageService.deleteDamage(id); | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/java/com/keepgoing/keepserver/domain/damage/repository/DamageRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.keepgoing.keepserver.domain.damage.repository; | ||
|
||
import com.keepgoing.keepserver.domain.damage.entity.Damage; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
|
||
@Repository | ||
public interface DamageRepository extends JpaRepository<Damage, Long> { | ||
boolean existsByCodeAndIssueType(String code, String issueType); | ||
} |
13 changes: 13 additions & 0 deletions
13
src/main/java/com/keepgoing/keepserver/domain/damage/service/DamageService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package com.keepgoing.keepserver.domain.damage.service; | ||
|
||
import com.keepgoing.keepserver.domain.damage.payload.request.DamageCreateRequest; | ||
import com.keepgoing.keepserver.global.common.BaseResponse; | ||
|
||
public interface DamageService { | ||
|
||
BaseResponse reportDamage(DamageCreateRequest request); | ||
|
||
BaseResponse getAllDamages(); | ||
|
||
BaseResponse deleteDamage(Long id); | ||
} |
65 changes: 65 additions & 0 deletions
65
src/main/java/com/keepgoing/keepserver/domain/damage/service/DamageServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
package com.keepgoing.keepserver.domain.damage.service; | ||
|
||
import com.keepgoing.keepserver.domain.damage.entity.Damage; | ||
import com.keepgoing.keepserver.domain.damage.mapper.DamageMapper; | ||
import com.keepgoing.keepserver.domain.damage.payload.request.DamageCreateRequest; | ||
import com.keepgoing.keepserver.domain.damage.payload.response.DamageResponseDto; | ||
import com.keepgoing.keepserver.domain.damage.repository.DamageRepository; | ||
import com.keepgoing.keepserver.global.common.BaseResponse; | ||
import com.keepgoing.keepserver.global.exception.damage.DamageError; | ||
import com.keepgoing.keepserver.global.exception.damage.DamageException; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
import java.util.List; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class DamageServiceImpl implements DamageService { | ||
|
||
private final DamageRepository damageRepository; | ||
private final DamageMapper damageMapper; | ||
|
||
@Override | ||
@Transactional | ||
public BaseResponse reportDamage(DamageCreateRequest request) { | ||
validateDuplicate(request.getCode(), request.getIssueType()); | ||
Damage damage = damageMapper.dtoToEntity(request); | ||
damageRepository.save(damage); | ||
return new BaseResponse(HttpStatus.OK, "파손 정보 등록 성공", damage); | ||
} | ||
|
||
@Override | ||
@Transactional(readOnly = true) | ||
public BaseResponse getAllDamages() { | ||
List<DamageResponseDto> damages = damageRepository.findAll().stream() | ||
.map(damageMapper::entityToDto) | ||
.toList(); | ||
if (damages.isEmpty()) { | ||
throw new DamageException(DamageError.INVALID_DAMAGE); | ||
} | ||
return new BaseResponse(HttpStatus.OK, "파손 정보 불러오기 성공", damages); | ||
} | ||
|
||
@Override | ||
@Transactional | ||
public BaseResponse deleteDamage(Long id) { | ||
findDamageById(id); | ||
damageRepository.deleteById(id); | ||
return new BaseResponse(HttpStatus.OK, "파손 정보 삭제 성공"); | ||
} | ||
|
||
private void validateDuplicate(String code, String issueType) { | ||
boolean isDuplicate = damageRepository.existsByCodeAndIssueType(code, issueType); | ||
if (isDuplicate) { | ||
throw new DamageException(DamageError.DUPLICATE); | ||
} | ||
} | ||
|
||
private void findDamageById(Long id) { | ||
damageRepository.findById(id) | ||
.orElseThrow(() -> new DamageException(DamageError.INVALID_DAMAGE)); | ||
} | ||
} |
15 changes: 15 additions & 0 deletions
15
src/main/java/com/keepgoing/keepserver/global/exception/damage/DamageError.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package com.keepgoing.keepserver.global.exception.damage; | ||
|
||
import com.keepgoing.keepserver.global.exception.error.ErrorProperty; | ||
import lombok.Getter; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.HttpStatus; | ||
|
||
@Getter | ||
@RequiredArgsConstructor | ||
public enum DamageError implements ErrorProperty { | ||
INVALID_DAMAGE(HttpStatus.NOT_FOUND, "파손 정보가 없습니다."), | ||
DUPLICATE(HttpStatus.NOT_FOUND, "이미 같은 문제로 신고된 기기입니다."); | ||
private final HttpStatus status; | ||
private final String message; | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/com/keepgoing/keepserver/global/exception/damage/DamageException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.keepgoing.keepserver.global.exception.damage; | ||
|
||
import com.keepgoing.keepserver.global.exception.BusinessException; | ||
|
||
public class DamageException extends BusinessException { | ||
private static final DamageException INVALID_DAMAGE = new DamageException(DamageError.INVALID_DAMAGE); | ||
private static final DamageException DUPLICATE = new DamageException(DamageError.DUPLICATE); | ||
|
||
public DamageException(DamageError error) { | ||
super(error); | ||
} | ||
|
||
public static DamageException invalidDamage() { | ||
return INVALID_DAMAGE; | ||
} | ||
|
||
public static DamageException duplicate() { | ||
return DUPLICATE; | ||
} | ||
} |