AchievementController.java
package ntnu.idatt2016.v233.SmartMat.controller.group;
import lombok.AllArgsConstructor;
import ntnu.idatt2016.v233.SmartMat.entity.group.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
*/
@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);
}
}