package com.ruoyi.web.modules.news.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.web.modules.news.domain.FarmingNewsListVo;
import com.ruoyi.web.modules.news.domain.FarmingNewsQuery;
import com.ruoyi.web.modules.news.service.IFarmingNewsService;
import com.ruoyi.web.modules.news.support.FarmingNewsPageSupport;
import com.ruoyi.web.modules.news.support.FarmingNewsQuerySupport;
import com.ruoyi.web.modules.news.support.FarmingNewsTypeValidator;

/**
 * 移动端养殖资讯（v_farming_news，按资讯类别 type 筛选）。
 */
@RestController
@RequestMapping("/app/farmingNews")
public class BizAppFarmingNewsController extends BaseController
{
    @Autowired
    private IFarmingNewsService farmingNewsService;

    @Autowired
    private FarmingNewsTypeValidator farmingNewsTypeValidator;

    /**
     * 按 type 分页查询已发布养殖资讯列表，支持 title 关键字模糊搜索。
     *
     * @param query type 必填（资讯类别编码，如 001001）；title 可选；pageNum、pageSize 可选
     */
    @GetMapping("/list")
    public TableDataInfo list(FarmingNewsQuery query)
    {
        FarmingNewsQuery effective = FarmingNewsQuerySupport.normalize(query);
        farmingNewsTypeValidator.assertAllowed(effective.getType());
        FarmingNewsPageSupport.startPage(effective);
        List<FarmingNewsListVo> list = farmingNewsService.selectFarmingNewsList(effective);
        return getDataTable(list);
    }

    /**
     * 养殖资讯详情：按 type 路由到对应业务表，根据 id 返回已发布记录全字段。
     *
     * @param id   源表主键（与列表项 id 一致）
     * @param type 资讯类别编码（与列表项 type 一致）
     */
    @GetMapping("/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id, String type)
    {
        farmingNewsTypeValidator.assertAllowed(type);
        return success(farmingNewsService.selectFarmingNewsById(id, type));
    }
}
