package sample.controller.admin;
import java.util.*;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import lombok.*;
import sample.ValidationException;
import sample.ValidationException.ErrorKeys;
import sample.context.actor.Actor;
import sample.context.security.*;
import sample.context.security.SecurityActorFinder.ActorDetails;
import sample.controller.ControllerSupport;
import sample.model.master.Holiday.RegHoliday;
import sample.usecase.MasterAdminService;
/**
* マスタに関わる社内のUI要求を処理します。
*/
@RestController
@RequestMapping("/api/admin/master")
@Setter
public class MasterAdminController extends ControllerSupport {
@Autowired
private MasterAdminService service;
@Autowired
private SecurityProperties securityProps;
/** 社員ログイン状態を確認します。 */
@GetMapping("/loginStatus")
public boolean loginStatus() {
return true;
}
/** 社員ログイン情報を取得します。 */
@GetMapping("/loginStaff")
public LoginStaff loadLoginStaff() {
if (securityProps.auth().isEnabled()) {
ActorDetails actorDetails = SecurityActorFinder.actorDetails()
.orElseThrow(() -> new ValidationException(ErrorKeys.Authentication));
Actor actor = actorDetails.actor();
return new LoginStaff(actor.getId(), actor.getName(), actorDetails.getAuthorityIds());
} else { // for dummy login
return new LoginStaff("sample", "sample", new ArrayList<>());
}
}
/** クライアント利用用途に絞ったパラメタ */
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class LoginStaff {
private String id;
private String name;
private Collection<String> authorities;
}
/** 休日を登録します。 */
@PostMapping("/holiday/")
public ResponseEntity<Void> registerHoliday(@Valid RegHoliday p) {
return resultEmpty(() -> service.registerHoliday(p));
}
}