Skip to content

Commit b943167

Browse files
authored
Add project service module with key generation and existence checks (#7)
1 parent 5bfaa69 commit b943167

26 files changed

Lines changed: 1191 additions & 4 deletions

File tree

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ api-project-users/src/main/java/org/opendevstack/apiservice/projectusers/api
9393
api-project-users/src/main/java/org/opendevstack/apiservice/projectusers/model
9494
api-project-platform/src/main/java/org/opendevstack/apiservice/projectplatform/api
9595
api-project-platform/src/main/java/org/opendevstack/apiservice/projectplatform/model
96-
api-project-users/.openapi-generator
97-
/api-project-platform/.openapi-generator/
96+
api-project/src/main/java/org/opendevstack/apiservice/project/api
97+
api-project/src/main/java/org/opendevstack/apiservice/project/model
98+
**/.openapi-generator
9899

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111

12+
- Created **New API module** for managing EDP Projects with create and retrieve endpoints.
13+
- Created **New module** external service projects to manage EDP Projects.
14+
1215
### External Service Jira (`external-service-jira`)
1316
- **New module** for checking project existance in Jira (Server)
1417
- Caching for the client

api-project-users/openapi/api-project-users.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ tags:
1616
- name: Project Users
1717
description: API for managing project users and their roles
1818
paths:
19-
/project/{projectKey}/users:
19+
/projects/{projectKey}/users:
2020
post:
2121
tags:
2222
- Project Users
@@ -89,7 +89,7 @@ paths:
8989
application/json:
9090
schema:
9191
$ref: "#/components/schemas/ApiResponseMembershipRequestResponse"
92-
/project/{projectKey}/users/{userid}/status:
92+
/projects/{projectKey}/users/{userid}/status:
9393
get:
9494
tags:
9595
- Project Users
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
openapi: 3.0.3
2+
info:
3+
title: ODS API Server
4+
description: API documentation for ODS (Open DevStack) API Service
5+
contact:
6+
name: ODS Team
7+
version: v0.0.1
8+
servers:
9+
- url: http://{baseurl}/api/pub/v0
10+
variables:
11+
baseurl:
12+
default: localhost:8080
13+
description: Development environment
14+
tags:
15+
- name: Project
16+
description: API for manage EDP projects.
17+
paths:
18+
/projects:
19+
post:
20+
tags:
21+
- Projects
22+
summary: Create a new project.
23+
description: Creates a new project with the provided configuration. Generates a unique project key if not provided.
24+
operationId: createProject
25+
requestBody:
26+
required: true
27+
content:
28+
application/json:
29+
schema:
30+
$ref: '#/components/schemas/CreateProjectRequest'
31+
responses:
32+
'200':
33+
description: Project creation initiated successfully.
34+
content:
35+
application/json:
36+
schema:
37+
$ref: '#/components/schemas/CreateProjectResponse'
38+
'400':
39+
description: Invalid request body or validation error.
40+
content:
41+
application/json:
42+
schema:
43+
$ref: '#/components/schemas/CreateProjectResponse'
44+
"401":
45+
description: Invalid client token on the request.
46+
content:
47+
application/json:
48+
schema:
49+
$ref: '#/components/schemas/RestErrorMessage'
50+
"403":
51+
description: Insufficient permissions for the client to access the resource.
52+
content:
53+
application/json:
54+
schema:
55+
$ref: '#/components/schemas/RestErrorMessage'
56+
'409':
57+
description: A project with the specified key already exists.
58+
content:
59+
application/json:
60+
schema:
61+
$ref: '#/components/schemas/CreateProjectResponse'
62+
'500':
63+
description: Internal server error during project creation.
64+
content:
65+
application/json:
66+
schema:
67+
$ref: '#/components/schemas/CreateProjectResponse'
68+
/projects/{projectKey}:
69+
get:
70+
tags:
71+
- Projects
72+
summary: Get project status by project key.
73+
description: Returns the current status and details of the project identified by the given project key.
74+
operationId: getProject
75+
parameters:
76+
- name: projectKey
77+
in: path
78+
required: true
79+
schema:
80+
type: string
81+
description: Project key to retrieve information.
82+
responses:
83+
'200':
84+
description: Project information retrieved successfully.
85+
content:
86+
application/json:
87+
schema:
88+
$ref: '#/components/schemas/CreateProjectResponse'
89+
'404':
90+
description: Project not found.
91+
content:
92+
application/json:
93+
schema:
94+
$ref: '#/components/schemas/CreateProjectResponse'
95+
"401":
96+
description: Invalid client token on the request.
97+
content:
98+
application/json:
99+
schema:
100+
$ref: '#/components/schemas/RestErrorMessage'
101+
"403":
102+
description: Insufficient permissions for the client to access the resource.
103+
content:
104+
application/json:
105+
schema:
106+
$ref: '#/components/schemas/RestErrorMessage'
107+
'500':
108+
description: Internal server error.
109+
content:
110+
application/json:
111+
schema:
112+
$ref: '#/components/schemas/CreateProjectResponse'
113+
components:
114+
schemas:
115+
RestErrorMessage:
116+
properties:
117+
message:
118+
type: string
119+
required:
120+
- message
121+
CreateProjectRequest:
122+
type: object
123+
properties:
124+
projectKey:
125+
type: string
126+
description: Optional project key. If not provided, a unique key will be generated.
127+
projectKeyPattern:
128+
type: string
129+
description: Optional pattern for generating the project key (e.g. 'SS%06d').
130+
projectName:
131+
type: string
132+
description: Name of the project.
133+
projectDescription:
134+
type: string
135+
description: Description of the project.
136+
required:
137+
- projectName
138+
CreateProjectResponse:
139+
type: object
140+
properties:
141+
projectKey:
142+
type: string
143+
status:
144+
type: string
145+
message:
146+
type: string
147+
error:
148+
type: string
149+
errorKey:
150+
type: string
151+
errorDescription:
152+
type: string

api-project/pom.xml

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<parent>
7+
<groupId>org.opendevstack.apiservice</groupId>
8+
<artifactId>devstack-api-service</artifactId>
9+
<version>0.0.3</version>
10+
</parent>
11+
12+
<artifactId>api-project</artifactId>
13+
<name>API Projects</name>
14+
<description>API module for managing EDP projects</description>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>org.springframework.boot</groupId>
19+
<artifactId>spring-boot-starter-web</artifactId>
20+
</dependency>
21+
22+
<dependency>
23+
<groupId>org.springframework.boot</groupId>
24+
<artifactId>spring-boot-starter-security</artifactId>
25+
</dependency>
26+
27+
<dependency>
28+
<groupId>org.springframework.boot</groupId>
29+
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
30+
</dependency>
31+
32+
<dependency>
33+
<groupId>org.springframework.boot</groupId>
34+
<artifactId>spring-boot-starter-validation</artifactId>
35+
</dependency>
36+
37+
<dependency>
38+
<groupId>org.springdoc</groupId>
39+
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
40+
</dependency>
41+
42+
<dependency>
43+
<groupId>org.opendevstack.apiservice</groupId>
44+
<artifactId>service-projects</artifactId>
45+
<version>${project.version}</version>
46+
</dependency>
47+
48+
<dependency>
49+
<groupId>io.jsonwebtoken</groupId>
50+
<artifactId>jjwt-api</artifactId>
51+
<version>0.12.3</version>
52+
</dependency>
53+
54+
<dependency>
55+
<groupId>io.jsonwebtoken</groupId>
56+
<artifactId>jjwt-impl</artifactId>
57+
<version>0.12.3</version>
58+
<scope>runtime</scope>
59+
</dependency>
60+
61+
<dependency>
62+
<groupId>io.jsonwebtoken</groupId>
63+
<artifactId>jjwt-jackson</artifactId>
64+
<version>0.12.3</version>
65+
<scope>runtime</scope>
66+
</dependency>
67+
68+
<dependency>
69+
<groupId>org.projectlombok</groupId>
70+
<artifactId>lombok</artifactId>
71+
<scope>provided</scope>
72+
</dependency>
73+
74+
<dependency>
75+
<groupId>org.mapstruct</groupId>
76+
<artifactId>mapstruct</artifactId>
77+
<version>1.6.3</version>
78+
</dependency>
79+
80+
<dependency>
81+
<groupId>org.openapitools</groupId>
82+
<artifactId>jackson-databind-nullable</artifactId>
83+
<version>${jackson-databind-nullable.version}</version>
84+
</dependency>
85+
86+
<!-- Test dependencies -->
87+
88+
<dependency>
89+
<groupId>org.springframework.boot</groupId>
90+
<artifactId>spring-boot-starter-test</artifactId>
91+
<scope>test</scope>
92+
</dependency>
93+
<dependency>
94+
<groupId>org.springframework.security</groupId>
95+
<artifactId>spring-security-core</artifactId>
96+
</dependency>
97+
</dependencies>
98+
99+
<build>
100+
<plugins>
101+
<plugin>
102+
<groupId>org.apache.maven.plugins</groupId>
103+
<artifactId>maven-compiler-plugin</artifactId>
104+
<configuration>
105+
<annotationProcessorPaths>
106+
<path>
107+
<groupId>org.projectlombok</groupId>
108+
<artifactId>lombok</artifactId>
109+
<version>${lombok.version}</version>
110+
</path>
111+
<path>
112+
<groupId>org.mapstruct</groupId>
113+
<artifactId>mapstruct-processor</artifactId>
114+
<version>1.6.3</version>
115+
</path>
116+
</annotationProcessorPaths>
117+
</configuration>
118+
</plugin>
119+
<plugin>
120+
<groupId>org.openapitools</groupId>
121+
<artifactId>openapi-generator-maven-plugin</artifactId>
122+
<executions>
123+
<execution>
124+
<id>generate-api-project</id>
125+
<goals>
126+
<goal>generate</goal>
127+
</goals>
128+
<configuration>
129+
<generatorName>spring</generatorName>
130+
<output>${project.basedir}</output>
131+
<library>spring-boot</library>
132+
<inputSpec>${project.basedir}/openapi/api-project.yaml</inputSpec>
133+
<apiPackage>org.opendevstack.apiservice.project.api</apiPackage>
134+
<modelPackage>org.opendevstack.apiservice.project.model</modelPackage>
135+
<invokerPackage>org.opendevstack.apiservice.project</invokerPackage>
136+
<skipOverwrite>false</skipOverwrite>
137+
<generateApiTests>false</generateApiTests>
138+
<generateModelTests>false</generateModelTests>
139+
<generateApiDocumentation>false</generateApiDocumentation>
140+
<generateModelDocumentation>false</generateModelDocumentation>
141+
<generateSupportingFiles>false</generateSupportingFiles>
142+
<configOptions>
143+
<interfaceOnly>true</interfaceOnly>
144+
<useSpringBoot3>true</useSpringBoot3>
145+
<documentationProvider>springdoc</documentationProvider>
146+
<skipDefaultInterface>true</skipDefaultInterface>
147+
<hideGenerationTimestamp>true</hideGenerationTimestamp>
148+
<useTags>true</useTags>
149+
</configOptions>
150+
</configuration>
151+
</execution>
152+
</executions>
153+
</plugin>
154+
<plugin>
155+
<groupId>org.springframework.boot</groupId>
156+
<artifactId>spring-boot-maven-plugin</artifactId>
157+
<configuration>
158+
<skip>true</skip>
159+
</configuration>
160+
</plugin>
161+
</plugins>
162+
</build>
163+
</project>

0 commit comments

Comments
 (0)