package com.tourguide.api.guide;
|
|
import com.tourguide.common.api.ApiResponse;
|
import com.tourguide.modules.operation.dto.CityResponse;
|
import com.tourguide.modules.operation.service.OperationCityService;
|
import com.tourguide.modules.user.dto.GuideRegistrationDocumentResponse;
|
import com.tourguide.modules.user.dto.GuideRegistrationResponse;
|
import com.tourguide.modules.user.dto.GuideRegistrationSmsRequest;
|
import com.tourguide.modules.user.dto.GuideRegistrationSubmitRequest;
|
import com.tourguide.modules.user.dto.GuideRegistrationTeamOptionResponse;
|
import com.tourguide.modules.user.dto.GuideRegistrationTokenResponse;
|
import com.tourguide.modules.user.dto.GuideRegistrationVerifyRequest;
|
import com.tourguide.modules.user.dto.SmsCodeResponse;
|
import com.tourguide.modules.user.service.GuideRegistrationDocumentStorageService;
|
import com.tourguide.modules.user.service.GuideRegistrationService;
|
import com.tourguide.modules.user.service.GuideTeamService;
|
import org.springframework.http.MediaType;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.validation.Valid;
|
import java.util.List;
|
|
@RestController
|
@RequestMapping("/api/guide/registration")
|
public class GuideRegistrationController {
|
private final GuideRegistrationService registrationService;
|
private final GuideRegistrationDocumentStorageService documentStorageService;
|
private final OperationCityService cityService;
|
private final GuideTeamService teamService;
|
|
public GuideRegistrationController(GuideRegistrationService registrationService,
|
GuideRegistrationDocumentStorageService documentStorageService,
|
OperationCityService cityService,
|
GuideTeamService teamService) {
|
this.registrationService = registrationService;
|
this.documentStorageService = documentStorageService;
|
this.cityService = cityService;
|
this.teamService = teamService;
|
}
|
|
@PostMapping("/sms-code")
|
public ApiResponse<SmsCodeResponse> sendSmsCode(@Valid @RequestBody GuideRegistrationSmsRequest request) {
|
return ApiResponse.success(registrationService.sendCode(request.getPhone()));
|
}
|
|
@PostMapping("/verify-phone")
|
public ApiResponse<GuideRegistrationTokenResponse> verifyPhone(
|
@Valid @RequestBody GuideRegistrationVerifyRequest request) {
|
return ApiResponse.success(registrationService.verifyPhone(request.getPhone(), request.getCode()));
|
}
|
|
@GetMapping("/cities")
|
public ApiResponse<List<CityResponse>> cities() {
|
return ApiResponse.success(cityService.enabledOptions());
|
}
|
|
@GetMapping("/teams")
|
public ApiResponse<List<GuideRegistrationTeamOptionResponse>> teams() {
|
return ApiResponse.success(teamService.registrationOptions());
|
}
|
|
@PostMapping(value = "/documents", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
public ApiResponse<GuideRegistrationDocumentResponse> uploadDocument(
|
@RequestHeader("X-Registration-Token") String registrationToken,
|
@RequestPart("file") MultipartFile file) {
|
registrationService.requireVerifiedPhone(registrationToken);
|
return ApiResponse.success(new GuideRegistrationDocumentResponse(documentStorageService.store(file)));
|
}
|
|
@PostMapping("/applications")
|
public ApiResponse<GuideRegistrationResponse> submit(
|
@RequestHeader("X-Registration-Token") String registrationToken,
|
@Valid @RequestBody GuideRegistrationSubmitRequest request) {
|
return ApiResponse.success(registrationService.submit(registrationToken, request));
|
}
|
}
|