Newer
Older
book-metadata-service / src / main / java / ru / mcs / metadatabook / controller / DataController.java
@malexple malexple on 17 Aug 2 KB init app
package ru.mcs.metadatabook.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import ru.mcs.metadatabook.entity.MtData;
import ru.mcs.metadatabook.entity.MtObject;
import ru.mcs.metadatabook.repository.MtDataRepository;
import ru.mcs.metadatabook.service.MetadataService;

import java.util.List;
import java.util.UUID;

@RestController
@RequestMapping("/api/data")
@RequiredArgsConstructor
@Tag(name = "Data", description = "API для работы с данными объектов")
public class DataController {

    private final MtDataRepository dataRepository;
    private final MetadataService metadataService;

    @Operation(
            summary = "Получить все записи объекта",
            description = "Возвращает все записи указанного объекта для организации"
    )
    @GetMapping("/{objectName}")
    public ResponseEntity<List<MtData>> getRecords(
            @Parameter(description = "ID организации", example = "1")
            @RequestParam(defaultValue = "1") Integer orgId,

            @Parameter(description = "Имя объекта", example = "Contact")
            @PathVariable String objectName) {

        MtObject object = metadataService.getObjectByName(orgId, objectName);
        List<MtData> records = dataRepository.findByOrgIdAndObjId(orgId, object.getObjId());
        return ResponseEntity.ok(records);
    }

    @Operation(
            summary = "Получить запись по GUID",
            description = "Возвращает конкретную запись по её уникальному идентификатору"
    )
    @GetMapping("/{objectName}/{guid}")
    public ResponseEntity<MtData> getRecord(
            @Parameter(description = "ID организации", example = "1")
            @RequestParam(defaultValue = "1") Integer orgId,

            @Parameter(description = "Имя объекта", example = "Contact")
            @PathVariable String objectName,

            @Parameter(description = "GUID записи", example = "550e8400-e29b-41d4-a716-446655440000")
            @PathVariable UUID guid) {

        MtData record = dataRepository.findByOrgIdAndGuid(orgId, guid);
        return ResponseEntity.ok(record);
    }
}