package com.flower.user; import com.flower.common.ApiException; import com.flower.common.ApiResponse; import com.flower.security.AuthContext; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/addresses") public class AddressController { private final AddressRepository addressRepository; public AddressController(AddressRepository addressRepository) { this.addressRepository = addressRepository; } @GetMapping public ApiResponse> list() { return ApiResponse.ok(addressRepository.findByUserId(AuthContext.get().getId())); } @PostMapping public ApiResponse
create(@RequestBody Address address) { address.setUserId(AuthContext.get().getId()); if (Boolean.TRUE.equals(address.getIsDefault())) { clearDefault(); } return ApiResponse.ok(addressRepository.save(address)); } @PutMapping("/{id}") public ApiResponse
update(@PathVariable Long id, @RequestBody Address address) { Address exists = addressRepository.findById(id) .orElseThrow(() -> new ApiException(404, "地址不存在")); if (!exists.getUserId().equals(AuthContext.get().getId())) { throw new ApiException(403, "无权限"); } address.setId(id); address.setUserId(exists.getUserId()); if (Boolean.TRUE.equals(address.getIsDefault())) { clearDefault(); } return ApiResponse.ok(addressRepository.save(address)); } @DeleteMapping("/{id}") public ApiResponse delete(@PathVariable Long id) { Address exists = addressRepository.findById(id) .orElseThrow(() -> new ApiException(404, "地址不存在")); if (!exists.getUserId().equals(AuthContext.get().getId())) { throw new ApiException(403, "无权限"); } addressRepository.deleteById(id); return ApiResponse.ok(null); } private void clearDefault() { List
addresses = addressRepository.findByUserId(AuthContext.get().getId()); for (Address item : addresses) { if (Boolean.TRUE.equals(item.getIsDefault())) { item.setIsDefault(false); addressRepository.save(item); } } } }