AchievementController.java
package org.petify.backend.controllers;
import org.petify.backend.models.UserAchievement;
import org.petify.backend.services.AchievementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/user/achievements")
public class AchievementController {
@Autowired
private AchievementService achievementService;
@GetMapping("/")
public ResponseEntity<List<UserAchievement>> getUserAchievements() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
List<UserAchievement> achievements = achievementService.getUserAchievements(username);
return ResponseEntity.ok(achievements);
}
@GetMapping("/level")
public ResponseEntity<Map<String, Object>> getUserLevelInfo() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
Map<String, Object> levelInfo = achievementService.getUserLevelInfo(username);
return ResponseEntity.ok(levelInfo);
}
@PostMapping("/{achievementId}/progress")
public ResponseEntity<UserAchievement> trackAchievementProgress(
@PathVariable Long achievementId,
@RequestParam int progress) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
UserAchievement userAchievement = achievementService.trackAchievementProgress(
username, achievementId, progress);
return ResponseEntity.ok(userAchievement);
}
@PostMapping("/track-like")
public ResponseEntity<Void> trackLikeProgress() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
achievementService.trackLikeAchievements(username);
return ResponseEntity.ok().build();
}
@PostMapping("/track-support")
public ResponseEntity<Void> trackSupportProgress() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
achievementService.trackSupportAchievements(username);
return ResponseEntity.ok().build();
}
@PostMapping("/track-volunteer")
public ResponseEntity<Void> trackVolunteerProgress() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
achievementService.trackVolunteerAchievements(username);
return ResponseEntity.ok().build();
}
@PostMapping("/track-adoption")
public ResponseEntity<Void> trackAdoptionProgress() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
achievementService.trackAdoptionAchievements(username);
return ResponseEntity.ok().build();
}
@PostMapping("/track-adoption/{username}")
public ResponseEntity<Void> trackAdoptionProgressForUser(@PathVariable String username) {
achievementService.trackAdoptionAchievements(username);
return ResponseEntity.ok().build();
}
@PostMapping("/track-like/{username}")
public ResponseEntity<Void> trackLikeProgressForUser(@PathVariable String username) {
achievementService.trackLikeAchievements(username);
return ResponseEntity.ok().build();
}
@PostMapping("/track-support/{username}")
public ResponseEntity<Void> trackSupportProgressForUser(@PathVariable String username) {
achievementService.trackSupportAchievements(username);
return ResponseEntity.ok().build();
}
@PostMapping("/add-donation-xp")
public ResponseEntity<Void> addDonationExperiencePoints(@RequestParam int xpPoints) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
achievementService.addExperiencePointsForDonation(username, xpPoints);
return ResponseEntity.ok().build();
}
@PostMapping("/add-donation-xp/{username}")
public ResponseEntity<Void> addDonationExperiencePointsForUser(
@PathVariable String username,
@RequestParam int xpPoints) {
achievementService.addExperiencePointsForDonation(username, xpPoints);
return ResponseEntity.ok().build();
}
}