Skip to content

Commit 26cd552

Browse files
authored
Merge pull request #26 from Nexters/feat/7-user-level-selection
feat: 온보딩 시 유저의 예상 티어를 선택하는 API 구현
2 parents 2b320fa + 02138fa commit 26cd552

File tree

13 files changed

+219
-5
lines changed

13 files changed

+219
-5
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.climbup.climbup.tier.controller;
2+
3+
import com.climbup.climbup.tier.dto.response.TierResponse;
4+
import com.climbup.climbup.tier.service.TierService;
5+
import io.swagger.v3.oas.annotations.Operation;
6+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.RequestMapping;
11+
import org.springframework.web.bind.annotation.RestController;
12+
13+
import java.util.List;
14+
15+
@RestController
16+
@RequestMapping("/tiers")
17+
@RequiredArgsConstructor
18+
public class TierController {
19+
20+
private final TierService tierService;
21+
22+
@Operation(summary = "모든 티어 반환", description = "존재하는 모든 티어의 리스트를 반환합니다")
23+
@ApiResponse(responseCode = "200", description = "성공적으로 모든 티어 종류의 리스트를 반환")
24+
@GetMapping
25+
public ResponseEntity<List<TierResponse>> getAllTierList() {
26+
return ResponseEntity.ok(tierService.getAllTiers());
27+
}
28+
29+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.climbup.climbup.tier.dto.response;
2+
3+
import com.climbup.climbup.tier.entity.Tier;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
8+
@Data
9+
@Builder
10+
public class TierResponse {
11+
12+
@Schema(description = "티어 id")
13+
private Long id;
14+
15+
@Schema(description = "티어 이름")
16+
private String name;
17+
18+
@Schema(description = "티어 이미지 주소")
19+
private String imageUrl;
20+
21+
public static TierResponse toDto(Tier tier) {
22+
return TierResponse.builder()
23+
.id(tier.getId())
24+
.name(tier.getName())
25+
.imageUrl(tier.getImageUrl())
26+
.build();
27+
}
28+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.climbup.climbup.tier.repository;
2+
3+
import com.climbup.climbup.tier.entity.Tier;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
8+
@Repository
9+
public interface TierRepository extends JpaRepository<Tier, Long> {
10+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.climbup.climbup.tier.service;
2+
3+
import com.climbup.climbup.tier.dto.response.TierResponse;
4+
import com.climbup.climbup.tier.entity.Tier;
5+
6+
import java.util.List;
7+
8+
public interface TierService {
9+
List<TierResponse> getAllTiers();
10+
11+
Tier getTierById(Long id);
12+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.climbup.climbup.tier.service;
2+
3+
import com.climbup.climbup.tier.dto.response.TierResponse;
4+
import com.climbup.climbup.tier.entity.Tier;
5+
import com.climbup.climbup.tier.repository.TierRepository;
6+
import jakarta.transaction.Transactional;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Service;
9+
10+
import java.util.List;
11+
12+
@Service
13+
@RequiredArgsConstructor
14+
public class TierServiceImpl implements TierService {
15+
16+
private final TierRepository tierRepository;
17+
18+
@Override
19+
@Transactional
20+
public List<TierResponse> getAllTiers() {
21+
List<Tier> tiers = tierRepository.findAll();
22+
23+
return tiers.stream().map(TierResponse::toDto).toList();
24+
}
25+
26+
@Override
27+
@Transactional
28+
public Tier getTierById(Long id){
29+
return tierRepository.findById(id).orElseThrow();
30+
}
31+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.climbup.climbup.user.controller;
2+
3+
import com.climbup.climbup.tier.entity.Tier;
4+
import com.climbup.climbup.tier.service.TierService;
5+
import com.climbup.climbup.user.dto.request.SetUserTierRequest;
6+
import com.climbup.climbup.user.service.UserService;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.PostMapping;
10+
import org.springframework.web.bind.annotation.RequestBody;
11+
import org.springframework.web.bind.annotation.RequestMapping;
12+
import org.springframework.web.bind.annotation.RestController;
13+
14+
@RestController
15+
@RequestMapping("/users")
16+
@RequiredArgsConstructor
17+
public class UserController {
18+
19+
20+
private final UserService userService;
21+
private final TierService tierService;
22+
23+
@PostMapping("/set-tier")
24+
public ResponseEntity<Void> setUserTier(@RequestBody() SetUserTierRequest request) {
25+
Tier tier = tierService.getTierById(request.getTierId());
26+
userService.setUserTier(tier);
27+
28+
return ResponseEntity.accepted().build();
29+
}
30+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.climbup.climbup.user.dto.request;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotNull;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
8+
@Data
9+
@Builder
10+
public class SetUserTierRequest {
11+
12+
@NotNull
13+
@Schema(name = "tierId", description = "티어 id")
14+
private Long tierId;
15+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.climbup.climbup.user.exception;
2+
3+
public class UserOnboardingAlreadyCompleteException extends RuntimeException {
4+
public UserOnboardingAlreadyCompleteException(String message) {
5+
super(message);
6+
}
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.climbup.climbup.user.repository;
2+
3+
import com.climbup.climbup.user.entity.User;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface UserRepository extends JpaRepository<User, Long> {}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.climbup.climbup.user.service;
2+
3+
import com.climbup.climbup.tier.entity.Tier;
4+
import com.climbup.climbup.user.entity.User;
5+
import org.springframework.stereotype.Service;
6+
7+
@Service
8+
public interface UserService {
9+
User getUserById(Long id);
10+
11+
void setUserTier(Tier tier);
12+
}

0 commit comments

Comments
 (0)