
package cn.novalon.gym.manage.groupcourse.service;

import cn.novalon.gym.manage.common.dto.PageRequest;
import cn.novalon.gym.manage.common.dto.PageResponse;
import cn.novalon.gym.manage.groupcourse.domain.GroupCourse;
import cn.novalon.gym.manage.groupcourse.domain.GroupCourseDetail;
import cn.novalon.gym.manage.groupcourse.dto.GroupCourseQueryDto;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public interface IGroupCourseService {
    Mono<GroupCourse> findById(Long id);
    Mono<GroupCourseDetail> findDetailById(Long id);
    Flux<GroupCourse> findAll();
    Flux<GroupCourse> findAll(boolean includeDeleted);
    
    Mono<PageResponse<GroupCourse>> findByPage(PageRequest pageRequest, boolean includeDeleted);
    
    Mono<GroupCourse> create(GroupCourse groupCourse);
    
    Mono<GroupCourse> update(Long id, GroupCourse groupCourse);
    
    Mono<GroupCourse> cancel(Long id);
    
    Mono<GroupCourse> signIn(Long courseId, Long memberId);
    
    Mono<Void> delete(Long id);

    Mono<PageResponse<GroupCourse>> searchGroupCourses(GroupCourseQueryDto query);
}
