Reusable annotation for planner-only endpoints. Uses a HandlerInterceptor that resolves the household role from the authenticated user and throws 403 if the role doesn't match. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
36 lines
1.1 KiB
Java
36 lines
1.1 KiB
Java
package com.recipeapp.recipe;
|
|
|
|
import com.recipeapp.common.ResourceNotFoundException;
|
|
import com.recipeapp.household.HouseholdMemberRepository;
|
|
import com.recipeapp.household.entity.HouseholdMember;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.UUID;
|
|
|
|
@Component
|
|
public class HouseholdResolver {
|
|
|
|
private final HouseholdMemberRepository householdMemberRepository;
|
|
|
|
public HouseholdResolver(HouseholdMemberRepository householdMemberRepository) {
|
|
this.householdMemberRepository = householdMemberRepository;
|
|
}
|
|
|
|
public UUID resolve(String userEmail) {
|
|
return findMembership(userEmail).getHousehold().getId();
|
|
}
|
|
|
|
public UUID resolveUserId(String userEmail) {
|
|
return findMembership(userEmail).getUser().getId();
|
|
}
|
|
|
|
public String resolveRole(String userEmail) {
|
|
return findMembership(userEmail).getRole();
|
|
}
|
|
|
|
private HouseholdMember findMembership(String userEmail) {
|
|
return householdMemberRepository.findByUserEmailIgnoreCase(userEmail)
|
|
.orElseThrow(() -> new ResourceNotFoundException("User is not in a household"));
|
|
}
|
|
}
|