69 lines
2.3 KiB
Java
69 lines
2.3 KiB
Java
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<Address>> list() {
|
|
return ApiResponse.ok(addressRepository.findByUserId(AuthContext.get().getId()));
|
|
}
|
|
|
|
@PostMapping
|
|
public ApiResponse<Address> 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<Address> 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<Void> 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<Address> addresses = addressRepository.findByUserId(AuthContext.get().getId());
|
|
for (Address item : addresses) {
|
|
if (Boolean.TRUE.equals(item.getIsDefault())) {
|
|
item.setIsDefault(false);
|
|
addressRepository.save(item);
|
|
}
|
|
}
|
|
}
|
|
}
|