/*
 * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
 *
 * https://www.mall4j.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.sys.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yami.shop.sys.dao.SysConfigMapper;
import com.yami.shop.sys.model.SysConfig;
import com.yami.shop.sys.service.SysConfigService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

/**
 * SysConfigServiceImpl类是系统配置服务接口（SysConfigService）的具体实现类，
 * 它继承自MyBatis-Plus提供的ServiceImpl类，用于处理与系统配置相关的业务逻辑，
 * 并通过依赖注入获取对应的数据库访问层（SysConfigMapper）来操作数据库中的系统配置数据。
 *
 * @author lgh
 */
@Service("sysConfigService")
@AllArgsConstructor
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements SysConfigService {

    /**
     * 通过构造函数注入的方式引入SysConfigMapper，用于调用其定义的数据库操作方法，
     * 实现与系统配置数据表的交互，如查询、更新、删除等操作。
     */
    private final SysConfigMapper sysConfigMapper;

    /**
     * 根据配置的键（key）更新对应配置项的值（value）的方法。
     * 此方法会调用SysConfigMapper中的相应方法，将指定键对应的配置值在数据库中更新为新传入的值。
     *
     * @param key 要更新的配置项的键，用于在数据库中定位到具体的配置记录，确保更新的是正确的配置项。
     * @param value 要更新为的新配置值，将替换数据库中对应键的旧配置值。
     */
    @Override
    public void updateValueByKey(String key, String value) {
        sysConfigMapper.updateValueByKey(key, value);
    }

    /**
     * 批量删除系统配置信息的方法。
     * 它借助SysConfigMapper中的对应方法，依据传入的配置信息的唯一标识符数组（ids），
     * 在数据库中批量删除相应的系统配置记录。
     *
     * @param ids 要删除的系统配置信息的唯一标识符数组，每个元素对应一条要删除的配置记录在数据库中的主键值。
     */
    @Override
    public void deleteBatch(Long[] ids) {
        sysConfigMapper.deleteBatch(ids);
    }

    /**
     * 根据配置的键（key）获取对应配置项的值（value）的方法。
     * 首先会通过SysConfigMapper的相关方法，依据传入的键在数据库中查询对应的配置记录，
     * 如果查询到配置记录，则返回该记录中的配置值（即ParamValue字段的值）；
     * 如果未查询到对应的配置记录（即返回的SysConfig对象为null），则返回null。
     *
     * @param key 要查询的配置项的键，用于在数据库中查找对应的配置记录，以获取其配置值。
     * @return 返回与传入的键对应的配置值，如果未找到相应配置记录则返回null。
     */
    @Override
    public String getValue(String key) {
        SysConfig config = sysConfigMapper.queryByKey(key);
        return config == null? null : config.getParamValue();
    }
}