changements dans les dockerfiles + ajout de quelques trucs pour svelte en PoC

This commit is contained in:
batche
2022-11-14 16:02:54 +01:00
parent 8b4545f4d6
commit aa3eb111c1
15 changed files with 213 additions and 320 deletions

View File

@@ -17,14 +17,11 @@ prod:
start: start:
docker compose -f ${DOCKERCOMPOSEPATH} start docker compose -f ${DOCKERCOMPOSEPATH} start
docker logs --follow nestjs_api_back_dev docker logs --follow srcs-backend_dev-1
start_dev: start_dev:
docker compose -f ${DOCKERCOMPOSEPATH} start dev docker compose -f ${DOCKERCOMPOSEPATH} start dev
docker logs --follow nestjs_api_back_dev docker logs --follow srcs-backend_dev-1
start_debug:
docker compose -f ${DOCKERCOMPOSEPATH} start debug
start_prod: start_prod:
docker compose -f ${DOCKERCOMPOSEPATH} start prod docker compose -f ${DOCKERCOMPOSEPATH} start prod

View File

@@ -1,17 +1,12 @@
services: services:
backend_dev: backend_dev:
container_name: nestjs_api_back_dev
image: nestjs_api_back_dev
build: build:
context: ./requirements/nestjs context: ./requirements/nestjs
target: development target: development
dockerfile: Dockerfile dockerfile: Dockerfile
command: npm run start:dev
networks:
- transcendance_network
volumes: volumes:
- ./requirements/nestjs/api_back:/usr/src/app - ./requirements/nestjs/api_back/src:/usr/app/src
- /usr/src/app/node_modules - ./requirements/nestjs/api_back/test:/usr/app/test/
env_file: env_file:
- .env - .env
environment: environment:
@@ -21,43 +16,14 @@ services:
- postgresql - postgresql
- redis - redis
# backend_prod:
# container_name: nestjs_api_back_prod
# image: nestjs_api_back_prod
# build:
# context: ./requirements/nestjs
# target: production
# dockerfile: Dockerfile
# command: npm run start:prod
# ports:
# - 3000:3000
# networks:
# - transcendance_network
# volumes:
# - data_nest_back:/usr/src/app
# - /usr/src/app/node_modules
# restart: unless-stopped
# env_file:
# - .env
# environment:
# NODE_ENV: "${NODE_ENV}"
# depends_on:
# - postgresql
# - redis
frontend_dev: frontend_dev:
container_name: nestjs_api_front_dev
image: nestjs_api_front_dev
build: build:
context: ./requirements/svelte context: ./requirements/svelte
target: development target: development
dockerfile: Dockerfile dockerfile: Dockerfile
command: npm run dev
networks:
- transcendance_network
volumes: volumes:
- ./requirements/svelte/api_front:/usr/src/app - ./requirements/svelte/api_front/src:/usr/app/src/
- /usr/src/app/node_modules - ./requirements/svelte/api_front/public:/usr/app/public/
env_file: env_file:
- .env - .env
environment: environment:
@@ -68,16 +34,15 @@ services:
- redis - redis
- backend_dev - backend_dev
# t'embete pas a gerer ton propre container nginx
nginx: nginx:
container_name: nginx image: nginx:alpine
build:
context: ./requirements/nginx
dockerfile: Dockerfile
ports:
- 8080:8080
networks:
- transcendance_network
restart: unless-stopped restart: unless-stopped
volumes:
- ./requirements/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf:ro
command: [nginx-debug, "-g", "daemon off;"]
ports:
- "8080:8080"
depends_on: depends_on:
- backend_dev - backend_dev
- frontend_dev - frontend_dev
@@ -87,10 +52,6 @@ services:
postgresql: postgresql:
container_name: nestjs_postgresql container_name: nestjs_postgresql
image: postgres image: postgres
# ports:
# - 5432:5432
networks:
- transcendance_network
volumes: volumes:
- data_nest_postgresql:/var/lib/postgresql/data - data_nest_postgresql:/var/lib/postgresql/data
restart: unless-stopped restart: unless-stopped
@@ -101,54 +62,16 @@ services:
POSTGRES_HOST: "${POSTGRES_HOST}" POSTGRES_HOST: "${POSTGRES_HOST}"
POSTGRES_PORT: "${POSTGRES_PORT}" POSTGRES_PORT: "${POSTGRES_PORT}"
# Je connais pas redis, mais si t'en a besoin que a l'interieur de tes containers, je pense pas que t'as besoin d'un expose.
redis: redis:
container_name: nestjs_redis container_name: nestjs_redis
image: redis:alpine image: redis:alpine
expose: expose:
- "6379" - "6379"
networks:
- transcendance_network
restart: unless-stopped restart: unless-stopped
environment: environment:
REDIS_HOST: "${REDIS_HOST}" REDIS_HOST: "${REDIS_HOST}"
REDIS_PORT: "${REDIS_PORT}" REDIS_PORT: "${REDIS_PORT}"
networks:
transcendance_network:
driver: bridge
volumes: volumes:
data_nest_back:
data_nest_postgresql: data_nest_postgresql:
data_nest_redis:
# debug:
# container_name: nestjs_api_debug
# image: nestjs_api_debug
# build:
# context: ./requirements/nestjs
# target: development
# dockerfile: Dockerfile
# command: run start:dev --debug 0.0.0.0:9229
# ports:
# - 3000:3000
# - 9229:9229
# networks:
# - transcendance_network
# volumes:
# - ./requirements/nestjs/api_back:/usr/src/app
# - /usr/src/app/node_modules
# env_file:
# - .env
# environment:
# NODE_ENV: "${NODE_ENV}"
# DEBUG: "*" # enable all debug logs
# restart: unless-stopped
# depends_on:
# - postgresql

View File

@@ -0,0 +1,11 @@
# Ignore everything
*
# Allow files and folders with a pattern starting with !
!api_back/*.js
!api_back/*.ts
!api_back/*.json
!api_back/*.html
!api_back/*.lock
!api_back/.env

View File

@@ -1,42 +1,10 @@
FROM node:alpine AS development FROM node:alpine AS development
WORKDIR /usr/src/app WORKDIR /usr/app
COPY --chown=node:node ./api_back/package*.json ./ COPY api_back/* .
COPY api_back/.env .env
RUN npm i RUN npm ci
COPY --chown=node:node ./api_back/ ./ CMD [ "npm", "run", "start:dev" ]
USER node
# FROM node:19-alpine AS build
# WORKDIR /usr/src/app
# COPY --chown=node:node ./api_back/package*.json ./
# COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules
# COPY --chown=node:node ./api_back/ ./
# RUN npm run build
# ENV NODE_ENV production
# RUN npm ci --only=production && npm cache clean --force
# USER node
# FROM node:19-alpine AS production
# WORKDIR /usr/src/app
# COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
# COPY --chown=node:node --from=build /usr/src/app/dist ./dist
# USER node
ENV HOST=0.0.0.0
CMD [ "node", "run", "start:dev" ]

View File

@@ -36,17 +36,6 @@ export class AuthenticationController {
return response.status(200).redirect('http://transcendance:8080'); return response.status(200).redirect('http://transcendance:8080');
} }
/**
* GET /api/v2/auth/status
* Route pour vérifier si l'utilisateur est connecté
* ou non.
*/
@Get('status')
@UseGuards(AuthenticateGuard)
status() {
return 'status';
}
/** /**
* GET /api/v2/auth/logout * GET /api/v2/auth/logout
* Route pour déconnecter l'utilisateur * Route pour déconnecter l'utilisateur

View File

@@ -24,7 +24,7 @@ export class FriendshipController {
return this.friendshipService.findOneFriend(relationshipId, user.id); return this.friendshipService.findOneFriend(relationshipId, user.id);
} }
// POST http://127.0.0.1:3000/api/v2/network/ // POST http://127.0.0.1:3000/api/v2/network/myfriends
@Post('myfriends') @Post('myfriends')
@HttpCode(HttpStatus.CREATED) @HttpCode(HttpStatus.CREATED)
@UseGuards(AuthenticateGuard) @UseGuards(AuthenticateGuard)

View File

@@ -30,6 +30,9 @@ export class User {
@Column('json', { nullable: true }) @Column('json', { nullable: true })
status: [string]; status: [string];
// @Column()
// isFirstConnection: boolean;
@Column({ default: false, nullable: true }) @Column({ default: false, nullable: true })
isEnabledTwoFactorAuth: boolean; isEnabledTwoFactorAuth: boolean;

View File

@@ -31,18 +31,18 @@ export class UsersController {
* car un utilisateur est crée à la première connexion avec l'Oauth de 42. * car un utilisateur est crée à la première connexion avec l'Oauth de 42.
*/ */
@UseGuards(AuthenticateGuard) // @UseGuards(AuthenticateGuard)
@Get() // @Get()
findOne(@Req() req) { // findOne(@Req() req) {
return this.usersService.findOne(req.user.id); // return this.usersService.findOne(req.user.id);
} // }
@UseGuards(AuthenticateGuard) // @UseGuards(AuthenticateGuard)
@Post() // @Post()
@HttpCode(HttpStatus.CREATED) // @HttpCode(HttpStatus.CREATED)
create(@Body() createUsersDto : CreateUsersDto ) { // create(@Body() createUsersDto : CreateUsersDto ) {
return this.usersService.create(createUsersDto); // return this.usersService.create(createUsersDto);
} // }
@UseGuards(AuthenticateGuard) @UseGuards(AuthenticateGuard)
@Patch() @Patch()

View File

@@ -0,0 +1,10 @@
# Ignore everything
*
# Allow files and folders with a pattern starting with !
!api_front/*.js
!api_front/*.ts
!api_front/*.json
!api_front/*.html
!api_front/*.lock

View File

@@ -1,42 +1,9 @@
FROM node:alpine AS development FROM node:alpine AS development
WORKDIR /usr/src/app WORKDIR /usr/app
COPY --chown=node:node ./api_front/package*.json ./ COPY ./api_front/* .
RUN npm i RUN npm ci
COPY --chown=node:node ./api_front/ ./ CMD [ "npm", "run", "dev" ]
USER node
# FROM node:19-alpine AS build
# WORKDIR /usr/src/app
# COPY --chown=node:node ./api_front/package*.json ./
# COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules
# COPY --chown=node:node ./api_front/ ./
# RUN npm run build
# ENV NODE_ENV production
# RUN npm ci --only=production && npm cache clean --force
# USER node
# FROM node:19-alpine AS production
# WORKDIR /usr/src/app
# COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
# COPY --chown=node:node --from=build /usr/src/app/dist ./dist
# USER node
ENV HOST=0.0.0.0
CMD [ "node", "run", "dev"]

View File

@@ -5,7 +5,7 @@
"scripts": { "scripts": {
"build": "rollup -c", "build": "rollup -c",
"dev": "rollup -c -w", "dev": "rollup -c -w",
"start": "sirv public --no-clear", "start": "sirv public --no-clear --host",
"check": "svelte-check --tsconfig ./tsconfig.json" "check": "svelte-check --tsconfig ./tsconfig.json"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -2,10 +2,12 @@
import Login from "./pages/auth/login.svelte"; import Login from "./pages/auth/login.svelte";
import Home from "./pages/home/home.svelte"; import Home from "./pages/home/home.svelte";
import Router, {link} from 'svelte-spa-router'; import Router, {link} from 'svelte-spa-router';
import Profil from "./pages/profil/profil.svelte";
const routes = { const routes = {
"/": Home, "/": Home,
"/login": Login, "/login": Login,
"/profil": Profil,
}; };
</script> </script>
@@ -19,10 +21,12 @@
<li> <li>
<a href="/" type="button" class="btn btn-primary">Home</a> <a href="/" type="button" class="btn btn-primary">Home</a>
</li> </li>
<!-- <li>
<a href="/profil" use:link type="button" class="btn btn-primary">Profil</a>
</li> -->
</ul> </ul>
<div class="text-end"> <div class="text-end">
<a href="/login" use:link type="button" class="btn btn-warning">Connexion</a> <a href="/login" use:link type="button" class="btn btn-warning">Connexion</a>
</div> </div>
</div> </div>

View File

@@ -1,18 +1,23 @@
<script lang="ts"> <script lang="ts">
import axios from 'axios'; import axios from 'axios';
import { onMount } from 'svelte';
import {push} from 'svelte-spa-router'; import {push} from 'svelte-spa-router';
let user = {logedIn: false}; let user = {logedIn: false};
onMount(async () => {
console.log('PROFIL SVELTE');
const {data} = await axios.get('http://transcendance:8080/api/v2/user');
if (data)
user.logedIn = true;
});
$: submit = async() => { $: submit = async() => {
window.location.href = 'http://transcendance:8080/api/v2/auth'; window.location.href = 'http://transcendance:8080/api/v2/auth';
if (document.cookie) {
user.logedIn = true;
}
} }
$: logout = async() => { $: logout = async() => {
fetch('http://transcendance:8080/api/v2/auth/logout'); await fetch('http://transcendance:8080/api/v2/auth/logout',);
user.logedIn = false; user.logedIn = false;
} }

View File

@@ -1,69 +1,55 @@
<script> <script>
let href = import Router, { link } from "svelte-spa-router";
import Login from "../auth/login.svelte";
import Profil from "../profil/profil.svelte";
const routes = {
"/login": Login,
"/profil": Profil,
};
</script> </script>
<body> <body>
<main class="d-flex flex-nowrap"> <main class="d-flex flex-nowrap">
<h1 class="visually-hidden">Sidebars examples</h1> <h1 class="visually-hidden">Sidebars examples</h1>
<div class="d-flex flex-column flex-shrink-0 p-3 text-bg-dark" style="width: 280px;"> <div
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none"> class="d-flex flex-column flex-shrink-0 p-3 text-bg-dark"
<svg class="bi pe-none me-2" width="40" height="32"><use xlink:href="#bootstrap"/></svg> style="width: 280px;"
>
<a href="/" use:link class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none">
<span class="fs-4">Sidebar</span> <span class="fs-4">Sidebar</span>
</a> </a>
<hr> <hr />
<ul class="nav nav-pills flex-column mb-auto"> <ul class="nav nav-pills flex-column mb-auto">
<li class="nav-item"> <li class="nav-item">
<a href="/pouepouet" class="nav-link active" aria-current="page"> <a
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#home"/></svg> href="/profil"
use:link
class="nav-link active"
aria-current="page"
>
Profil Profil
</a> </a>
</li> </li>
<li>
<a href="#" class="nav-link text-white" on:click={color}>
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#speedometer2"/></svg>
Dashboard
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#table"/></svg>
Orders
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#grid"/></svg>
Products
</a>
</li>
<li>
<a href="#" class="nav-link text-white">
<svg class="bi pe-none me-2" width="16" height="16"><use xlink:href="#people-circle"/></svg>
Customers
</a>
</li>
</ul> </ul>
<hr> <hr />
</div> </div>
</main> </main>
</body> </body>
<Router {routes} />
<style> <style>
body { body {
min-height: 100vh; min-height: 100vh;
min-height: -webkit-fill-available; min-height: -webkit-fill-available;
} }
main {
main {
height: 100vh; height: 100vh;
height: -webkit-fill-available; height: -webkit-fill-available;
max-height: 100vh; max-height: 100vh;
overflow-x: auto; overflow-x: auto;
overflow-y: hidden; overflow-y: hidden;
} }
.dropdown-toggle { outline: 0; }
</style> </style>

View File

@@ -1,14 +1,44 @@
<script> <script>
import axios from "axios";
import { onMount } from "svelte"; import { onMount } from "svelte";
let user = {};
onMount (async() => { onMount (async() => {
const response = await fetch('http://transcendance:8080/api/v2/user'); console.log("PROFIL SVELTE");
const data = await response.json(); const {data} = await axios.get('http://transcendance:8080/api/v2/user');
console.log(data.username);
console.log(data); console.log(data);
user = data;
}); });
const profile = {
</script> </script>
<body>
<main class="form-signin w-100 m-auto">
<div class="container">
<div class="row">
<div class="col-12">
<h1>Profil</h1>
<ul>
<li>username : {user.username}</li>
</ul>
</div>
</div>
</div>
</main>
</body>
<style>
body {
display: flex;
align-items: center;
padding-top: 40px;
padding-bottom: 40px;
}
.form-signin {
max-width: 330px;
padding: 15px;
}
</style>