Rest контроллеры
При создании плагина через SDK у вас уже будет демо-контроллер.
java
package ru.slie.luna.template.rest;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import ru.slie.luna.db.query.DeleteResult;
import ru.slie.luna.exception.ValidateException;
import ru.slie.luna.template.card.Card;
import ru.slie.luna.template.card.CardManager;
import ru.slie.luna.template.card.CardState;
import ru.slie.luna.template.rest.request.CardRequest;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/todo")
public class TodoRest {
private final CardManager cardManager;
public TodoRest(CardManager cardManager) {
this.cardManager = cardManager;
}
@GetMapping({"", "/"})
public List<Card> getCards() {
return cardManager.getCards();
}
@PostMapping({"", "/"})
public Card createCard(@RequestBody CardRequest request) {
return cardManager.createCard(request.getValue());
}
@PutMapping("/{cardId}")
public Card updateCard(@PathVariable Long cardId, @RequestBody CardRequest request) throws ValidateException {
Card card = cardManager.getCardById(cardId).orElse(null);
if (card == null) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
card.setState(CardState.fromString(request.getState()));
card.setValue(request.getValue());
cardManager.saveCard(card);
return card;
}
@PatchMapping("/{cardId}")
public Card patchCard(@PathVariable Long cardId, @RequestBody Map<String, String> request) throws ValidateException {
Card card = cardManager.getCardById(cardId).orElse(null);
if (card == null) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
for (Map.Entry<String, String> entry: request.entrySet()) {
switch (entry.getKey()) {
case "value" -> card.setValue(entry.getValue());
case "state" -> card.setState(CardState.fromString(entry.getValue()));
}
}
cardManager.saveCard(card);
return card;
}
@DeleteMapping("/{cardId}")
public DeleteResult deleteCard(@PathVariable Long cardId) {
return cardManager.delete(cardId);
}
}Данный контроллер будет доступен по адресу /rest/plugin/ru.slie.luna.template.demo-addon/todo (/rest/plugin/<grouopId>/<artifactId>/<RequestMapping>);
Для удобства генерируется axios client, который вы можете использовать для взаимодействия с вашими rest-конроллерами. Он автоматически добавляет префикс к вашим запросам.
ts
import axios from 'axios';
import { ResponseError } from "luna";
export const baseURL = '/rest/plugin/ru.slie.luna.template.demo-addon';
const axiosClient = axios.create({baseURL});
axiosClient.interceptors.response.use(
function(response) {
return response;
},
function(error) {
if (axios.isAxiosError<ResponseError>(error) && error.response) {
return Promise.reject(error.response);
}
return Promise.reject({
status: error.status,
reason: error.statusText
} as ResponseError);
}
);
export const client = axiosClient;Регистрация в дескрипторе
Что бы Луна подхватила ваши рест контроллеры, обязательно добавляйте аннотацию RestController к вашим классам, а так же укажите пакет, где будут размещены классы, в дескрипторе
yaml
restPackages:
- name: Rest pack
packages:
- ru.slie.luna.template.rest