package com.bonus.system.api;

import com.bonus.common.core.constant.SecurityConstants;
import com.bonus.common.core.constant.ServiceNameConstants;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.core.web.page.TableDataInfo;
import com.bonus.system.api.domain.SysNotice;
import com.bonus.system.api.factory.RemoteNoticeFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * @author wangvivi
 */
@FeignClient(contextId = "remoteNoticeService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteNoticeFallbackFactory.class)
public interface RemoteNoticeService {
    /**
     * 根据公告标题或类型或创建人获取通知公告列表
     * @param notice 公告标题或类型（1通知，2公告）或创建人信息
     * @param source 内部请求的请求头标志，使用SecurityConstants.INNER
     * @return 公告列表或错误信息
     */
    @GetMapping("/notice/list")
    public TableDataInfo list(SysNotice notice, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 根据通知公告编号获取详细信息
     * @param noticeId 公告编号
     * @param source 内部请求的请求头标志，使用SecurityConstants.INNER
     * @return 公告列表或错误信息
     */
    @GetMapping(value = "/notice/{noticeId}")
    public AjaxResult getInfo(@PathVariable("noticeId") Long noticeId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 新增通知公告
     * @param notice 新增的通知公告
     * @param source 内部请求的请求头标志，使用SecurityConstants.INNER
     * @return 新增公告影响行数或错误信息
     */
    @PostMapping(value = "/notice")
    public AjaxResult add(@Validated @RequestBody SysNotice notice, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 修改通知公告
     * @param notice 修改的通知公告
     * @param source 内部请求的请求头标志，使用SecurityConstants.INNER
     * @return 修改公告影响行数或错误信息
     */
   @PostMapping(value = "/notice/edit")
    public AjaxResult edit(@Validated @RequestBody SysNotice notice, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 删除通知公告
     * @param noticeIds 删除的通知id
     * @param source 内部请求的请求头标志，使用SecurityConstants.INNER
     * @return 删除公告影响行数或错误信息
     */
    @PostMapping("/notice/delete/{noticeIds}")
    public AjaxResult remove(@PathVariable("noticeIds") Long[] noticeIds, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}
