Skip to content

Commit

Permalink
Merge pull request #59 from Arquisoft/PruebaConjunto
Browse files Browse the repository at this point in the history
merge with master PruebaConjunto
  • Loading branch information
lauracc97 authored Apr 22, 2024
2 parents d43f0f4 + 1d972af commit 4adc7bb
Show file tree
Hide file tree
Showing 26 changed files with 1,095 additions and 212 deletions.
6 changes: 6 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,16 @@ jobs:
node-version: 20
- run: npm --prefix users/authservice ci
- run: npm --prefix users/userservice ci
- run: npm --prefix questions/template-questions ci
- run: npm --prefix recordhistory ci
- run: npm --prefix gatewayservice ci
- run: npm --prefix webapp ci
- run: npm --prefix users/authservice test -- --coverage
- run: npm --prefix users/userservice test -- --coverage
- run: npm --prefix questions/template-questions test -- --coverage
- run: npm --prefix recordhistory test -- --coverage
- run: npm --prefix gatewayservice test -- --coverage
- run: npm --prefix webapp test -- --coverage
- name: Analyze with SonarCloud
uses: sonarsource/sonarcloud-github-action@master
env:
Expand Down
44 changes: 44 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,46 @@ on:
types: [published]

jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm --prefix users/authservice ci
- run: npm --prefix users/userservice ci
- run: npm --prefix questions/template-questions ci
- run: npm --prefix recordhistory ci
- run: npm --prefix gatewayservice ci
- run: npm --prefix webapp ci
- run: npm --prefix users/authservice test -- --coverage
- run: npm --prefix users/userservice test -- --coverage
- run: npm --prefix questions/template-questions test -- --coverage
- run: npm --prefix recordhistory test -- --coverage
- run: npm --prefix gatewayservice test -- --coverage
- run: npm --prefix webapp test -- --coverage
- name: Analyze with SonarCloud
uses: sonarsource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
e2e-tests:
needs: [unit-tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm --prefix users/authservice install
- run: npm --prefix users/userservice install
- run: npm --prefix questions/template-questions install
- run: npm --prefix recordhistory install
- run: npm --prefix gatewayservice install
- run: npm --prefix webapp install
- run: npm --prefix webapp run build
- run: npm --prefix webapp run test:e2e
docker-push-webapp:
name: Push webapp Docker Image to GitHub Packages
runs-on: ubuntu-latest
Expand Down Expand Up @@ -96,6 +136,10 @@ jobs:
packages: write
steps:
- uses: actions/checkout@v4
- name: Update OpenAPI configuration
run: |
DEPLOY_HOST=${{ secrets.DEPLOY_HOST }}
sed -i "s/SOMEIP/${DEPLOY_HOST}/g" gatewayservice/openapi.yaml
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@v5
with:
Expand Down
30 changes: 30 additions & 0 deletions gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ const axios = require('axios');
const cors = require('cors');
const promBundle = require('express-prom-bundle');

//libraries required for OpenAPI-Swagger
const swaggerUi = require('swagger-ui-express');
const fs = require("fs")
const YAML = require('yaml')

const app = express();
const port = 8000;

Expand Down Expand Up @@ -70,6 +75,31 @@ app.post('/getRecords', async (req, res) => {
}
});

app.get('/getAllUsers', async (req, res) => {
try {
const userResponse = await axios.get(userServiceUrl+'/getAllUsers', req.body);
res.json(userResponse.data);
} catch (error) {
res.status(error.response.status).json({ error: error.response.data.error });
}
});

// Read the OpenAPI YAML file synchronously
openapiPath='./openapi.yaml'
if (fs.existsSync(openapiPath)) {
const file = fs.readFileSync(openapiPath, 'utf8');

// Parse the YAML content into a JavaScript object representing the Swagger document
const swaggerDocument = YAML.parse(file);

// Serve the Swagger UI documentation at the '/api-doc' endpoint
// This middleware serves the Swagger UI files and sets up the Swagger UI page
// It takes the parsed Swagger document as input
app.use('/api-doc', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
} else {
console.log("Not configuring OpenAPI. Configuration file not present.")
}

// Start the gateway service
const server = app.listen(port, () => {
console.log(`Gateway Service listening at http://localhost:${port}`);
Expand Down
273 changes: 273 additions & 0 deletions gatewayservice/openapi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,273 @@
openapi: 3.0.0
info:
title: Gatewayservice API
description: Gateway OpenAPI specification.
version: 0.2.0
servers:
- url: http://localhost:8000
description: Development server
- url: http://SOMEIP:8000
description: Production server
paths:
/adduser:
post:
summary: Add a new user to the database.
operationId: addUser
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
description: User ID.
example: student
password:
type: string
description: User password.
example: pass
responses:
'200':
description: User added successfully.
content:
application/json:
schema:
type: object
properties:
username:
type: string
description: User ID
password:
type: string
description: Hashed password
example: $2b$10$ZKdNYLWFQxzt5Rei/YTc/OsZNi12YiWz30JeUFHNdAt7MyfmkTuvC
_id:
type: string
description: Identification
example: 65f756db3fa22d227a4b7c7d
createdAt:
type: string
description: Creation date.
example: '2024-03-17T20:47:23.935Z'
___v:
type: integer
example: '0'
'400':
description: Failed to add user.
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Error information.
example: getaddrinfo EAI_AGAIN mongodb
/health:
get:
summary: Check the health status of the service.
operationId: checkHealth
responses:
'200':
description: Service is healthy.
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: Health status.
example: OK
/login:
post:
summary: Log in to the system.
operationId: loginUser
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
description: User ID.
example: student
password:
type: string
description: User password.
example: pass
responses:
'200':
description: Login successful. Returns user token, username, and creation date.
content:
application/json:
schema:
type: object
properties:
token:
type: string
description: User token.
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2NWY3NTZkYjNmYTIyZDIyN2E0YjdjN2QiLCJpYXQiOjE3MTA3MDg3NDUsImV4cCI6MTcxMDcxMjM0NX0.VMG_5DOyQ4GYlJQRcu1I6ICG1IGzuo2Xuei093ONHxw
username:
type: string
description: Username.
example: student
createdAt:
type: string
description: Creation date.
example: '2024-03-17T20:47:23.935Z'
'401':
description: Invalid credentials.
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Shows the error info..
example: Invalid credentials
'500':
description: Internal server error.
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Error information.
example: Internal Server Error

paths:
/questions:
post:
summary: Create a question and its answers.
operationId: questions
responses:
'200':
description: Question created successfully.
content:
application/json:
schema:
type: object
properties:
pregunta:
type: string
description: Question text
example: Who was the author of The Hunger Games?
correcta:
type: string
description: Correct answer
example: Suzzanne Collins
incorrectas:
type: array
items:
type: string
example:
- Sarah J. Maas
- Alice Oseman
- Veronica Roth
'400':
description: Failed to create question.
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Wikidata error conection.
example: Cannot connect with Wikidata

/getRecords:
post:
summary: Obtains the records of the user.
operationId: userRecords
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
description: User ID.
example: student
responses:
'200':
description: Get Records successful.
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: Username.
example: student
correctQuestions:
type: number
description: Number of correct questions.
example: 2
totalQuestions:
type: number
description: Number of questions.
example: 5
totalTime:
type: number
description: Time spent playing in seconds.
example: 26
doneAt:
type: string
description: When was the game done.
example: '2024-03-17T20:47:23.935Z'


'400':
description: User is not valid or doesn't exist.
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Shows the error info..
example: Invalid user
/getAllUsers:
get:
summary: Obtains the information of all users.
operationId: allUsers
responses:
'200':
description: Get Users successful.
content:
application/json:
schema:
type: object
properties:
username:
type: string
description: Username of the user.
example: student
createdAt:
type: string
description: When the account was created
example: '2024-03-05T15:10:51.313Z'
'500':
description: Internal server error.
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Error information.
example: Internal Server Error
Loading

0 comments on commit 4adc7bb

Please sign in to comment.