package com.alibaba.spring.boot.rsocket.demo;

import com.alibaba.user.User;
import com.alibaba.user.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

/**
 * portal demo for test
 *
 * @author leijuan
 */
@RestController
public class PortalController {
    @Autowired
    UserService userService;

    @GetMapping("/error")
    public Mono<String> error() {
        return userService.error("Hi");
    }

    @GetMapping("/job1")
    public Mono<Void> job1() {
        return userService.job1();
    }

    @RequestMapping("/appName")
    public Mono<String> appName() {
        return userService.getAppName();
    }

    @RequestMapping("/flux")
    public Flux<User> flux() {
        return userService.findAllPeople("vip");
    }

    @RequestMapping("/channel1")
    public Flux<User> channel1() {
        Flux<Integer> userIdFlux = Flux.range(1, 20);
        return userService.recent(userIdFlux);
    }

    @RequestMapping("/channel2")
    public Flux<User> channel2() {
        Flux<Integer> userIdFlux = Flux.range(1, 20);
        return userService.recentWithType("VIP", userIdFlux);
    }

    @RequestMapping("/monoChannel")
    public Mono<Integer> monoChannel() {
        return userService.postFeeds(Flux.just("one", "two", "three"));
    }

    @RequestMapping("/")
    public String index() {
        return "This is RSocket Requester App!";
    }
}