diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/user/AchievementController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/user/AchievementController.java new file mode 100644 index 0000000000000000000000000000000000000000..1504a90a825224da0926d12195e8ddea3f3709aa --- /dev/null +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/user/AchievementController.java @@ -0,0 +1,50 @@ +package ntnu.idatt2016.v233.SmartMat.controller.user; + +import lombok.AllArgsConstructor; +import ntnu.idatt2016.v233.SmartMat.entity.user.Achievement; +import ntnu.idatt2016.v233.SmartMat.service.user.AchievementService; +import org.springframework.http.ResponseEntity; +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.RestController; + +import java.util.List; +import java.util.Optional; + +/** + * Achievement API endpoint, providing endpoints for fetching an achievement by name, + * and fetching all achievements stored in the database + * + * @author Anders + * @version 1.0 + * @sinc 20.04.2023 + */ + +@AllArgsConstructor +@RestController +@RequestMapping("/api/achievements") +public class AchievementController { + private final AchievementService achievementService; + + /** + * Gets an achievement from the database + * @param achievementName name of achievement to get + * @return a ResponseEntity containing the achievement if it exists, or a 404 if it doesn't + */ + @GetMapping("/achievement/{achievementName}") + public ResponseEntity<Achievement> getAchievement(@PathVariable("achievementName") String achievementName){ + Optional<Achievement> achievement = achievementService.getAchievement(achievementName); + return achievement.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build()); + } + + /** + * Gets all achievements from the database + * @return a ResponseEntity containing a list of all achievements, or a 404 if there are none + */ + @GetMapping("/all") + public ResponseEntity<List<Achievement>> getAchievements(){ + List<Achievement> achievements = achievementService.getAchievements(); + return achievements.isEmpty() ? ResponseEntity.notFound().build() : ResponseEntity.ok(achievements); + } +} diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/user/AchievementService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/user/AchievementService.java index f0a20695d80938d6c2e28291b331f7dbb2099b1f..3651d4814c7ab009fb65d259d81081cce3ee5c9b 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/user/AchievementService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/user/AchievementService.java @@ -5,6 +5,7 @@ import ntnu.idatt2016.v233.SmartMat.entity.user.Achievement; import ntnu.idatt2016.v233.SmartMat.repository.user.AchievementRepository; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Optional; /** @@ -21,18 +22,6 @@ public class AchievementService { private AchievementRepository achievementRepository; - /** - * Adds an achievement to the database - * @param achievementName name of achievement to add - * @param achievementDescription description of achievement to add - */ - public void addAchievement(String achievementName, String achievementDescription){ - achievementRepository.save(Achievement.builder() - .achievementName(achievementName) - .achievementDescription(achievementDescription) - .build()); - } - /** * Gets an achievement from the database * @param achievementName name of achievement to get @@ -41,4 +30,8 @@ public class AchievementService { public Optional<Achievement> getAchievement(String achievementName){ return achievementRepository.findByAchievementName(achievementName); } + + public List<Achievement> getAchievements(){ + return achievementRepository.findAll(); + } }