added fake api call

This commit is contained in:
AzureAD\ShqipeShehu 2025-04-28 17:26:04 +02:00
parent db3b7345d2
commit 1a904e94ff
14 changed files with 1611 additions and 250 deletions

3
.npmrc Normal file
View File

@ -0,0 +1,3 @@
registry=https://nexus.armundia.com/repository/npm-public
//nexus.armundia.com/repository/:_authToken=NpmToken.d8eed85e-3da0-3098-b802-07d9f4ab5c54
always-auth=true

View File

@ -65,7 +65,8 @@
"serve": { "serve": {
"builder": "@angular-devkit/build-angular:dev-server", "builder": "@angular-devkit/build-angular:dev-server",
"options": { "options": {
"browserTarget": "angular-project-demo:build" "browserTarget": "angular-project-demo:build",
"proxyConfig": "proxy.config.json"
}, },
"configurations": { "configurations": {
"production": { "production": {

63
db.json Normal file
View File

@ -0,0 +1,63 @@
{
"posts": [
{
"id": 1,
"title": "Hello World"
},
{
"id": 2,
"title": "Another Post"
}
],
"users": [
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"role": [
"Admin"
]
},
{
"id": 2,
"name": "Jane Dooee",
"email": "jane@example.com",
"role": [
"User"
]
},
{
"id": 3,
"name": "Bob Smith",
"email": "bob@example.com",
"role": [
"Moderator",
"User"
]
},
{
"id": 4,
"name": "Alice Johnson",
"email": "alice@example.com",
"role": [
"User"
]
},
{
"id": 5,
"name": "Mike Brown",
"email": "mike@example.com",
"role": [
"Admin"
]
},
{
"name": "test",
"email": "test",
"role": [
"Admin"
],
"id": 6
}
]
}

1658
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -26,8 +26,13 @@
"ag-grid-community": "^22.1.1", "ag-grid-community": "^22.1.1",
"bootstrap": "^4.1.1", "bootstrap": "^4.1.1",
"core-js": "^2.5.4", "core-js": "^2.5.4",
"cors": "^2.8.5",
"express": "^4.17.1",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"json-server": "^0.16.3",
"rxjs": "~6.3.3", "rxjs": "~6.3.3",
"swagger-jsdoc": "^6.0.0",
"swagger-ui-express": "^4.1.6",
"tslib": "^1.9.0", "tslib": "^1.9.0",
"zone.js": "~0.8.26" "zone.js": "~0.8.26"
}, },

9
proxy.config.json Normal file
View File

@ -0,0 +1,9 @@
{
"/api": {
"target": "http://localhost:3001/api",
"secure": false,
"changeOrigin": true,
"logLevel": "debug"
}
}

35
server.js Normal file
View File

@ -0,0 +1,35 @@
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const swaggerJsdoc = require('swagger-jsdoc');
const jsonServer = require('json-server');
const app = express();
const port = 3001; // different from Angular 4200
const cors = require('cors');
app.use(cors());
// Swagger setup
const options = {
swaggerDefinition: {
openapi: '3.0.0',
info: {
title: 'Fake API',
version: '1.0.0',
},
},
apis: ['./swagger.yaml'], // Your API spec
};
const swaggerSpec = swaggerJsdoc(options);
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
// JSON Server setup
const router = jsonServer.router('db.json');
const middlewares = jsonServer.defaults();
app.use('/api', middlewares, router);
app.listen(port, () => {
console.log(`🚀 Server running at http://localhost:${port}`);
console.log(`📚 Swagger docs at http://localhost:${port}/api-docs`);
});

View File

@ -1,6 +1,6 @@
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { MenuComponent } from '../components/menu/menu.component'; import { MenuComponent } from '../components/menu/menu.component';
@ -17,6 +17,7 @@ import { DashboardComponent } from 'src/components/dashboard/dashboard.component
imports: [ imports: [
BrowserModule, BrowserModule,
AppRoutingModule, AppRoutingModule,
HttpClientModule
], ],
providers: [], providers: [],
bootstrap: [AppComponent] bootstrap: [AppComponent]

View File

@ -1,6 +1,6 @@
<nav class="navbar navbar-dark bg-dark navbar-expand-lg bg-body-tertiary"> <nav class="navbar navbar-dark bg-dark navbar-expand-lg bg-body-tertiary">
<div class="container-fluid"> <div class="container-fluid">
<a class="navbar-brand" href="#">Navbar</a> <a class="navbar-brand" href="#">Angular Tutorial</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>

View File

@ -1,3 +1,13 @@
<p> <div class="container-fluid">
users works! <div class="row">
</p> <div class="col-12">
<button class="btn btn-primary" type="button">Add new User</button>
</div>
</div>
<div class="row">
<div class="col-12">
<!-- Table of users -->
<p>users works!</p>
</div>
</div>
</div>

View File

@ -0,0 +1,4 @@
button{
float: right;
margin: 2rem;
}

View File

@ -1,15 +1,44 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from "@angular/core";
import { ServicesService } from "src/services/services.service";
@Component({ @Component({
selector: 'app-users', selector: "app-users",
templateUrl: './users.component.html', templateUrl: "./users.component.html",
styleUrls: ['./users.component.scss'] styleUrls: ["./users.component.scss"],
}) })
export class UsersComponent implements OnInit { export class UsersComponent implements OnInit {
users: any[] = []; // where you store users
constructor() { } newUser: any = {
name: 'test',
email: 'test',
role: ['Admin']
};
constructor(private servicesService: ServicesService) {}
ngOnInit() { ngOnInit() {
this.getUsers();
} }
getUsers() {
this.servicesService.get<any[]>("users").subscribe(
(data) => {
this.users = data;
console.log("Users loaded:", data);
},
(error) => {
console.error("Error loading users:", error);
}
);
}
createUser() {
this.servicesService.post('users', this.newUser)
.subscribe(
response => {
console.log('User created successfully:', response);
},
error => {
console.error('Error creating user:', error);
}
);
}
} }

View File

@ -7,7 +7,7 @@ import { Observable } from 'rxjs';
}) })
export class ServicesService { export class ServicesService {
private baseUrl = 'https://your-api-url.com/api'; // Set your base URL private baseUrl = 'http://localhost:3001/api';
constructor(private http: HttpClient) {} constructor(private http: HttpClient) {}

17
swagger.yaml Normal file
View File

@ -0,0 +1,17 @@
openapi: 3.0.0
info:
title: Fake API
version: "1.0"
paths:
/api/posts:
get:
summary: Get all posts
responses:
'200':
description: List of posts
/api/users:
get:
summary: Get all users
responses:
'200':
description: List of users