package com.huixinpn.dionysus.controller.appointment; import com.huixinpn.dionysus.controller.util.PagingHelper; import com.huixinpn.dionysus.controller.util.Utils; import com.huixinpn.dionysus.domain.appointment.Appointment; import com.huixinpn.dionysus.domain.appointment.AppointmentStatus; import com.huixinpn.dionysus.domain.user.Consultant; import com.huixinpn.dionysus.domain.user.User; import com.huixinpn.dionysus.dto.EntityPageData; import com.huixinpn.dionysus.dto.appointment.AppointmentData; import com.huixinpn.dionysus.repository.appointment.AppointmentRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping(value = "/controllers") public class AppointmentController { @Autowired private AppointmentRepository appointmentRepository; @RequestMapping(value = "/appointments", method = RequestMethod.POST) public ResponseEntity<String> addAppointment(@RequestBody AppointmentData data) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); User login = (User) authentication.getPrincipal(); Appointment appointment = new Appointment(); data.update(appointment); appointment.setUser(login); Appointment added = appointmentRepository.save(appointment); return new ResponseEntity<>(Utils.wrapSaveResult(added.getId()), HttpStatus.OK); } @RequestMapping(value = "/appointments/{id}", method = RequestMethod.PUT) public ResponseEntity<String> updateAppointment(@RequestBody AppointmentData data,@PathVariable Long id) { Appointment updating = appointmentRepository.findOne(id); data.update(updating); appointmentRepository.save(updating); return new ResponseEntity<>(Utils.EMPTY_JSON_OBJECT, HttpStatus.OK); } @RequestMapping(value = "/appointments", method = RequestMethod.GET) public EntityPageData<AppointmentData> getAppointments(@RequestParam(value="c",required = false) Long consultId, @RequestParam(value="s", required = false) String state, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size) { Pageable pageable = PagingHelper.getPageRequest(page,size); Page<Appointment> result; if(consultId == null && state == null){ result = appointmentRepository.findAll(pageable); }else if(consultId == null){ result = appointmentRepository.findByState(AppointmentStatus.valueOf(state),pageable); }else if(state == null){ result = appointmentRepository.findByConsultant(new Consultant(consultId),pageable); }else{ result = appointmentRepository.findByConsultantAndState(new Consultant(consultId),AppointmentStatus.valueOf(state),pageable); } return new EntityPageData<>(result,AppointmentData.class); } @RequestMapping(value = "/appointments/{id}", method = RequestMethod.GET) public AppointmentData getAppointment(@PathVariable Long id) { return new AppointmentData(appointmentRepository.findOne(id)); } @RequestMapping(value = "/appointments/user/{id}", method = RequestMethod.GET) public EntityPageData<AppointmentData> getAppointmentByUser(@PathVariable Long id,@RequestParam Integer page, @RequestParam Integer size) { Pageable pageable = PagingHelper.getPageRequest(page,size); return new EntityPageData(appointmentRepository.findByUser(new User(id),pageable),AppointmentData.class); } }