GoodsService.java
Java/Baasid/src/main/java/com/baasid/service/GoodsService.java
package com.baasid.service;
import com.baasid.dto.GoodsRequest;
import com.baasid.dto.GoodsResponse;
import com.baasid.entity.Goods;
import com.baasid.entity.SystemUser;
import com.baasid.exception.ResourceNotFoundException;
import com.baasid.repository.GoodsRepository;
import com.baasid.repository.SystemUserRepository;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.UUID;
/**
* 商品領域邏輯:透過 JPA Repository 存取 {@link Goods},並組裝對外 {@link GoodsResponse}。
*/
@Service
public class GoodsService {
private final GoodsRepository goodsRepository;
private final SystemUserRepository userRepository;
public GoodsService(GoodsRepository goodsRepository, SystemUserRepository userRepository) {
this.goodsRepository = goodsRepository;
this.userRepository = userRepository;
}
/**
* 新增商品:{@code cr_user} 與 {@code up_user} 皆為 {@code userId} 對應之使用者。
*/
@Transactional
public GoodsResponse addGoods(GoodsRequest request, @NonNull UUID userId) {
// getReferenceById:僅建立代理、不立即 SELECT,適合只設關聯欄位
SystemUser user = userRepository.getReferenceById(userId);
Goods goods = new Goods();
goods.setName(request.goodsName());
goods.setCrUser(user);
goods.setUpUser(user);
goods = goodsRepository.save(goods);
return toResponse(goods);
}
/** 查詢全部並轉成 DTO 列表。 */
@Transactional(readOnly = true)
public List<GoodsResponse> getAllGoods() {
return goodsRepository.findAll().stream()
.map(this::toResponse)
.toList();
}
/** 依 ID 查單筆;不存在則 {@link ResourceNotFoundException}(404)。 */
@Transactional(readOnly = true)
public GoodsResponse getGoodsById(@NonNull UUID id) {
Goods goods = goodsRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("商品不存在: " + id));
return toResponse(goods);
}
/**
* 更新商品名稱與最後更新者;{@code cr_user}/建立時間不變。
*/
@Transactional
public GoodsResponse updateGoods(@NonNull UUID id, GoodsRequest request, @NonNull UUID userId) {
Goods goods = goodsRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("商品不存在: " + id));
SystemUser user = userRepository.getReferenceById(userId);
goods.setName(request.goodsName());
goods.setUpUser(user);
goods = goodsRepository.save(goods);
return toResponse(goods);
}
/** 存在則刪除;不存在則與查詢一致拋 {@link ResourceNotFoundException}。 */
@Transactional
public void deleteGoods(@NonNull UUID id) {
if (!goodsRepository.existsById(id)) {
throw new ResourceNotFoundException("商品不存在: " + id);
}
goodsRepository.deleteById(id);
}
private GoodsResponse toResponse(Goods goods) {
return new GoodsResponse(goods.getId().toString(), goods.getName());
}
}
相关文章
init.sql
init.sql — sql source code from the Java learning materials (Java/Baasid/sql/init.sql).
阅读文章 →BaasidApplication.java
BaasidApplication.java — java source code from the Java learning materials (Java/Baasid/src/main/java/com/baasid/BaasidApplication.java).
阅读文章 →DataInitializer.java
DataInitializer.java — java source code from the Java learning materials (Java/Baasid/src/main/java/com/baasid/config/DataInitializer.java).
阅读文章 →OpenApiConfig.java
OpenApiConfig.java — java source code from the Java learning materials (Java/Baasid/src/main/java/com/baasid/config/OpenApiConfig.java).
阅读文章 →SecurityConfig.java
SecurityConfig.java — java source code from the Java learning materials (Java/Baasid/src/main/java/com/baasid/config/SecurityConfig.java).
阅读文章 →AuthController.java
AuthController.java — java source code from the Java learning materials (Java/Baasid/src/main/java/com/baasid/controller/AuthController.java).
阅读文章 →