package gov.nysenate.openleg.controller.api.admin;
import gov.nysenate.openleg.client.response.base.BaseResponse;
import gov.nysenate.openleg.client.response.base.ListViewResponse;
import gov.nysenate.openleg.client.response.base.SimpleResponse;
import gov.nysenate.openleg.client.view.entity.ExtendedMemberView;
import gov.nysenate.openleg.client.view.entity.FullMemberView;
import gov.nysenate.openleg.controller.api.base.BaseCtrl;
import gov.nysenate.openleg.dao.base.LimitOffset;
import gov.nysenate.openleg.model.entity.FullMember;
import gov.nysenate.openleg.service.entity.member.data.MemberService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import static gov.nysenate.openleg.controller.api.base.BaseCtrl.BASE_ADMIN_API_PATH;
@RestController
@RequestMapping(value = BASE_ADMIN_API_PATH + "/member")
public class MemberManageCtrl extends BaseCtrl {
private static final Logger logger = LoggerFactory.getLogger(MemberManageCtrl.class);
@Autowired MemberService memberService;
private static class MemberViewList extends ArrayList<ExtendedMemberView>{}
@RequiresPermissions("admin:member:get")
@RequestMapping(value = "", method = RequestMethod.GET)
public BaseResponse getExtendedMembers(@RequestParam(defaultValue = "false") boolean unverifiedOnly) {
Map<Boolean, List<FullMember>> poopTition = memberService.getAllFullMembers().stream()
.collect(Collectors.partitioningBy(FullMember::isVerified));
logger.info("true: {}, false: {}", Optional.ofNullable(poopTition.get(true)).map(List::size).orElse(0),
Optional.ofNullable(poopTition.get(false)).map(List::size).orElse(0));
List<FullMemberView> fullMembers = memberService.getAllFullMembers().stream()
.filter(member -> !unverifiedOnly || !member.isVerified())
.map(FullMemberView::new)
.collect(Collectors.toList());
return ListViewResponse.of(fullMembers, fullMembers.size(), LimitOffset.ALL);
}
@RequiresPermissions("admin:member:post")
@RequestMapping(value = "", method = RequestMethod.POST)
public BaseResponse updateMembers(@RequestBody MemberViewList memberViewList) {
memberService.updateMembers(memberViewList.stream()
.map(ExtendedMemberView::toMember)
.collect(Collectors.toList()));
return new SimpleResponse(true, "members updated", "member-update-success");
}
}