Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ api-project-platform/src/main/java/org/opendevstack/apiservice/projectplatform/a
api-project-platform/src/main/java/org/opendevstack/apiservice/projectplatform/model
api-project/src/main/java/org/opendevstack/apiservice/project/api
api-project/src/main/java/org/opendevstack/apiservice/project/model
api-project-v1/src/main/java/org/opendevstack/apiservice/projectv1/api
api-project-v1/src/main/java/org/opendevstack/apiservice/projectv1/model
api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/api
api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/model
external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/openapi
Expand Down
126 changes: 126 additions & 0 deletions api-project-v1/openapi/api-project-v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
openapi: 3.0.3
info:
title: ODS API Server
description: API documentation for ODS (Open DevStack) API Service
contact:
name: ODS Team
version: v0.0.1
servers:
- url: http://{baseurl}/api/pub/v1
variables:
baseurl:
default: localhost:8080
description: Development environment
tags:
- name: Projects
description: API for manage EDP projects.
paths:
/projects:
get:
tags:
- Projects
summary: Get all projects filtered by page and size.
description: Returns the current status and details for each project in a list filtered by the given page and size.
operationId: getProjects
parameters:
- name: page
in: query
required: false
schema:
type: integer
default: 0
minimum: 0
description: Page number to retrieve.
- name: size
in: query
required: false
schema:
type: integer
default: 20
minimum: 20
maximum: 1000
description: Size of the page to retrieve.
responses:
'200':
description: Project information retrieved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/GetProjectsResponse'
'404':
description: Project not found.
content:
application/json:
schema:
$ref: '#/components/schemas/GetProjectsResponse'
"401":
description: Invalid client token on the request.
content:
application/json:
schema:
$ref: '#/components/schemas/RestErrorMessage'
"403":
description: Insufficient permissions for the client to access the resource.
content:
application/json:
schema:
$ref: '#/components/schemas/RestErrorMessage'
'500':
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/GetProjectsResponse'
components:
schemas:
RestErrorMessage:
properties:
message:
type: string
required:
- message
ProjectsResponse:
type: object
properties:
projectKey:
type: string
projectName:
type: string
projectFlavor:
type: string
location:
type: string
status:
type: string
createdAt:
type: string
updatedAt:
type: string
GetProjectsResponse:
type: object
properties:
projects:
type: array
items:
$ref: '#/components/schemas/ProjectsResponse'
metadata:
type: object
properties:
page:
type: integer
size:
type: integer
totalElements:
type: integer
totalPages:
type: integer
last:
type: boolean
message:
type: string
error:
type: string
errorKey:
type: string
location:
type: string
182 changes: 182 additions & 0 deletions api-project-v1/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.opendevstack.apiservice</groupId>
<artifactId>devstack-api-service</artifactId>
<version>0.0.3</version>
</parent>

<artifactId>api-project-v1</artifactId>
<name>API Projects V1</name>
<description>API module for managing EDP projects</description>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
</dependency>

<dependency>
<groupId>org.opendevstack.apiservice</groupId>
<artifactId>service-projects</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.opendevstack.apiservice</groupId>
<artifactId>persistence</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.opendevstack.apiservice</groupId>
<artifactId>core-security</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.12.3</version>
</dependency>

<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.12.3</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.12.3</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>

<dependency>
<groupId>org.openapitools</groupId>
<artifactId>jackson-databind-nullable</artifactId>
<version>${jackson-databind-nullable.version}</version>
</dependency>

<!-- Test dependencies -->

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-api-project-v1</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generatorName>spring</generatorName>
<output>${project.basedir}/target/generated-sources/openapi</output>
<library>spring-boot</library>
<inputSpec>${project.basedir}/openapi/api-project-v1.yaml</inputSpec>
<apiPackage>org.opendevstack.apiservice.projectv1.client.api</apiPackage>
<modelPackage>org.opendevstack.apiservice.projectv1.client.model</modelPackage>
<invokerPackage>org.opendevstack.apiservice.projectv1.client</invokerPackage>
<skipOverwrite>false</skipOverwrite>
<generateApiTests>false</generateApiTests>
<generateModelTests>false</generateModelTests>
<generateApiDocumentation>false</generateApiDocumentation>
<generateModelDocumentation>false</generateModelDocumentation>
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<interfaceOnly>true</interfaceOnly>
<useSpringBoot3>true</useSpringBoot3>
<documentationProvider>springdoc</documentationProvider>
<skipDefaultInterface>true</skipDefaultInterface>
<hideGenerationTimestamp>true</hideGenerationTimestamp>
<useTags>true</useTags>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.opendevstack.apiservice.projectv1.controller;

import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.opendevstack.apiservice.projectv1.client.api.ProjectsApi;
import org.opendevstack.apiservice.projectv1.facade.ProjectsFacade;
import org.opendevstack.apiservice.projectv1.client.model.GetProjectsResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController("projectControllerV1")
@RequestMapping(ProjectController.API_BASE_PATH)
@AllArgsConstructor
@Slf4j
public class ProjectController implements ProjectsApi {

public static final String API_BASE_PATH = "/api/pub/v1/projects";

private final ProjectsFacade projectsFacade;

@GetMapping
@Override
public ResponseEntity<GetProjectsResponse> getProjects(Integer page, Integer size) {

GetProjectsResponse response = projectsFacade.getProjects(page, size);
response.setLocation(API_BASE_PATH);

return ResponseEntity
.status(HttpStatus.OK)
.body(response);
}
}
Loading
Loading