Add address book management functionality

This commit is contained in:
2024-12-19 17:07:08 +08:00
parent 96c6308c52
commit 7bfbd10b9d
6 changed files with 302 additions and 1 deletions

View File

@@ -0,0 +1,93 @@
package com.sky.controller.user;
import com.sky.entity.AddressBook;
import com.sky.result.Result;
import com.sky.service.AddressBookService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user/addressBook")
@Slf4j
@Api(tags = "AddressBook-Controller")
public class AddressBookController {
@Autowired
private AddressBookService addressBookService;
/**
* add a new address
* @param addressBook
* @return
*/
@PostMapping
public Result add(@RequestBody AddressBook addressBook){
log.info("add new address book");
addressBookService.addAddressBook(addressBook);
return Result.success();
}
/**
* list address of current user
* @return
*/
@GetMapping("/list")
public Result<List<AddressBook>> list(){
log.info("list address of current user");
List<AddressBook> list = addressBookService.listAddress();
return Result.success(list);
}
/**
* list default address of current user
* @return
*/
@GetMapping("/default")
public Result<AddressBook> listDefault(){
log.info("list default address of current user");
AddressBook addressBook = addressBookService.listDefault();
return Result.success(addressBook);
}
/**
* list by addressId
* @param id
* @return
*/
@GetMapping("/{id}")
public Result<AddressBook> listByAddressId(@PathVariable Long id){
log.info("list address by id: {}", id);
AddressBook addressBook = addressBookService.listByAddressId(id);
return Result.success(addressBook);
}
/**
* update address
* @param addressBook
* @return
*/
@PutMapping
public Result updateAddress(@RequestBody AddressBook addressBook){
log.info("update address");
addressBookService.updateAddress(addressBook);
return Result.success();
}
@DeleteMapping
public Result deleteAddress(Long id){
log.info("delete address");
addressBookService.deleteAddress(id);
return Result.success();
}
@PutMapping("/default")
public Result setDefault(@RequestBody AddressBook addressBook){
log.info("set default address");
addressBookService.setDefault(addressBook);
return Result.success();
}
}

View File

@@ -15,7 +15,7 @@ import java.util.List;
@RestController
@RequestMapping("/user/shoppingCart")
@Slf4j
@Api(tags = "shoppingCart-controller")
@Api(tags = "ShoppingCart-Controller")
public class ShoppingCartController {
@Autowired

View File

@@ -0,0 +1,27 @@
package com.sky.mapper;
import com.sky.entity.AddressBook;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface AddressBookMapper {
@Insert("insert into sky_take_out.address_book(user_id, consignee, sex, phone, province_code, province_name, city_code, city_name, district_code, district_name, detail, label, is_default) " +
"values (#{userId},#{consignee},#{sex},#{phone},#{provinceCode},#{provinceName},#{cityCode},#{cityName},#{districtCode},#{districtName},#{detail},#{label},#{isDefault})")
void insert(AddressBook addressBook);
List<AddressBook> list(AddressBook addressBook);
void update(AddressBook addressBook);
@Delete("delete from sky_take_out.address_book where id = #{id}")
void deleteById(Long id);
@Update("update sky_take_out.address_book set is_default = 0 where user_id = #{userId}")
void updateNotDefault(Long userId);
@Update("update sky_take_out.address_book set is_default = 1 where id = #{id}")
void updateDefault(Long id);
}

View File

@@ -0,0 +1,52 @@
package com.sky.service;
import com.sky.entity.AddressBook;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public interface AddressBookService {
/**
* Add new address book
* @param addressBook
*/
void addAddressBook(AddressBook addressBook);
/**
* list address of current user
* @return
*/
List<AddressBook> listAddress();
/**
* show default address
* @return
*/
AddressBook listDefault();
/**
* list by address id
* @param addressId
* @return
*/
AddressBook listByAddressId(Long addressId);
/**
* update address
* @param addressBook
*/
void updateAddress(AddressBook addressBook);
/**
* delete address
*/
void deleteAddress(Long id);
/**
* set default address
* @param addressBook
*/
void setDefault(AddressBook addressBook);
}

View File

@@ -0,0 +1,90 @@
package com.sky.service.impl;
import com.sky.context.BaseContext;
import com.sky.entity.AddressBook;
import com.sky.mapper.AddressBookMapper;
import com.sky.service.AddressBookService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Slf4j
public class AddressBookServiceImpl implements AddressBookService {
@Autowired
private AddressBookMapper addressBookMapper;
@Override
public void addAddressBook(AddressBook addressBook) {
Long userId = BaseContext.getCurrentId();
addressBook.setUserId(userId);
List<AddressBook> list = addressBookMapper.list(addressBook);
addressBook.setIsDefault(0);
addressBookMapper.insert(addressBook);
}
/**
* list address of current user
*
* @return
*/
@Override
public List<AddressBook> listAddress() {
Long userId = BaseContext.getCurrentId();
AddressBook addressBook = AddressBook.builder()
.userId(userId)
.build();
return addressBookMapper.list(addressBook);
}
/**
* show default address
*
* @return
*/
@Override
public AddressBook listDefault() {
AddressBook addressBook = AddressBook.builder()
.userId(BaseContext.getCurrentId())
.isDefault(1)
.build();
List<AddressBook> list = addressBookMapper.list(addressBook);
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}
@Override
public AddressBook listByAddressId(Long addressId) {
AddressBook addressBook = AddressBook.builder()
.id(addressId)
.build();
List<AddressBook> list = addressBookMapper.list(addressBook);
return list.get(0);
}
@Override
public void updateAddress(AddressBook addressBook) {
addressBookMapper.update(addressBook);
}
@Override
public void deleteAddress(Long id) {
addressBookMapper.deleteById(id);
}
@Override
@Transactional
public void setDefault(AddressBook addressBook) {
//set all the address of current user not default
Long userId = BaseContext.getCurrentId();
addressBookMapper.updateNotDefault(userId);
//set current address default
addressBookMapper.updateDefault(addressBook.getId());
}
}

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sky.mapper.AddressBookMapper">
<update id="update">
update sky_take_out.address_book
set city_name = #{cityName},
city_code = #{cityCode},
consignee = #{consignee},
detail = #{detail},
district_code = #{districtCode},
district_name = #{districtName},
label = #{label},
phone = #{phone},
province_code = #{provinceCode},
province_name = #{provinceName},
sex = #{sex},
<if test="isDefault != null">
is_default = #{isDefault},
</if>
where id = #{id}
</update>
<select id="list" resultType="com.sky.entity.AddressBook">
select * from sky_take_out.address_book
<where>
<if test="userId != null">
and user_id = #{userId}
</if>
<if test="isDefault != null">
and is_default = #{isDefault}
</if>
<if test="id != null">
and id = #{id}
</if>
</where>
</select>
</mapper>