Skip to content

Commit

Permalink
✅ 뱃지 구현 완료
Browse files Browse the repository at this point in the history
  • Loading branch information
tjdals4716 committed Aug 4, 2024
1 parent d4a5e33 commit 6e8e85a
Show file tree
Hide file tree
Showing 13 changed files with 135 additions and 187 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.example.MangoWafflee.Controller;

import com.example.MangoWafflee.DTO.BadgeDTO;
import com.example.MangoWafflee.DTO.UserBadgeDTO;
import com.example.MangoWafflee.Enum.StatusEnum;
import com.example.MangoWafflee.Service.BadgeService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
Expand All @@ -17,9 +15,10 @@ public class BadgeController {
private final BadgeService badgeService;

//뱃지 생성
@PostMapping
public BadgeDTO addBadge(@RequestBody BadgeDTO badgeDTO) {
return badgeService.addBadge(badgeDTO);
@PostMapping("/add/{userId}")
public ResponseEntity<BadgeDTO> addBadge(@RequestBody BadgeDTO badgeDTO, @PathVariable Long userId) {
BadgeDTO createdBadge = badgeService.addBadge(badgeDTO, userId);
return ResponseEntity.ok(createdBadge);
}

//뱃지 전체 조회
Expand All @@ -34,22 +33,16 @@ public BadgeDTO getBadgeById(@PathVariable Long id) {
return badgeService.getBadgeById(id);
}

//유저 뱃지 생성
@PostMapping("/userbadge")
public UserBadgeDTO createUserBadge(@RequestBody UserBadgeDTO userBadgeDTO) {
return badgeService.createUserBadge(userBadgeDTO);
}

//해당 유저 전체 뱃지 조회
@GetMapping("/userbadges/{userId}")
public List<UserBadgeDTO> getUserBadges(@PathVariable Long userId) {
@GetMapping("/user/{userId}")
public List<BadgeDTO> getUserBadges(@PathVariable Long userId) {
return badgeService.getUserBadges(userId);
}

//유저 뱃지 상태 업데이트
@PutMapping("/userbadge/{userBadgeId}")
public ResponseEntity<UserBadgeDTO> updateUserBadgeStatus(@PathVariable Long userBadgeId, @RequestBody UserBadgeDTO userBadgeDTO) {
UserBadgeDTO updatedUserBadge = badgeService.updateUserBadgeStatus(userBadgeId, userBadgeDTO.getIsAchieved());
@PutMapping("/user/{badgeId}")
public ResponseEntity<BadgeDTO> updateUserBadgeStatus(@PathVariable Long badgeId, @RequestBody BadgeDTO badgeDTO) {
BadgeDTO updatedUserBadge = badgeService.updateUserBadgeStatus(badgeId, badgeDTO.getIsAchieved());
return ResponseEntity.ok(updatedUserBadge);
}
}
13 changes: 11 additions & 2 deletions src/main/java/com/example/MangoWafflee/DTO/BadgeDTO.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.example.MangoWafflee.DTO;

import com.example.MangoWafflee.Entity.BadgeEntity;
import com.example.MangoWafflee.Enum.StatusEnum;
import lombok.*;

import java.time.LocalDate;

@NoArgsConstructor
@AllArgsConstructor
@Getter
Expand All @@ -11,15 +14,21 @@
public class BadgeDTO {
private Long id;
private String title;
private StatusEnum isAchieved; // 개인 기록 달성 여부
private LocalDate achievedAt; // 개인 기록 달성 시간
private int requiredSmileCount;

public static BadgeDTO entityToDto(BadgeEntity badgeEntity) {
return new BadgeDTO(
badgeEntity.getId(),
badgeEntity.getTitle()
badgeEntity.getTitle(),
badgeEntity.getIsAchieved(),
badgeEntity.getAchievedAt(),
badgeEntity.getRequiredSmileCount()
);
}

public BadgeEntity dtoToEntity() {
return new BadgeEntity(id, title);
return new BadgeEntity(id, title, isAchieved, achievedAt, requiredSmileCount, null);
}
}
36 changes: 0 additions & 36 deletions src/main/java/com/example/MangoWafflee/DTO/UserBadgeDTO.java

This file was deleted.

20 changes: 17 additions & 3 deletions src/main/java/com/example/MangoWafflee/DTO/UserDTO.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package com.example.MangoWafflee.DTO;

import com.example.MangoWafflee.Entity.BadgeEntity;
import com.example.MangoWafflee.Entity.UserEntity;
import lombok.*;

import java.util.List;
import java.util.stream.Collectors;
import java.util.Collections;

@NoArgsConstructor
@AllArgsConstructor
@Getter
Expand All @@ -18,8 +23,12 @@ public class UserDTO {
private String email;
private String provider;
private int smilecount;
private List<BadgeDTO> badges;

public static UserDTO entityToDto(UserEntity userEntity) {
List<BadgeDTO> badgeDTOs = userEntity.getBadges() != null
? userEntity.getBadges().stream().map(BadgeDTO::entityToDto).collect(Collectors.toList())
: Collections.emptyList();
return new UserDTO(
userEntity.getId(),
userEntity.getUid(),
Expand All @@ -29,12 +38,17 @@ public static UserDTO entityToDto(UserEntity userEntity) {
userEntity.getImage(),
userEntity.getEmail(),
userEntity.getProvider(),
userEntity.getSmilecount()
userEntity.getSmilecount(),
badgeDTOs
);
}

public UserEntity dtoToEntity() {
return new UserEntity(id, uid, password, name, nickname, image, email, provider, smilecount);
UserEntity userEntity = new UserEntity(id, uid, password, name, nickname, image, email, provider, smilecount);
List<BadgeEntity> badgeEntities = badges != null
? badges.stream().map(BadgeDTO::dtoToEntity).collect(Collectors.toList())
: Collections.emptyList();
userEntity.setBadges(badgeEntities);
return userEntity;
}
}

12 changes: 11 additions & 1 deletion src/main/java/com/example/MangoWafflee/Entity/BadgeEntity.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.example.MangoWafflee.Entity;

import com.example.MangoWafflee.Enum.StatusEnum;
import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDate;

@Setter
@Getter
@AllArgsConstructor
Expand All @@ -14,5 +17,12 @@
public class BadgeEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String title; // 뱃지 제목
private StatusEnum isAchieved; // 뱃지 달성 여부
private LocalDate achievedAt; // 뱃지 달성 시간
private int requiredSmileCount; // 필요 웃음 개수

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private UserEntity user;
}
31 changes: 0 additions & 31 deletions src/main/java/com/example/MangoWafflee/Entity/UserBadgeEntity.java

This file was deleted.

28 changes: 27 additions & 1 deletion src/main/java/com/example/MangoWafflee/Entity/UserEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.List;

@Entity(name = "users")
@NoArgsConstructor
Expand All @@ -29,6 +30,31 @@ public class UserEntity implements UserDetails {
private String provider;
private int smilecount = 0;

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<BadgeEntity> badges;

//동일 유저가 중복해서 무언가를 하지 못하게 할때 엔티티에 생성자를 작성하여 파라미터를 일치시킴 (이렇게 하면 DTO 오류 해결) => 소웨공 참고
public UserEntity(Long id, String uid, String password, String name, String nickname, String image, String email, String provider, int smilecount) {
this.id = id;
this.uid = uid;
this.password = password;
this.name = name;
this.nickname = nickname;
this.image = image;
this.email = email;
this.provider = provider;
this.smilecount = smilecount;
this.badges = new ArrayList<>();
}

//유저 엔티티와 뱃지 엔티티 간의 양방향 관계를 적절히 설정하기 위해 사용
public void setBadges(List<BadgeEntity> badges) {
this.badges = badges;
if (badges != null) {
badges.forEach(badge -> badge.setUser(this));
}
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
//사용자 권한 설정, 필요에 따라 변경할 것
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
import java.util.List;

public interface BadgeRepository extends JpaRepository<BadgeEntity, Long> {

List<BadgeEntity> findByUserId(Long userId);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package com.example.MangoWafflee.Service;

import com.example.MangoWafflee.DTO.BadgeDTO;
import com.example.MangoWafflee.DTO.UserBadgeDTO;
import com.example.MangoWafflee.Enum.StatusEnum;

import java.util.List;

public interface BadgeService {
BadgeDTO addBadge(BadgeDTO badgeDTO);
BadgeDTO addBadge(BadgeDTO badgeDTO, Long userId);
List<BadgeDTO> getBadges();
BadgeDTO getBadgeById(Long id);
List<UserBadgeDTO> getUserBadges(Long userId);
UserBadgeDTO updateUserBadgeStatus(Long userBadgeId, StatusEnum status);
UserBadgeDTO createUserBadge(UserBadgeDTO userBadgeDTO);
List<BadgeDTO> getUserBadges(Long userId);
BadgeDTO updateUserBadgeStatus(Long badgeId, StatusEnum status);
void checkAndUpdateBadgeStatus(Long userId);
}
Loading

0 comments on commit 6e8e85a

Please sign in to comment.