Compare commits
7 Commits
dae2f1de25
...
main
Author | SHA1 | Date | |
---|---|---|---|
25e5ce5a93 | |||
83724726b7 | |||
26b59425b7 | |||
de18726abb | |||
027f62ea0d | |||
c790f6fedd | |||
5b896502d5 |
1
backend_part1/jeu-concours/README.md
Normal file
@@ -0,0 +1 @@
|
||||
# Jeu concours
|
22
backend_part1/jeu-concours/app/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
# la ligne du dessus est la version de syntaxe du format Dockerfile
|
||||
|
||||
# Récupère l'image docker python:3.10-alpine sur DockerHub
|
||||
# AS builder permet de nommer cette image sour la référence "builder" pour la suite du fichier, à la manière d'un alias
|
||||
FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder
|
||||
|
||||
# définie le répertoire de travail, les commandes suivantes seront jouées à partir de ce répertoire
|
||||
WORKDIR /app
|
||||
|
||||
# on copie requirements.txt et app/ dans l'image
|
||||
COPY requirements.txt /app
|
||||
# installe les dépendance python à l'aide de PIP, disponible dans l'image suite au téléchargement de l'image python:3.10-alpine
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
pip3 install -r requirements.txt
|
||||
|
||||
# Copie l'ensemble des fichiers dans /app,
|
||||
COPY . /app
|
||||
|
||||
# Ces deux lignes permet au lancement de l'image, d'executer python3 avec comme argument app.py
|
||||
ENTRYPOINT ["python3"]
|
||||
CMD ["app.py"]
|
52
backend_part1/jeu-concours/app/app.py
Normal file
@@ -0,0 +1,52 @@
|
||||
import logging
|
||||
from flask import Flask, render_template
|
||||
from redis import Redis
|
||||
from pygelf import GelfTcpHandler, GelfUdpHandler, GelfTlsHandler, GelfHttpHandler
|
||||
import os
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
visitor_count = 0
|
||||
|
||||
# CONF
|
||||
cache_port = os.getenv('CACHE_PORT')
|
||||
cache_host = os.getenv('CACHE_HOST')
|
||||
app_port = os.getenv('APP_PORT')
|
||||
|
||||
def set_logger():
|
||||
log_handler = GelfUdpHandler(host='logstash' , port=12201)
|
||||
app.logger.addHandler(log_handler)
|
||||
# app.logger.setLevel(logging.INFO)
|
||||
|
||||
# GET REDIS
|
||||
def get_redis_connection():
|
||||
return Redis(host=cache_host, port=cache_port)
|
||||
|
||||
def init_visitor_count(redis_db: Redis):
|
||||
key = 'visitor_count'
|
||||
if not redis_db.exists(key):
|
||||
redis_db.set(key, 0)
|
||||
|
||||
# MAIN ROUTE
|
||||
@app.route('/')
|
||||
def index():
|
||||
try:
|
||||
set_logger()
|
||||
except Exception as e:
|
||||
print('Error: logger not available')
|
||||
|
||||
try:
|
||||
redis_db = get_redis_connection()
|
||||
init_visitor_count(redis_db)
|
||||
visitor_count = redis_db.incr('visitor_count')
|
||||
app.logger.info("Visit page")
|
||||
except Exception as e:
|
||||
return render_template('erreur.html', message=str(e))
|
||||
|
||||
if visitor_count == 10:
|
||||
return render_template('winner.html')
|
||||
|
||||
return render_template('index.html', visitor_count=visitor_count)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=app_port)
|
1
backend_part1/jeu-concours/app/requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
flask
|
BIN
backend_part1/jeu-concours/app/static/congratulations.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
backend_part1/jeu-concours/app/static/jetons.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
backend_part1/jeu-concours/app/static/oh_well.png
Normal file
After Width: | Height: | Size: 826 KiB |
71
backend_part1/jeu-concours/app/static/style.css
Normal file
@@ -0,0 +1,71 @@
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
text-align: center;
|
||||
padding: 50px;
|
||||
}
|
||||
|
||||
.container {
|
||||
background-color: #f2f2f2;
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* Conteneur de l'image */
|
||||
.img-container {
|
||||
width: 100%; /* Largeur complète */
|
||||
height: 150px; /* Hauteur fixée à 150px */
|
||||
overflow: hidden; /* Masquer tout ce qui dépasse */
|
||||
}
|
||||
|
||||
.oh-well {
|
||||
width: auto;
|
||||
height: 250px;
|
||||
}
|
||||
|
||||
.congratulations {
|
||||
width: auto;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
/* Conteneur de l'image */
|
||||
.img-container-bottom {
|
||||
height: 150px;
|
||||
overflow: hidden;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Style pour l'image des jetons */
|
||||
.img-jetons {
|
||||
width: 100%; /* Largeur complète */
|
||||
height: auto; /* Hauteur automatique pour maintenir le ratio */
|
||||
display: block; /* Assurer que l'image s'affiche correctement */
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #c3c3c3;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
font-size: 0.8em;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
footer p {
|
||||
margin: 0;
|
||||
line-height: 1.5;
|
||||
color: #000;
|
||||
}
|
69
backend_part1/jeu-concours/app/templates/10.html
Normal file
@@ -0,0 +1,69 @@
|
||||
<!DOCTYPE html>
|
||||
<!-- saved from url=(0087)https://moodle.ynov.com/pluginfile.php/1100513/mod_resource/content/0/winner%20tpl.html -->
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Jeu Concours</title>
|
||||
<link rel="stylesheet" href="../static/style.css">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com/"><link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin=""><link rel="stylesheet" href="./Jeu Concours_files/css2" class="wtd-font"><link rel="stylesheet" href="./Jeu Concours_files/css2(1)" class="wtd-font"></head>
|
||||
<body>
|
||||
<div class="img-container">
|
||||
<img src="../static/jetons.png" alt="Jetons de Casino" class="img-jetons">
|
||||
</div>
|
||||
<h1>Bienvenue sur notre jeu concours !</h1>
|
||||
<p class="congrat-text">Vous êtes le 10ème visiteur ! Bravo ! Vous avez gagné votre diplôme !</p>
|
||||
<img src="../static/congratulations.png" alt="Félicitations" class="congratulations" "="">
|
||||
|
||||
<div class="img-container-bottom">
|
||||
<img src="../static/jetons.png" alt="Jetons de Casino" class="img-jetons">
|
||||
</div>
|
||||
<footer>
|
||||
<p>
|
||||
Ce jeu concours est fourni à titre de divertissement uniquement. Aucun achat nécessaire.
|
||||
Toute ressemblance avec des personnes réelles, vivantes ou décédées, ou des événements réels est purement fortuite.
|
||||
Les conditions et restrictions s'appliquent. Voir les détails complets du jeu pour plus d'informations.
|
||||
</p>
|
||||
</footer>
|
||||
|
||||
|
||||
<script id="define-custom-element-wtd-root">
|
||||
(() => {
|
||||
window.customElements.whenDefined('wtd-root').then(() => {
|
||||
window.dispatchEvent(
|
||||
new CustomEvent('customElements.defined', {
|
||||
detail: {
|
||||
name: 'wtd-root',
|
||||
},
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
if (window.customElements.get('wtd-root')) return;
|
||||
|
||||
window.customElements.define('wtd-root', class extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this.attachShadow({ mode: 'open' });
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script><wtd-root id="cashback"><template shadowrootmode="open"><div id="root"></div><link rel="stylesheet" href="chrome-extension://emnoomldgleagdjapdeckpmebokijail/tailwind/tailwind.css"></template></wtd-root><script id="define-custom-element-wtd-div">
|
||||
(() => {
|
||||
window.customElements.whenDefined('wtd-div').then(() => {
|
||||
window.dispatchEvent(
|
||||
new CustomEvent('customElements.defined', {
|
||||
detail: {
|
||||
name: 'wtd-div',
|
||||
},
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
if (window.customElements.get('wtd-div')) return;
|
||||
|
||||
window.customElements.define('wtd-div', class extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script><wtd-div id="wanteeedContainer" style="position: fixed; display: block; top: 0px; right: 0px; z-index: 2147483647;"><wtd-root id="comparator"><template shadowrootmode="open"><div id="root"><div class="pointer-events-none z-[2147483647] flex select-none flex-col items-end overflow-hidden font-sans antialiased"></div></div><link rel="stylesheet" href="chrome-extension://emnoomldgleagdjapdeckpmebokijail/tailwind/tailwind.css"></template></wtd-root><iframe id="wanteeedPanel" data-version="1.134.0" allowtransparency="true" style="background-color: rgb(255, 255, 255); border: none; border-radius: 3px; box-shadow: rgb(181, 181, 181) 1px 1px 3px 2px; clip: auto; display: none; margin-left: auto; margin-right: 12px; margin-top: 12px; position: relative; z-index: 2147483647; height: 1px; width: 1px;" src="./Jeu Concours_files/saved_resource.html"></iframe></wtd-div><iframe id="wanteeedTestMaker" data-version="1.134.0" allowtransparency="true" style="border: none; clip: auto; display: none; left: 0px; overflow: hidden; position: fixed; top: 10px; transition: all 0.2s ease-out 0s; z-index: 45739864; height: 1px; width: 1px;" src="./Jeu Concours_files/saved_resource(1).html"></iframe></body></html>
|
27
backend_part1/jeu-concours/app/templates/index.html
Normal file
@@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Jeu Concours</title>
|
||||
<link rel="stylesheet" href="../static/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="img-container">
|
||||
<img src="../static/jetons.png" alt="Jetons de Casino" class="img-jetons">
|
||||
</div>
|
||||
<h1>Bienvenue sur notre jeu concours !</h1>
|
||||
<p>Vous êtes le {{ visitor_count }}ème visiteur.</p>
|
||||
<p>Retentez votre chance une autre fois !</p>
|
||||
<img src="../static/oh_well.png" alt="Désolé" class="oh-well">
|
||||
|
||||
<div class="img-container-bottom">
|
||||
<img src="../static//jetons.png" alt="Jetons de Casino" class="img-jetons">
|
||||
</div>
|
||||
<footer>
|
||||
<p>
|
||||
Ce jeu concours est fourni à titre de divertissement uniquement. Aucun achat nécessaire.
|
||||
Toute ressemblance avec des personnes réelles, vivantes ou décédées, ou des événements réels est purement fortuite.
|
||||
Les conditions et restrictions s'appliquent. Voir les détails complets du jeu pour plus d'informations.
|
||||
</p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
20
backend_part1/jeu-concours/app/tests/test__10th_visit.py
Normal file
@@ -0,0 +1,20 @@
|
||||
import unittest
|
||||
from app import app
|
||||
|
||||
class FlaskAppTests(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
# Crée un client de test
|
||||
self.app = app.test_client()
|
||||
self.app.testing = True
|
||||
|
||||
def test_winner_template_rendered_on_10th_visit(self):
|
||||
# Test pour vérifier si le template winner.html est rendu après le 10ème visite
|
||||
for _ in range(9):
|
||||
self.app.get('/')
|
||||
response = self.app.get('/')
|
||||
# Cette assertion dépend de la manière dont vous affichez le contenu dans 'winner.html'
|
||||
self.assertIn('Vous avez gagné votre diplôme', response.get_data(as_text=True))
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
18
backend_part1/jeu-concours/app/tests/test_app.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import unittest
|
||||
from app import app
|
||||
|
||||
class FlaskAppTests(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
# Crée un client de test
|
||||
self.app = app.test_client()
|
||||
self.app.testing = True
|
||||
|
||||
def test_index_page(self):
|
||||
# Test pour s'assurer que l'index se charge correctement
|
||||
response = self.app.get('/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
28
backend_part1/jeu-concours/stack_prod.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
version: '3.7'
|
||||
services:
|
||||
jeu_concours:
|
||||
image: localhost:3000/pom/jeu-concours:latest
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
CACHE_HOST: "${CACHE_HOST}"
|
||||
CACHE_PORT: "${CACHE_PORT}"
|
||||
APP_PORT: "${APP_PORT}"
|
||||
deploy:
|
||||
replicas: 3
|
||||
update_config:
|
||||
parallelism: 2
|
||||
delay: 10s
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
networks:
|
||||
- minicloud_network
|
||||
ports:
|
||||
- "6379:6379"
|
||||
deploy:
|
||||
replicas: 1
|
||||
|
||||
networks:
|
||||
minicloud_network:
|
||||
external: true
|
7
backend_part1/rendu_inspirasite/README.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# Application Flask de citations inspirantes avec sessions et Redis
|
||||
|
||||
## Groupe
|
||||
- Yves-Robert ESTRADA
|
||||
- Mustapha AIT HAMOU
|
||||
- Sinclair BALIVET
|
||||
- Pauline SRIFI
|
23
backend_part1/rendu_inspirasite/feature.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Gitea Actions for feature
|
||||
run-name: ${{ gitea.actor }} testing jobs
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- features/*
|
||||
|
||||
jobs:
|
||||
Tests-Actions:
|
||||
runs-on: ubuntu-latest
|
||||
container: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
github-server-url: 'http://localhost:3000'
|
||||
- uses: actions/setup-python@v5
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
cd app
|
||||
pip3 install -r requirements.test.txt
|
||||
- name: "Testing..."
|
||||
run: cd app && python3 -m unittest discover -s tests
|
1
backend_part1/rendu_inspirasite/ispirasite
Submodule
43
backend_part1/rendu_inspirasite/prod.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
name: Gitea Actions for prod
|
||||
run-name: ${{ gitea.actor }} deploy prod
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
Deploy-Staging-Actions:
|
||||
runs-on: ubuntu-latest
|
||||
container: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
github-server-url: http://localhost:3000
|
||||
- name: Login to the registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: http://localhost:3000
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.token }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: ./app
|
||||
file: ./app/Dockerfile
|
||||
platforms: linux/amd64
|
||||
push: true
|
||||
tags: localhost:3000/${{ gitea.repository }}:latest
|
||||
- name: Generate stack yml for deployment
|
||||
uses: nowactions/envsubst@v1
|
||||
with:
|
||||
input: ./stack_prod.tpl.yml
|
||||
output: ./stack_prod.yml
|
||||
env:
|
||||
CACHE_HOST: "${{ vars.CACHE_HOST }}"
|
||||
CACHE_PORT: "${{ vars.CACHE_PORT }}"
|
||||
APP_PORT: "${{ vars.APP_PORT }}"
|
||||
SECRET_KEY: "${{ vars.SECRET_KEY }}"
|
||||
TTL: "${{ vars.TTL }}"
|
||||
- name: Deploy
|
||||
run: docker stack deploy -c ./stack_prod.yml inspirasite_prod
|
After Width: | Height: | Size: 9.8 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 19 KiB |
43
backend_part1/rendu_inspirasite/staging.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
name: Gitea Actions for staging
|
||||
run-name: ${{ gitea.actor }} deploy staging
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
Deploy-Staging-Actions:
|
||||
runs-on: ubuntu-latest
|
||||
container: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
github-server-url: http://localhost:3000
|
||||
- name: Login to the registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: http://localhost:3000
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.token }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: ./app
|
||||
file: ./app/Dockerfile
|
||||
platforms: linux/amd64
|
||||
push: true
|
||||
tags: localhost:3000/${{ gitea.repository }}:latest
|
||||
- name: Generate stack yml for deployment
|
||||
uses: nowactions/envsubst@v1
|
||||
with:
|
||||
input: ./stack_staging.tpl.yml
|
||||
output: ./stack_staging.yml
|
||||
env:
|
||||
CACHE_HOST: "${{ vars.CACHE_HOST }}"
|
||||
CACHE_PORT: "${{ vars.CACHE_PORT_STAGING }}"
|
||||
APP_PORT: "${{ vars.APP_PORT_STAGING }}"
|
||||
SECRET_KEY: "${{ vars.SECRET_KEY_STAGING }}"
|
||||
TTL: "${{ vars.TTL_STAGING }}"
|
||||
- name: Deploy
|
||||
run: docker stack deploy -c ./stack_staging.yml inspirasite_staging
|
BIN
backend_part1/rendu_inspirasite/vars_env.png
Normal file
After Width: | Height: | Size: 57 KiB |
10
backend_part1/stack_elk/logstash-pipeline/logstash.conf
Normal file
@@ -0,0 +1,10 @@
|
||||
input {
|
||||
gelf {
|
||||
}
|
||||
}
|
||||
|
||||
output {
|
||||
elasticsearch {
|
||||
hosts => "elasticsearch:9200"
|
||||
}
|
||||
}
|
40
backend_part1/stack_elk/stack.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
elasticsearch:
|
||||
image: elasticsearch:7.9.3
|
||||
environment:
|
||||
- discovery.type=single-node
|
||||
- ES_JAVA_OPTS=-Xms2g -Xmx2g
|
||||
networks:
|
||||
- minicloud_network
|
||||
volumes:
|
||||
- esdata:/usr/share/elasticsearch/data
|
||||
kibana:
|
||||
image: kibana:7.9.3
|
||||
depends_on:
|
||||
- elasticsearch
|
||||
ports:
|
||||
- "5601:5601"
|
||||
networks:
|
||||
- minicloud_network
|
||||
logstash:
|
||||
image: logstash:7.9.3
|
||||
ports:
|
||||
- "12201:12201"
|
||||
depends_on:
|
||||
- elasticsearch
|
||||
deploy:
|
||||
mode: global
|
||||
networks:
|
||||
- minicloud_network
|
||||
volumes:
|
||||
- ./logstash-pipeline:/usr/share/logstash/pipeline/
|
||||
volumes:
|
||||
esdata:
|
||||
driver: local
|
||||
logstash-pipeline:
|
||||
driver: local
|
||||
networks:
|
||||
minicloud_network:
|
||||
external: true
|
3
frontend_part2/readme.MD
Normal file
@@ -0,0 +1,3 @@
|
||||
# Front end part
|
||||
|
||||
Application react native
|
35
frontend_part2/web-cloud-ynov/.gitignore
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
dist/
|
||||
web-build/
|
||||
|
||||
# Native
|
||||
*.orig.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
|
||||
# Metro
|
||||
.metro-health-check*
|
||||
|
||||
# debug
|
||||
npm-debug.*
|
||||
yarn-debug.*
|
||||
yarn-error.*
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
5
frontend_part2/web-cloud-ynov/.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
8
frontend_part2/web-cloud-ynov/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/web-cloud-ynov.iml" filepath="$PROJECT_DIR$/.idea/web-cloud-ynov.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
frontend_part2/web-cloud-ynov/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
12
frontend_part2/web-cloud-ynov/.idea/web-cloud-ynov.iml
generated
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
20
frontend_part2/web-cloud-ynov/App.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import { StatusBar } from 'expo-status-bar';
|
||||
import { StyleSheet, Text, View } from 'react-native';
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<Text>Open up App.js to start working on your app!</Text>
|
||||
<StatusBar style="auto" />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: '#fff',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
},
|
||||
});
|
30
frontend_part2/web-cloud-ynov/app.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"expo": {
|
||||
"name": "web-cloud-ynov",
|
||||
"slug": "web-cloud-ynov",
|
||||
"version": "1.0.0",
|
||||
"orientation": "portrait",
|
||||
"icon": "./assets/icon.png",
|
||||
"userInterfaceStyle": "light",
|
||||
"splash": {
|
||||
"image": "./assets/splash.png",
|
||||
"resizeMode": "contain",
|
||||
"backgroundColor": "#ffffff"
|
||||
},
|
||||
"assetBundlePatterns": [
|
||||
"**/*"
|
||||
],
|
||||
"ios": {
|
||||
"supportsTablet": true
|
||||
},
|
||||
"android": {
|
||||
"adaptiveIcon": {
|
||||
"foregroundImage": "./assets/adaptive-icon.png",
|
||||
"backgroundColor": "#ffffff"
|
||||
}
|
||||
},
|
||||
"web": {
|
||||
"favicon": "./assets/favicon.png"
|
||||
}
|
||||
}
|
||||
}
|
BIN
frontend_part2/web-cloud-ynov/assets/adaptive-icon.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
frontend_part2/web-cloud-ynov/assets/favicon.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
frontend_part2/web-cloud-ynov/assets/icon.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
frontend_part2/web-cloud-ynov/assets/splash.png
Normal file
After Width: | Height: | Size: 46 KiB |
6
frontend_part2/web-cloud-ynov/babel.config.js
Normal file
@@ -0,0 +1,6 @@
|
||||
module.exports = function(api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
};
|
||||
};
|
12994
frontend_part2/web-cloud-ynov/package-lock.json
generated
Normal file
24
frontend_part2/web-cloud-ynov/package.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "web-cloud-ynov",
|
||||
"version": "1.0.0",
|
||||
"main": "node_modules/expo/AppEntry.js",
|
||||
"scripts": {
|
||||
"start": "expo start",
|
||||
"android": "expo start --android",
|
||||
"ios": "expo start --ios",
|
||||
"web": "expo start --web"
|
||||
},
|
||||
"dependencies": {
|
||||
"expo": "~50.0.13",
|
||||
"expo-status-bar": "~1.11.1",
|
||||
"react": "18.2.0",
|
||||
"react-native": "0.73.5",
|
||||
"react-dom": "18.2.0",
|
||||
"react-native-web": "~0.19.6",
|
||||
"@expo/metro-runtime": "~3.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.0"
|
||||
},
|
||||
"private": true
|
||||
}
|