Skip to content

Commit

Permalink
feat: add datasetRole endpoints (#95)
Browse files Browse the repository at this point in the history
  • Loading branch information
mllabai authored Jun 26, 2024
1 parent e001210 commit 4a6aedf
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 30 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package org.fgai4h.ap.domain.dataset.controller;

import lombok.RequiredArgsConstructor;
import org.fgai4h.ap.api.DatasetRoleApi;
import org.fgai4h.ap.api.model.DatasetRoleDto;
import org.fgai4h.ap.domain.dataset.entity.DatasetRoleEntity;
import org.fgai4h.ap.domain.dataset.mapper.DatasetRoleApiMapper;
import org.fgai4h.ap.domain.dataset.mapper.DatasetRoleModelAssembler;
import org.fgai4h.ap.domain.dataset.model.DatasetModel;
import org.fgai4h.ap.domain.dataset.model.DatasetRoleModel;
import org.fgai4h.ap.domain.dataset.repository.DatasetRoleRepository;
import org.fgai4h.ap.domain.dataset.service.DatasetRoleService;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.Link;
import org.springframework.http.HttpStatus;
Expand All @@ -21,57 +26,54 @@

@RestController
@RequiredArgsConstructor
public class DatasetRoleController {
public class DatasetRoleController implements DatasetRoleApi {

private final DatasetRoleRepository datasetRoleRepository;
private final DatasetRoleModelAssembler datasetRoleModelAssembler;
private final DatasetRoleApiMapper datasetRoleApiMapper;
private final DatasetRoleService datasetRoleService;

@GetMapping("/api/v1/datasets/{id}/roles")
public ResponseEntity<CollectionModel<DatasetRoleModel>> getAllDatasetRolesByDatasetId(@PathVariable("id") UUID id)
@Override
public ResponseEntity<DatasetRoleDto> getDatasetRoleById(UUID id)
{
List<DatasetRoleEntity> datasetRoleEntities = datasetRoleRepository.findRolesByDatasetId(id);
return new ResponseEntity<>(
datasetRoleModelAssembler.toCollectionModel(datasetRoleEntities),
HttpStatus.OK);
}

@GetMapping("/api/v1/dataset_roles/{id}")
public ResponseEntity<DatasetRoleModel> getDatasetRoleById(@PathVariable("id") UUID id)
{
return datasetRoleRepository.findById(id)
.map(datasetRoleModelAssembler::toModel)
return datasetRoleService.getDatasetRoleById(id)
.map(datasetRoleApiMapper::toDatasetRoleDto)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}

@PutMapping("/api/v1/dataset_roles/{id}")
public ResponseEntity<?> updateDataset(@RequestBody DatasetRoleEntity datasetRole, @PathVariable UUID id){
DatasetRoleEntity datasetRoleToUpdate = datasetRole;
datasetRoleToUpdate.setDatasetRoleUUID(id);
datasetRoleRepository.save(datasetRoleToUpdate);
@Override
public ResponseEntity<Void> updateDatasetRole(UUID id, DatasetRoleDto datasetRoleDto){
DatasetRoleModel datasetRoleModel = datasetRoleApiMapper.toDatasetRoleModel(datasetRoleDto);
datasetRoleService.updateDatasetRole(datasetRoleModel);

Link newlyCreatedLink = linkTo(methodOn(DatasetRoleController.class).getDatasetRoleById(id)).withSelfRel();

try {
return ResponseEntity.noContent().location(new URI(newlyCreatedLink.getHref())).build();
} catch (URISyntaxException e) {
return ResponseEntity.badRequest().body("Unable to update " + datasetRoleToUpdate);
return ResponseEntity.badRequest().build();
}
}

@PostMapping("/api/v1/dataset_roles")
public ResponseEntity<?> addDataset(@RequestBody DatasetRoleEntity newDatasetRole){
@Override
public ResponseEntity<Void> addDatasetRole(DatasetRoleDto datasetRoleDto){

newDatasetRole = datasetRoleRepository.save(newDatasetRole);
DatasetRoleModel datasetRoleModel = datasetRoleApiMapper.toDatasetRoleModel(datasetRoleDto);
datasetRoleModel = datasetRoleService.addDatasetRole(datasetRoleModel);

Link newlyCreatedLink = linkTo(methodOn(DatasetController.class).getDatasetById(newDatasetRole.getDatasetRoleUUID())).withSelfRel();
Link newlyCreatedLink = linkTo(methodOn(DatasetController.class).getDatasetById(datasetRoleModel.getDatasetRoleUUID())).withSelfRel();

try {
return ResponseEntity.noContent().location(new URI(newlyCreatedLink.getHref())).build();
} catch (URISyntaxException e) {
return ResponseEntity.badRequest().body("Unable to add " + newDatasetRole);
return ResponseEntity.badRequest().build();
}
}

@Override
public ResponseEntity<Void> deleteDatasetRoleById(UUID datasetRoleId) {
datasetRoleService.deleteDatasetRoleById(datasetRoleId);
return ResponseEntity.noContent().build();
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@

import lombok.RequiredArgsConstructor;
import org.fgai4h.ap.domain.dataset.entity.DatasetRoleEntity;
import org.fgai4h.ap.domain.dataset.mapper.DatasetRoleApiMapper;
import org.fgai4h.ap.domain.dataset.mapper.DatasetRoleMapper;
import org.fgai4h.ap.domain.dataset.mapper.DatasetRoleModelAssembler;
import org.fgai4h.ap.domain.dataset.model.DatasetModel;
import org.fgai4h.ap.domain.dataset.model.DatasetRoleModel;
import org.fgai4h.ap.domain.dataset.repository.DatasetRoleRepository;
import org.fgai4h.ap.domain.error.DomainError;
import org.fgai4h.ap.domain.exception.NotFoundException;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;

Expand All @@ -26,6 +31,10 @@ public DatasetRoleModel addDatasetRole(DatasetRoleModel datasetRoleModel) {
return datasetModelAssembler.toModel(datasetRoleEntity);
}

public void updateDatasetRole(DatasetRoleModel datasetRoleModel) {
datasetRoleRepository.save(datasetRoleMapper.toDatasetRoleEntity(datasetRoleModel));
}

public void deleteRolesByDatasetId(UUID datasetId) {
List<DatasetRoleEntity> roles = datasetRoleRepository.findRolesByDatasetId(datasetId);
roles.stream().forEach(r -> datasetRoleRepository.deleteById(r.getDatasetRoleUUID()));
Expand All @@ -34,4 +43,15 @@ public void deleteRolesByDatasetId(UUID datasetId) {
public List<DatasetRoleModel> getDatasetRolesForDatasetId(UUID datasetId){
return datasetRoleRepository.findRolesByDatasetId(datasetId).stream().map(datasetRoleModelAssembler::toModel).collect(Collectors.toList());
}

public void deleteDatasetRoleById(UUID datasetRoleId) {
datasetRoleRepository.deleteById(datasetRoleId);
}

public Optional<DatasetRoleModel> getDatasetRoleById(UUID datasetRoleId) {
return Optional.ofNullable(datasetRoleRepository
.findById(datasetRoleId)
.map(datasetRoleModelAssembler::toModel)
.orElseThrow(() -> new NotFoundException(DomainError.NOT_FOUND, "DatasetRole", "id", datasetRoleId)));
}
}
93 changes: 92 additions & 1 deletion src/main/resources/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ tags:
description: Everything about annotation campaign
- name: Dataset
description: Operation about dataset management
- name: DatasetRole
description: Operation about dataset role management
- name: Task
description: Operation about annotation tasks
- name: User
Expand Down Expand Up @@ -1028,6 +1030,95 @@ paths:
'404':
description: Given Dataset ID doesn't exist
content: { }

/datasetRoles:
post:
tags:
- DatasetRole
summary: Creates a new dataset role for the given dataset and user request
description: Creates a new dataset role for the given dataset request.
operationId: addDatasetRole
requestBody:
description: New datasetRole Request object
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetRoleDto'
responses:
'201':
description: DatasetRole added successfully

/datasetRoles/{dataset_role_id}:
get:
tags:
- DatasetRole
summary: Returns a dataset role
description: Returns the dataset role of given datasetRoleId
operationId: getDatasetRoleById
parameters:
- name: dataset_role_id
in: path
description: DatasetRole Identifier
required: true
schema:
type: string
format: uuid
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetRoleDto'
'404':
description: Given Dataset Role ID doesn't exist
content: { }
put:
tags:
- DatasetRole
summary: Update the dataset role
description: Update the given dataset role
operationId: updateDatasetRole
parameters:
- name: dataset_role_id
in: path
description: Dataset Role Identifier
required: true
schema:
type: string
format: uuid
requestBody:
description: New DatasetRole object
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetRoleDto'
responses:
'204':
description: DatsetRole updated successfully
'500':
description: Given datasetRole ID doesn't exist
content: { }
delete:
tags:
- DatasetRole
summary: Delete a datasetRole
description: Delete the datasetRole of given datasetRoleId
operationId: deleteDatasetRoleById
parameters:
- name: dataset_role_id
in: path
description: DatasetRole Identifier
required: true
schema:
type: string
format: uuid
responses:
'204':
description: successful operation
'404':
description: Given DatasetRole ID doesn't exist
content: { }
/tasks:
get:
tags:
Expand Down Expand Up @@ -1136,7 +1227,7 @@ paths:
'404':
description: Given annotation task ID doesn't exist
content: { }
/annoatation_data/{annotation_data_id}:
/annotation_data/{annotation_data_id}:
get:
tags:
- Task
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/tasks.sql

Large diffs are not rendered by default.

0 comments on commit 4a6aedf

Please sign in to comment.