package com.huixinpn.dionysus.controller.organization; import com.huixinpn.dionysus.controller.util.PagingHelper; import com.huixinpn.dionysus.controller.util.Utils; import com.huixinpn.dionysus.domain.article.Blog; import com.huixinpn.dionysus.domain.user.OrganizationStatus; import com.huixinpn.dionysus.domain.user.User; import com.huixinpn.dionysus.dto.EntityPageData; import com.huixinpn.dionysus.dto.article.ArticleData; import com.huixinpn.dionysus.dto.user.OrganizationDetailData; import com.huixinpn.dionysus.dto.user.OrganizationSummaryData; import com.huixinpn.dionysus.repository.article.BlogRepository; import com.huixinpn.dionysus.repository.user.NotificationRepository; import com.huixinpn.dionysus.repository.user.OrganizationRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.Calendar; import java.util.Locale; @RestController @RequestMapping(value = "/controllers/organizations") public class OrganizationController { @Autowired private OrganizationRepository organizationRepository; @Autowired private BlogRepository blogRepository; @Autowired private NotificationRepository notificationRepository; @RequestMapping(value = {"", "/"}, method = RequestMethod.POST) public ResponseEntity<String> applyOrganization(@RequestBody OrganizationDetailData data) { User updating = organizationRepository.findOne(data.getId()); data.update(updating); updating.setOrganizationStatus(OrganizationStatus.PENDING); updating.setApplyOrganizationDate(Calendar.getInstance(Locale.CHINESE)); organizationRepository.save(updating); return new ResponseEntity<>(Utils.EMPTY_JSON_OBJECT, HttpStatus.OK); } @RequestMapping(value = {"", "/"}, method = RequestMethod.GET) public EntityPageData<OrganizationSummaryData> getOrganizations(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "status", required = false) String organizationStatus) { PageRequest paging = PagingHelper.getPageRequest(page, size); Page<User> organizations; if (organizationStatus != null) { organizations = organizationRepository.findByOrganizationStatus(OrganizationStatus.valueOf(organizationStatus), paging); } else { organizations = organizationRepository.allOrganizations(paging); } return new EntityPageData<>(organizations, OrganizationSummaryData.class); } @RequestMapping(value = "/admin", method = RequestMethod.GET) public EntityPageData<OrganizationDetailData> manageOrganizations(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "status", required = false) String organizationStatus) { PageRequest paging = PagingHelper.getPageRequest(page, size); Page<User> organizations; if (organizationStatus != null) { organizations = organizationRepository.findByOrganizationStatus(OrganizationStatus.valueOf(organizationStatus), paging); } else { organizations = organizationRepository.allOrganizations(paging); } return new EntityPageData<>(organizations, OrganizationDetailData.class); } @RequestMapping(value = "/{id}", method = RequestMethod.GET) public OrganizationSummaryData getOrganization(@PathVariable Long id) { User user = organizationRepository.findOne(id); return new OrganizationDetailData(user); } @RequestMapping(value = "/{id}/blogs", method = RequestMethod.GET) public EntityPageData<ArticleData> getBlogs(@PathVariable Long id, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size) { User user = new User(id); PageRequest paging = PagingHelper.getPageRequest(page, size); Page<Blog> blogs = blogRepository.findOrganizationCreated(user, paging); return new EntityPageData<>(blogs, ArticleData.class); } @RequestMapping(value = "/admin/approve/{id}", method = RequestMethod.GET) public ResponseEntity<String> approveOrganization(@PathVariable Long id, @RequestParam(value = "status") String status) { User user = organizationRepository.findOne(id); user.setOrganizationStatus(OrganizationStatus.valueOf(status)); organizationRepository.save(user); return new ResponseEntity<String>(Utils.EMPTY_JSON_OBJECT, HttpStatus.OK); } }