Upload 35 files
Browse files- .gitattributes +2 -0
- frontend/__pycache__/main.cpython-312.pyc +0 -0
- frontend/build/asset-manifest.json +15 -0
- frontend/build/favicon.ico +0 -0
- frontend/build/index.html +1 -0
- frontend/build/logo192.png +0 -0
- frontend/build/logo512.png +0 -0
- frontend/build/manifest.json +25 -0
- frontend/build/robots.txt +3 -0
- frontend/build/static/css/main.52a610a9.css +2 -0
- frontend/build/static/css/main.52a610a9.css.map +1 -0
- frontend/build/static/css/main.f37818ec.css +2 -0
- frontend/build/static/css/main.f37818ec.css.map +1 -0
- frontend/build/static/js/453.27482493.chunk.js +2 -0
- frontend/build/static/js/453.27482493.chunk.js.map +1 -0
- frontend/build/static/js/main.5a69218f.js +0 -0
- frontend/build/static/js/main.5a69218f.js.LICENSE.txt +49 -0
- frontend/build/static/js/main.5a69218f.js.map +0 -0
- frontend/build/static/js/main.f6d3165b.js +0 -0
- frontend/build/static/js/main.f6d3165b.js.LICENSE.txt +49 -0
- frontend/build/static/js/main.f6d3165b.js.map +0 -0
- frontend/build/static/media/logo.6ce24c58023cc2f8fd88fe9d219db6c6.svg +1 -0
- frontend/functions/add_user.py +40 -0
- frontend/functions/get_users.py +34 -0
- frontend/netlify/functions/add_user.py +40 -0
- frontend/netlify/functions/get_users.py +34 -0
- frontend/netlify/functions/register.js +55 -0
- frontend/public/blurBackground.png +3 -0
- frontend/public/color4bg.png +3 -0
- frontend/public/emojipouce.png +0 -0
- frontend/public/favicon.ico +0 -0
- frontend/public/index.html +43 -0
- frontend/public/logo192.png +0 -0
- frontend/public/logo512.png +0 -0
- frontend/public/manifest.json +25 -0
- frontend/public/robots.txt +3 -0
.gitattributes
CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
frontend/public/blurBackground.png filter=lfs diff=lfs merge=lfs -text
|
37 |
+
frontend/public/color4bg.png filter=lfs diff=lfs merge=lfs -text
|
frontend/__pycache__/main.cpython-312.pyc
ADDED
Binary file (3.67 kB). View file
|
|
frontend/build/asset-manifest.json
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"files": {
|
3 |
+
"main.css": "/static/css/main.f37818ec.css",
|
4 |
+
"main.js": "/static/js/main.f6d3165b.js",
|
5 |
+
"static/js/453.27482493.chunk.js": "/static/js/453.27482493.chunk.js",
|
6 |
+
"index.html": "/index.html",
|
7 |
+
"main.f37818ec.css.map": "/static/css/main.f37818ec.css.map",
|
8 |
+
"main.f6d3165b.js.map": "/static/js/main.f6d3165b.js.map",
|
9 |
+
"453.27482493.chunk.js.map": "/static/js/453.27482493.chunk.js.map"
|
10 |
+
},
|
11 |
+
"entrypoints": [
|
12 |
+
"static/css/main.f37818ec.css",
|
13 |
+
"static/js/main.f6d3165b.js"
|
14 |
+
]
|
15 |
+
}
|
frontend/build/favicon.ico
ADDED
|
frontend/build/index.html
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.f6d3165b.js"></script><link href="/static/css/main.f37818ec.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
frontend/build/logo192.png
ADDED
![]() |
frontend/build/logo512.png
ADDED
![]() |
frontend/build/manifest.json
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"short_name": "React App",
|
3 |
+
"name": "Create React App Sample",
|
4 |
+
"icons": [
|
5 |
+
{
|
6 |
+
"src": "favicon.ico",
|
7 |
+
"sizes": "64x64 32x32 24x24 16x16",
|
8 |
+
"type": "image/x-icon"
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"src": "logo192.png",
|
12 |
+
"type": "image/png",
|
13 |
+
"sizes": "192x192"
|
14 |
+
},
|
15 |
+
{
|
16 |
+
"src": "logo512.png",
|
17 |
+
"type": "image/png",
|
18 |
+
"sizes": "512x512"
|
19 |
+
}
|
20 |
+
],
|
21 |
+
"start_url": ".",
|
22 |
+
"display": "standalone",
|
23 |
+
"theme_color": "#000000",
|
24 |
+
"background_color": "#ffffff"
|
25 |
+
}
|
frontend/build/robots.txt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
# https://www.robotstxt.org/robotstxt.html
|
2 |
+
User-agent: *
|
3 |
+
Disallow:
|
frontend/build/static/css/main.52a610a9.css
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}body,html{background-color:#343541;color:#e1e1e1;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;height:100%;margin:0;padding:0}.chat-container{background-color:#343541;display:flex;flex-direction:column;height:100vh;width:100%}.chat-header{background-color:#444654;border-bottom:1px solid #525467;color:#fff;font-size:1.5rem;padding:20px;text-align:center}.messages-container{background-color:#343541;display:flex;flex:1 1;flex-direction:column;gap:10px;overflow-y:auto;padding:20px}.message{animation:fade-in .3s ease-in-out;border-radius:12px;margin-bottom:10px;max-width:70%;padding:15px 20px;word-break:break-word}.message.user{align-self:flex-end;background-color:#0b93f6;border-bottom-right-radius:5px;color:#fff}.message.bot{align-self:flex-start;background-color:#444654;border-bottom-left-radius:5px;color:#e1e1e1}.input-form{background-color:#40414f;border-top:1px solid #525467;display:flex;padding:15px}.input-form input{background-color:#343541;border:1px solid #525467;border-radius:20px;color:#fff;flex:1 1;font-size:16px;outline:none;padding:12px 15px}.input-form input:focus{border-color:#0b93f6}.input-form button{background-color:#0b93f6;border:none;border-radius:20px;color:#fff;cursor:pointer;font-size:16px;margin-left:10px;padding:0 20px;transition:background-color .2s}.input-form button:hover{background-color:#0a83d0}.input-form button:disabled{background-color:#666;cursor:not-allowed}@keyframes fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
|
2 |
+
/*# sourceMappingURL=main.52a610a9.css.map*/
|
frontend/build/static/css/main.52a610a9.css.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"static/css/main.52a610a9.css","mappings":"AAAA,KAKE,kCAAmC,CACnC,iCAAkC,CAJlC,mIAEY,CAHZ,QAMF,CAEA,KACE,uEAEF,CCXA,UAME,wBAAyB,CACzB,aAAc,CAHd,wHAC8D,CAJ9D,WAAY,CACZ,QAAS,CACT,SAKF,CAGA,gBAKE,wBAAyB,CAJzB,YAAa,CACb,qBAAsB,CACtB,YAAa,CACb,UAEF,CAGA,aACE,wBAAyB,CAKzB,+BAAgC,CAFhC,UAAc,CACd,gBAAiB,CAHjB,YAAa,CACb,iBAIF,CAGA,oBAOE,wBAAyB,CAHzB,YAAa,CAHb,QAAO,CAIP,qBAAsB,CACtB,QAAS,CAJT,eAAgB,CAChB,YAKF,CAGA,SAME,iCAAmC,CAHnC,kBAAmB,CACnB,kBAAmB,CAHnB,aAAc,CACd,iBAAkB,CAGlB,qBAEF,CAGA,cACE,mBAAoB,CACpB,wBAAyB,CAEzB,8BAA+B,CAD/B,UAEF,CAGA,aACE,qBAAsB,CACtB,wBAAyB,CAEzB,6BAA8B,CAD9B,aAEF,CAGA,YAGE,wBAAyB,CACzB,4BAA6B,CAH7B,YAAa,CACb,YAGF,CAEA,kBAOE,wBAAyB,CAJzB,wBAAyB,CACzB,kBAAmB,CAInB,UAAW,CAPX,QAAO,CAIP,cAAe,CACf,YAAa,CAJb,iBAOF,CAEA,wBACE,oBACF,CAEA,mBAGE,wBAAyB,CAEzB,WAAY,CACZ,kBAAmB,CAFnB,UAAY,CAGZ,cAAe,CACf,cAAe,CAPf,gBAAiB,CACjB,cAAe,CAOf,+BACF,CAEA,yBACE,wBACF,CAEA,4BACE,qBAAsB,CACtB,kBACF,CAGA,mBACE,GAAO,SAAU,CAAE,0BAA6B,CAChD,GAAK,SAAU,CAAE,uBAA0B,CAC7C","sources":["index.css","App.css"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","/* Réinitialisation de base */\nhtml, body {\n height: 100%;\n margin: 0;\n padding: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen,\n Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\", sans-serif;\n background-color: #343541; /* fond sombre */\n color: #e1e1e1;\n}\n\n/* Chat container prenant toute la fenêtre */\n.chat-container {\n display: flex;\n flex-direction: column;\n height: 100vh;\n width: 100%;\n background-color: #343541;\n}\n\n/* En-tête du chat */\n.chat-header {\n background-color: #444654;\n padding: 20px;\n text-align: center;\n color: #ffffff;\n font-size: 1.5rem;\n border-bottom: 1px solid #525467;\n}\n\n/* Zone des messages */\n.messages-container {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n background-color: #343541;\n}\n\n/* Message générique */\n.message {\n max-width: 70%;\n padding: 15px 20px;\n border-radius: 12px;\n margin-bottom: 10px;\n word-break: break-word;\n animation: fade-in 0.3s ease-in-out;\n}\n\n/* Message utilisateur */\n.message.user {\n align-self: flex-end;\n background-color: #0b93f6;\n color: #fff;\n border-bottom-right-radius: 5px;\n}\n\n/* Message bot */\n.message.bot {\n align-self: flex-start;\n background-color: #444654;\n color: #e1e1e1;\n border-bottom-left-radius: 5px;\n}\n\n/* Formulaire d'entrée */\n.input-form {\n display: flex;\n padding: 15px;\n background-color: #40414f;\n border-top: 1px solid #525467;\n}\n\n.input-form input {\n flex: 1;\n padding: 12px 15px;\n border: 1px solid #525467;\n border-radius: 20px;\n font-size: 16px;\n outline: none;\n background-color: #343541;\n color: #fff;\n}\n\n.input-form input:focus {\n border-color: #0b93f6;\n}\n\n.input-form button {\n margin-left: 10px;\n padding: 0 20px;\n background-color: #0b93f6;\n color: white;\n border: none;\n border-radius: 20px;\n cursor: pointer;\n font-size: 16px;\n transition: background-color 0.2s;\n}\n\n.input-form button:hover {\n background-color: #0a83d0;\n}\n\n.input-form button:disabled {\n background-color: #666;\n cursor: not-allowed;\n}\n\n/* Animation pour l'apparition des messages */\n@keyframes fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n"],"names":[],"sourceRoot":""}
|
frontend/build/static/css/main.f37818ec.css
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.App{background-color:#343541;display:flex;margin:0;min-height:100vh}.sidebar-panel{background-color:#202123;color:#fff;display:flex;flex-direction:column;max-width:250px;overflow-y:auto;transition:max-width .3s ease;width:100%}.App.panel-collapsed .main-content{margin-left:0}.sidebar-panel.collapsed{max-width:0;overflow:hidden}.main-content{display:flex;flex:1 1;flex-direction:column;transition:margin-left .3s ease}.chat-header{background-color:#444654;border-bottom:1px solid #525467;color:#fff;font-size:1.3rem;margin:0;padding:10px 15px}.chat-container{background-color:#343541;margin-bottom:120px;overflow:hidden}.chat-container,.messages-container{display:flex;flex:1 1;flex-direction:column}.messages-container{gap:8px;overflow-y:auto;padding:10px 15px}.message{animation:fade-in .3s ease-in-out;border-radius:8px;max-width:70%;padding:10px 12px;word-break:break-word}.message.user{align-self:flex-end;background-color:#0b93f6;border-bottom-right-radius:4px;color:#fff}.message.bot{align-self:flex-start;background-color:#444654;border-bottom-left-radius:4px;color:#e1e1e1}@keyframes fade-in{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.loading span{animation:loading-dots 1.4s ease-in-out infinite;display:inline-block;font-size:1.2rem;margin-right:2px}@keyframes loading-dots{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.input-container{bottom:20px;display:flex;justify-content:center;left:0;position:fixed;right:0;z-index:999}.input-form{align-items:center;background-color:#40414f;border:1px solid #525467;border-radius:24px;display:flex;max-width:600px;padding:8px 12px;width:100%}.input-form input{background-color:#343541;border:1px solid #525467;border-radius:16px;color:#fff;flex:1 1;font-size:14px;outline:none;padding:10px 12px}h2{display:block;text-align:center}.input-form input:focus{border-color:#0b93f6}.input-form button{background-color:#0b93f6;border:none;border-radius:16px;color:#fff;cursor:pointer;font-size:14px;margin-left:8px;padding:6px 16px;transition:background-color .2s}.input-form button:hover{background-color:#0a83d0}.input-form button:disabled{background-color:#666;cursor:not-allowed}.collapse-button-main{background:none;border:none;color:#fff;cursor:pointer;font-size:24px;left:20px;position:absolute;top:20px;z-index:999}.material-icons{vertical-align:middle}.conversations-list{display:flex;flex-direction:column}.conversation-item{align-items:center;border-bottom:1px solid #525467;cursor:pointer;display:flex;padding:8px}.conversation-item:hover{background-color:#525467}.conversation-icon{margin-right:6px}.sidebar-footer{border-top:1px solid #525467;margin-top:auto;padding:8px}.user-info{align-items:center;display:flex;gap:6px}.user-avatar{font-size:20px}.collapse-button{background:none;border:none;color:#fff;cursor:pointer}
|
2 |
+
/*# sourceMappingURL=main.f37818ec.css.map*/
|
frontend/build/static/css/main.f37818ec.css.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"static/css/main.f37818ec.css","mappings":"AAAA,KAKE,kCAAmC,CACnC,iCAAkC,CAJlC,mIAEY,CAHZ,QAMF,CAEA,KACE,uEAEF,CCXA,KAIE,wBAAyB,CAHzB,YAAa,CAEb,QAAS,CADT,gBAGF,CAGA,eAME,wBAAyB,CACzB,UAAc,CANd,YAAa,CACb,qBAAsB,CAEtB,eAAgB,CAIhB,eAAgB,CAChB,6BAA+B,CAN/B,UAOF,CAGG,mCACC,aACF,CAEF,yBACE,WAAY,CACZ,eACF,CAGA,cAEE,YAAa,CADb,QAAO,CAEP,qBAAsB,CACtB,+BAGF,CAGA,aACE,wBAAyB,CAIzB,+BAAgC,CAFhC,UAAc,CACd,gBAAiB,CAEjB,QAAS,CAJT,iBAKF,CAGA,gBAKE,wBAAyB,CACzB,mBAAoB,CAFpB,eAIF,CAGA,oCATE,YAAa,CADb,QAAO,CAEP,qBAeF,CAPA,oBAME,OAAQ,CAJR,eAAgB,CAChB,iBAIF,CAGA,SAKE,iCAAmC,CAFnC,iBAAkB,CAFlB,aAAc,CACd,iBAAkB,CAElB,qBAEF,CAEA,cACE,mBAAoB,CACpB,wBAAyB,CAEzB,8BAA+B,CAD/B,UAEF,CAEA,aACE,qBAAsB,CACtB,wBAAyB,CAEzB,6BAA8B,CAD9B,aAEF,CAGA,mBACE,GAAO,SAAU,CAAE,yBAA4B,CAC/C,GAAO,SAAU,CAAE,uBAA0B,CAC/C,CAGA,cAEE,gDAAiD,CADjD,oBAAqB,CAErB,gBAAiB,CACjB,gBACF,CAEA,wBACE,UAAgB,kBAAqB,CACrC,IAAM,kBAAqB,CAC7B,CAGA,iBAEE,WAAY,CAGZ,YAAa,CACb,sBAAuB,CAHvB,MAAO,CAFP,cAAe,CAGf,OAAQ,CAGR,WACF,CAEA,YAEE,kBAAmB,CACnB,wBAAyB,CACzB,wBAAyB,CACzB,kBAAmB,CAJnB,YAAa,CAOb,eAAgB,CAFhB,gBAAiB,CACjB,UAEF,CAEA,kBAOE,wBAAyB,CAJzB,wBAAyB,CACzB,kBAAmB,CAInB,UAAW,CAPX,QAAO,CAIP,cAAe,CACf,YAAa,CAJb,iBAOF,CACA,GACE,aAAc,CACd,iBACF,CAEA,wBACE,oBACF,CAEA,mBACE,wBAAyB,CACzB,WAAY,CACZ,kBAAmB,CACnB,UAAW,CACX,cAAe,CACf,cAAe,CAEf,eAAgB,CADhB,gBAAiB,CAEjB,+BACF,CAEA,yBACE,wBACF,CAEA,4BACE,qBAAsB,CACtB,kBACF,CAEA,sBAKE,eAAgB,CAChB,WAAY,CACZ,UAAW,CACX,cAAe,CACf,cAAe,CANf,SAAU,CAFV,iBAAkB,CAClB,QAAS,CAET,WAMF,CAGA,gBACE,qBACF,CAGA,oBACE,YAAa,CACb,qBACF,CAEA,mBAKE,kBAAmB,CAHnB,+BAAgC,CAChC,cAAe,CACf,YAAa,CAHb,WAKF,CAEA,yBACE,wBACF,CAEA,mBACE,gBACF,CAGA,gBAEE,4BAA6B,CAD7B,eAAgB,CAEhB,WACF,CAEA,WAEE,kBAAmB,CADnB,YAAa,CAEb,OACF,CAEA,aACE,cACF,CAEA,iBACE,eAAgB,CAChB,WAAY,CACZ,UAAW,CACX,cACF","sources":["index.css","App.css"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","/* ----- Disposition générale ----- */\n.App {\n display: flex; /* Panel à gauche, contenu à droite */\n min-height: 100vh; /* Hauteur totale de la fenêtre */\n margin: 0;\n background-color: #343541; \n}\n\n/* ----- Panel latéral (sidebar) ----- */\n.sidebar-panel {\n display: flex;\n flex-direction: column;\n width: 100%; \n max-width: 250px; /* Largeur ouverte */\n \n background-color: #202123; /* Couleur sombre */\n color: #ffffff;\n overflow-y: auto; /* Scroll indépendant si le contenu est long */\n transition: max-width 0.3s ease;\n}\n/* Quand le panel est collapsed, on applique la classe .panel-collapsed \n pour animer le décalage du contenu principal. */\n .App.panel-collapsed .main-content {\n margin-left: 0; /* Revient à gauche */\n }\n \n.sidebar-panel.collapsed {\n max-width: 0; \n overflow: hidden;\n}\n\n/* ----- Contenu principal (zone de chat + header) ----- */\n.main-content {\n flex: 1; \n display: flex;\n flex-direction: column;\n transition: margin-left 0.3s ease;\n\n /* On fixe une hauteur si nécessaire ou on laisse flex: 1 pour occuper l'espace restant */\n}\n\n/* ----- Header du chat ----- */\n.chat-header {\n background-color: #444654;\n padding: 10px 15px;\n color: #ffffff;\n font-size: 1.3rem;\n border-bottom: 1px solid #525467;\n margin: 0;\n}\n\n/* ----- Conteneur du chat (zone de messages + input) ----- */\n.chat-container {\n flex: 1; \n display: flex;\n flex-direction: column;\n overflow: hidden; /* On ne fait pas défiler tout le container */\n background-color: #343541;\n margin-bottom: 120px; \n\n}\n\n/* ----- Zone des messages scrollable ----- */\n.messages-container {\n flex: 1; /* Occupe tout l'espace disponible */\n overflow-y: auto; /* Scroll interne uniquement sur les messages */\n padding: 10px 15px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* ----- Style des messages ----- */\n.message {\n max-width: 70%;\n padding: 10px 12px;\n border-radius: 8px;\n word-break: break-word;\n animation: fade-in 0.3s ease-in-out;\n}\n\n.message.user {\n align-self: flex-end;\n background-color: #0b93f6;\n color: #fff;\n border-bottom-right-radius: 4px;\n}\n\n.message.bot {\n align-self: flex-start;\n background-color: #444654;\n color: #e1e1e1;\n border-bottom-left-radius: 4px;\n}\n\n/* ----- Animation pour l'apparition ----- */\n@keyframes fade-in {\n from { opacity: 0; transform: translateY(5px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* ----- Indicateur de chargement (3 points) ----- */\n.loading span {\n display: inline-block;\n animation: loading-dots 1.4s infinite ease-in-out;\n font-size: 1.2rem;\n margin-right: 2px;\n}\n\n@keyframes loading-dots {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n}\n\n/* ----- Zone d'entrée (input) FIXE dans le container de chat ----- */\n.input-container {\n position: fixed;\n bottom: 20px; /* Laissez un petit espace en bas, style ChatGPT */\n left: 0;\n right: 0;\n display: flex;\n justify-content: center; /* Centre horizontalement */\n z-index: 999;\n}\n/* ----- Formulaire d'entrée ----- */\n.input-form {\n display: flex;\n align-items: center;\n background-color: #40414f;\n border: 1px solid #525467;\n border-radius: 24px;\n padding: 8px 12px;\n width: 100%;\n max-width: 600px; /* Largeur max centrée */\n}\n\n.input-form input {\n flex: 1;\n padding: 10px 12px;\n border: 1px solid #525467;\n border-radius: 16px;\n font-size: 14px;\n outline: none;\n background-color: #343541;\n color: #fff;\n}\nh2{\n display: block;\n text-align: center;\n}\n\n.input-form input:focus {\n border-color: #0b93f6;\n}\n\n.input-form button {\n background-color: #0b93f6; /* Couleur bleue ChatGPT-like */\n border: none;\n border-radius: 16px; /* Forme arrondie */\n color: #fff; /* Couleur du texte */\n cursor: pointer;\n font-size: 14px;\n padding: 6px 16px; /* Espace intérieur horizontal/vertical */\n margin-left: 8px; /* Espace à gauche pour séparer de l’input */\n transition: background-color 0.2s;\n}\n\n.input-form button:hover {\n background-color: #0a83d0; /* Couleur plus sombre au survol */\n}\n\n.input-form button:disabled {\n background-color: #666;\n cursor: not-allowed;\n}\n/* ----- Bouton de collapse principal (optionnel) ----- */\n.collapse-button-main {\n position: absolute;\n top: 20px;\n left: 20px;\n z-index: 999; /* Pour qu'il reste au-dessus du contenu */\n background: none;\n border: none;\n color: #fff;\n cursor: pointer;\n font-size: 24px; /* Ajustez la taille de l'icône */\n}\n\n/* ----- Icônes ----- */\n.material-icons {\n vertical-align: middle;\n}\n\n/* ----- Liste des conversations dans le panel ----- */\n.conversations-list {\n display: flex;\n flex-direction: column;\n}\n\n.conversation-item {\n padding: 8px;\n border-bottom: 1px solid #525467;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n\n.conversation-item:hover {\n background-color: #525467;\n}\n\n.conversation-icon {\n margin-right: 6px;\n}\n\n/* ----- Footer du panel ----- */\n.sidebar-footer {\n margin-top: auto;\n border-top: 1px solid #525467;\n padding: 8px;\n}\n\n.user-info {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.user-avatar {\n font-size: 20px;\n}\n\n.collapse-button {\n background: none;\n border: none;\n color: #fff;\n cursor: pointer;\n}\n"],"names":[],"sourceRoot":""}
|
frontend/build/static/js/453.27482493.chunk.js
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
"use strict";(self.webpackChunkchatbot_interface=self.webpackChunkchatbot_interface||[]).push([[453],{453:(e,t,n)=>{n.r(t),n.d(t,{getCLS:()=>y,getFCP:()=>h,getFID:()=>C,getLCP:()=>P,getTTFB:()=>D});var i,r,a,o,c=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},u=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,p=function(){return"hidden"===document.visibilityState?0:1/0},d=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=p(),d(),s((function(){setTimeout((function(){v=p(),d()}),0)}))),{get firstHiddenTime(){return v}}},h=function(e,t){var n,i=l(),r=c("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=e.startTime,r.entries.push(e),n(!0)))},o=window.performance&&performance.getEntriesByName&&performance.getEntriesByName("first-contentful-paint")[0],f=o?null:u("paint",a);(o||f)&&(n=m(e,r,t),o&&a(o),s((function(i){r=c("FCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,n(!0)}))}))})))},g=!1,T=-1,y=function(e,t){g||(h((function(e){T=e.value})),g=!0);var n,i=function(t){T>-1&&e(t)},r=c("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},p=u("layout-shift",v);p&&(n=m(i,r,t),f((function(){p.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=c("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r<a-w){var e={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+r};o.forEach((function(t){t(e)})),o=[]}},b=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},C=function(e,t){var n,a=l(),v=c("FID"),p=function(e){e.startTime<a.firstHiddenTime&&(v.value=e.processingStart-e.startTime,v.entries.push(e),n(!0))},d=u("first-input",p);n=m(e,v,t),d&&f((function(){d.takeRecords().map(p),d.disconnect()}),!0),d&&s((function(){var a;v=c("FID"),n=m(e,v,t),o=[],r=-1,i=null,F(addEventListener),a=p,o.push(a),S()}))},k={},P=function(e,t){var n,i=l(),r=c("LCP"),a=function(e){var t=e.startTime;t<i.firstHiddenTime&&(r.value=t,r.entries.push(e),n())},o=u("largest-contentful-paint",a);if(o){n=m(e,r,t);var v=function(){k[r.id]||(o.takeRecords().map(a),o.disconnect(),k[r.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),f(v,!0),s((function(i){r=c("LCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,k[r.id]=!0,n(!0)}))}))}))}},D=function(e){var t,n=c("TTFB");t=function(){try{var t=performance.getEntriesByType("navigation")[0]||function(){var e=performance.timing,t={entryType:"navigation",startTime:0};for(var n in e)"navigationStart"!==n&&"toJSON"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]);
|
2 |
+
//# sourceMappingURL=453.27482493.chunk.js.map
|
frontend/build/static/js/453.27482493.chunk.js.map
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"version":3,"file":"static/js/453.27482493.chunk.js","mappings":"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","sources":["../node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,t,n,i,r=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v2-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},a=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},u=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},c=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},f=-1,s=function(){return\"hidden\"===document.visibilityState?0:1/0},m=function(){o((function(e){var t=e.timeStamp;f=t}),!0)},v=function(){return f<0&&(f=s(),m(),u((function(){setTimeout((function(){f=s(),m()}),0)}))),{get firstHiddenTime(){return f}}},d=function(e,t){var n,i=v(),o=r(\"FCP\"),f=function(e){\"first-contentful-paint\"===e.name&&(m&&m.disconnect(),e.startTime<i.firstHiddenTime&&(o.value=e.startTime,o.entries.push(e),n(!0)))},s=window.performance&&performance.getEntriesByName&&performance.getEntriesByName(\"first-contentful-paint\")[0],m=s?null:a(\"paint\",f);(s||m)&&(n=c(e,o,t),s&&f(s),u((function(i){o=r(\"FCP\"),n=c(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-i.timeStamp,n(!0)}))}))})))},p=!1,l=-1,h=function(e,t){p||(d((function(e){l=e.value})),p=!0);var n,i=function(t){l>-1&&e(t)},f=r(\"CLS\",0),s=0,m=[],v=function(e){if(!e.hadRecentInput){var t=m[0],i=m[m.length-1];s&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(s+=e.value,m.push(e)):(s=e.value,m=[e]),s>f.value&&(f.value=s,f.entries=m,n())}},h=a(\"layout-shift\",v);h&&(n=c(i,f,t),o((function(){h.takeRecords().map(v),n(!0)})),u((function(){s=0,l=-1,f=r(\"CLS\",0),n=c(i,f,t)})))},T={passive:!0,capture:!0},y=new Date,g=function(i,r){e||(e=r,t=i,n=new Date,w(removeEventListener),E())},E=function(){if(t>=0&&t<n-y){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+t};i.forEach((function(e){e(r)})),i=[]}},S=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){g(e,t),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",n,T),removeEventListener(\"pointercancel\",i,T)};addEventListener(\"pointerup\",n,T),addEventListener(\"pointercancel\",i,T)}(t,e):g(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,S,T)}))},L=function(n,f){var s,m=v(),d=r(\"FID\"),p=function(e){e.startTime<m.firstHiddenTime&&(d.value=e.processingStart-e.startTime,d.entries.push(e),s(!0))},l=a(\"first-input\",p);s=c(n,d,f),l&&o((function(){l.takeRecords().map(p),l.disconnect()}),!0),l&&u((function(){var a;d=r(\"FID\"),s=c(n,d,f),i=[],t=-1,e=null,w(addEventListener),a=p,i.push(a),E()}))},b={},F=function(e,t){var n,i=v(),f=r(\"LCP\"),s=function(e){var t=e.startTime;t<i.firstHiddenTime&&(f.value=t,f.entries.push(e),n())},m=a(\"largest-contentful-paint\",s);if(m){n=c(e,f,t);var d=function(){b[f.id]||(m.takeRecords().map(s),m.disconnect(),b[f.id]=!0,n(!0))};[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,d,{once:!0,capture:!0})})),o(d,!0),u((function(i){f=r(\"LCP\"),n=c(e,f,t),requestAnimationFrame((function(){requestAnimationFrame((function(){f.value=performance.now()-i.timeStamp,b[f.id]=!0,n(!0)}))}))}))}},P=function(e){var t,n=r(\"TTFB\");t=function(){try{var t=performance.getEntriesByType(\"navigation\")[0]||function(){var e=performance.timing,t={entryType:\"navigation\",startTime:0};for(var n in e)\"navigationStart\"!==n&&\"toJSON\"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},\"complete\"===document.readyState?setTimeout(t,0):addEventListener(\"load\",(function(){return setTimeout(t,0)}))};export{h as getCLS,d as getFCP,L as getFID,F as getLCP,P as getTTFB};\n"],"names":["e","t","n","i","r","name","value","delta","entries","id","concat","Date","now","Math","floor","random","a","PerformanceObserver","supportedEntryTypes","includes","self","getEntries","map","observe","type","buffered","o","document","visibilityState","removeEventListener","addEventListener","u","persisted","c","f","s","m","timeStamp","v","setTimeout","firstHiddenTime","d","disconnect","startTime","push","window","performance","getEntriesByName","requestAnimationFrame","p","l","h","hadRecentInput","length","takeRecords","T","passive","capture","y","g","w","E","entryType","target","cancelable","processingStart","forEach","S","L","b","F","once","P","getEntriesByType","timing","max","navigationStart","responseStart","readyState"],"sourceRoot":""}
|
frontend/build/static/js/main.5a69218f.js
ADDED
The diff for this file is too large to render.
See raw diff
|
|
frontend/build/static/js/main.5a69218f.js.LICENSE.txt
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* @license React
|
3 |
+
* react-dom-client.production.js
|
4 |
+
*
|
5 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
6 |
+
*
|
7 |
+
* This source code is licensed under the MIT license found in the
|
8 |
+
* LICENSE file in the root directory of this source tree.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @license React
|
13 |
+
* react-dom.production.js
|
14 |
+
*
|
15 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
16 |
+
*
|
17 |
+
* This source code is licensed under the MIT license found in the
|
18 |
+
* LICENSE file in the root directory of this source tree.
|
19 |
+
*/
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @license React
|
23 |
+
* react-jsx-runtime.production.js
|
24 |
+
*
|
25 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
26 |
+
*
|
27 |
+
* This source code is licensed under the MIT license found in the
|
28 |
+
* LICENSE file in the root directory of this source tree.
|
29 |
+
*/
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @license React
|
33 |
+
* react.production.js
|
34 |
+
*
|
35 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
36 |
+
*
|
37 |
+
* This source code is licensed under the MIT license found in the
|
38 |
+
* LICENSE file in the root directory of this source tree.
|
39 |
+
*/
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @license React
|
43 |
+
* scheduler.production.js
|
44 |
+
*
|
45 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
46 |
+
*
|
47 |
+
* This source code is licensed under the MIT license found in the
|
48 |
+
* LICENSE file in the root directory of this source tree.
|
49 |
+
*/
|
frontend/build/static/js/main.5a69218f.js.map
ADDED
The diff for this file is too large to render.
See raw diff
|
|
frontend/build/static/js/main.f6d3165b.js
ADDED
The diff for this file is too large to render.
See raw diff
|
|
frontend/build/static/js/main.f6d3165b.js.LICENSE.txt
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* @license React
|
3 |
+
* react-dom-client.production.js
|
4 |
+
*
|
5 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
6 |
+
*
|
7 |
+
* This source code is licensed under the MIT license found in the
|
8 |
+
* LICENSE file in the root directory of this source tree.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @license React
|
13 |
+
* react-dom.production.js
|
14 |
+
*
|
15 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
16 |
+
*
|
17 |
+
* This source code is licensed under the MIT license found in the
|
18 |
+
* LICENSE file in the root directory of this source tree.
|
19 |
+
*/
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @license React
|
23 |
+
* react-jsx-runtime.production.js
|
24 |
+
*
|
25 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
26 |
+
*
|
27 |
+
* This source code is licensed under the MIT license found in the
|
28 |
+
* LICENSE file in the root directory of this source tree.
|
29 |
+
*/
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @license React
|
33 |
+
* react.production.js
|
34 |
+
*
|
35 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
36 |
+
*
|
37 |
+
* This source code is licensed under the MIT license found in the
|
38 |
+
* LICENSE file in the root directory of this source tree.
|
39 |
+
*/
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @license React
|
43 |
+
* scheduler.production.js
|
44 |
+
*
|
45 |
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
46 |
+
*
|
47 |
+
* This source code is licensed under the MIT license found in the
|
48 |
+
* LICENSE file in the root directory of this source tree.
|
49 |
+
*/
|
frontend/build/static/js/main.f6d3165b.js.map
ADDED
The diff for this file is too large to render.
See raw diff
|
|
frontend/build/static/media/logo.6ce24c58023cc2f8fd88fe9d219db6c6.svg
ADDED
|
frontend/functions/add_user.py
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
import psycopg2
|
3 |
+
from psycopg2 import OperationalError
|
4 |
+
import os
|
5 |
+
|
6 |
+
def handler(event, context):
|
7 |
+
data = json.loads(event['body'])
|
8 |
+
name = data.get('name')
|
9 |
+
email = data.get('email')
|
10 |
+
|
11 |
+
try:
|
12 |
+
conn = psycopg2.connect(
|
13 |
+
host=os.getenv('DB_HOST'),
|
14 |
+
database=os.getenv('DB_NAME'),
|
15 |
+
user=os.getenv('DB_USER'),
|
16 |
+
password=os.getenv('DB_PASSWORD'),
|
17 |
+
port=os.getenv('DB_PORT'),
|
18 |
+
sslmode='require'
|
19 |
+
)
|
20 |
+
cur = conn.cursor()
|
21 |
+
cur.execute('''
|
22 |
+
INSERT INTO users (name, email) VALUES (%s, %s);
|
23 |
+
''', (name, email))
|
24 |
+
conn.commit()
|
25 |
+
cur.close()
|
26 |
+
conn.close()
|
27 |
+
return {
|
28 |
+
'statusCode': 201,
|
29 |
+
'body': json.dumps({"message": "User inserted successfully"})
|
30 |
+
}
|
31 |
+
except OperationalError as e:
|
32 |
+
return {
|
33 |
+
'statusCode': 500,
|
34 |
+
'body': json.dumps({"error": str(e)})
|
35 |
+
}
|
36 |
+
except Exception as e:
|
37 |
+
return {
|
38 |
+
'statusCode': 500,
|
39 |
+
'body': json.dumps({"error": str(e)})
|
40 |
+
}
|
frontend/functions/get_users.py
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
import psycopg2
|
3 |
+
from psycopg2 import OperationalError
|
4 |
+
import os
|
5 |
+
|
6 |
+
def handler(event, context):
|
7 |
+
try:
|
8 |
+
conn = psycopg2.connect(
|
9 |
+
host=os.getenv('DB_HOST'),
|
10 |
+
database=os.getenv('DB_NAME'),
|
11 |
+
user=os.getenv('DB_USER'),
|
12 |
+
password=os.getenv('DB_PASSWORD'),
|
13 |
+
port=os.getenv('DB_PORT'),
|
14 |
+
sslmode='require'
|
15 |
+
)
|
16 |
+
cur = conn.cursor()
|
17 |
+
cur.execute('SELECT * FROM users;')
|
18 |
+
users = cur.fetchall()
|
19 |
+
cur.close()
|
20 |
+
conn.close()
|
21 |
+
return {
|
22 |
+
'statusCode': 200,
|
23 |
+
'body': json.dumps(users)
|
24 |
+
}
|
25 |
+
except OperationalError as e:
|
26 |
+
return {
|
27 |
+
'statusCode': 500,
|
28 |
+
'body': json.dumps({"error": str(e)})
|
29 |
+
}
|
30 |
+
except Exception as e:
|
31 |
+
return {
|
32 |
+
'statusCode': 500,
|
33 |
+
'body': json.dumps({"error": str(e)})
|
34 |
+
}
|
frontend/netlify/functions/add_user.py
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
import psycopg2
|
3 |
+
from psycopg2 import OperationalError
|
4 |
+
import os
|
5 |
+
|
6 |
+
def handler(event, context):
|
7 |
+
data = json.loads(event['body'])
|
8 |
+
name = data.get('name')
|
9 |
+
email = data.get('email')
|
10 |
+
|
11 |
+
try:
|
12 |
+
conn = psycopg2.connect(
|
13 |
+
host=os.getenv('DB_HOST'),
|
14 |
+
database=os.getenv('DB_NAME'),
|
15 |
+
user=os.getenv('DB_USER'),
|
16 |
+
password=os.getenv('DB_PASSWORD'),
|
17 |
+
port=os.getenv('DB_PORT'),
|
18 |
+
sslmode='require'
|
19 |
+
)
|
20 |
+
cur = conn.cursor()
|
21 |
+
cur.execute('''
|
22 |
+
INSERT INTO users (name, email) VALUES (%s, %s);
|
23 |
+
''', (name, email))
|
24 |
+
conn.commit()
|
25 |
+
cur.close()
|
26 |
+
conn.close()
|
27 |
+
return {
|
28 |
+
'statusCode': 201,
|
29 |
+
'body': json.dumps({"message": "User inserted successfully"})
|
30 |
+
}
|
31 |
+
except OperationalError as e:
|
32 |
+
return {
|
33 |
+
'statusCode': 500,
|
34 |
+
'body': json.dumps({"error": str(e)})
|
35 |
+
}
|
36 |
+
except Exception as e:
|
37 |
+
return {
|
38 |
+
'statusCode': 500,
|
39 |
+
'body': json.dumps({"error": str(e)})
|
40 |
+
}
|
frontend/netlify/functions/get_users.py
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
import psycopg2
|
3 |
+
from psycopg2 import OperationalError
|
4 |
+
import os
|
5 |
+
|
6 |
+
def handler(event, context):
|
7 |
+
try:
|
8 |
+
conn = psycopg2.connect(
|
9 |
+
host=os.getenv('DB_HOST'),
|
10 |
+
database=os.getenv('DB_NAME'),
|
11 |
+
user=os.getenv('DB_USER'),
|
12 |
+
password=os.getenv('DB_PASSWORD'),
|
13 |
+
port=os.getenv('DB_PORT'),
|
14 |
+
sslmode='require'
|
15 |
+
)
|
16 |
+
cur = conn.cursor()
|
17 |
+
cur.execute('SELECT * FROM users;')
|
18 |
+
users = cur.fetchall()
|
19 |
+
cur.close()
|
20 |
+
conn.close()
|
21 |
+
return {
|
22 |
+
'statusCode': 200,
|
23 |
+
'body': json.dumps(users)
|
24 |
+
}
|
25 |
+
except OperationalError as e:
|
26 |
+
return {
|
27 |
+
'statusCode': 500,
|
28 |
+
'body': json.dumps({"error": str(e)})
|
29 |
+
}
|
30 |
+
except Exception as e:
|
31 |
+
return {
|
32 |
+
'statusCode': 500,
|
33 |
+
'body': json.dumps({"error": str(e)})
|
34 |
+
}
|
frontend/netlify/functions/register.js
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const { MongoClient } = require('mongodb');
|
2 |
+
|
3 |
+
exports.handler = async function(event, context) {
|
4 |
+
if (event.httpMethod !== 'POST') {
|
5 |
+
return { statusCode: 405, body: 'Method Not Allowed' };
|
6 |
+
}
|
7 |
+
|
8 |
+
try {
|
9 |
+
const data = JSON.parse(event.body);
|
10 |
+
const { prenom, nom, email, password } = data;
|
11 |
+
|
12 |
+
// Validation
|
13 |
+
if (!prenom || !nom || !email || !password) {
|
14 |
+
return {
|
15 |
+
statusCode: 400,
|
16 |
+
body: JSON.stringify({ error: 'Tous les champs sont requis' })
|
17 |
+
};
|
18 |
+
}
|
19 |
+
const MONGODB_URI = process.env.MONGODB_URI;
|
20 |
+
const DB_NAME = process.env.DB_NAME;
|
21 |
+
|
22 |
+
const client = new MongoClient(MONGODB_URI);
|
23 |
+
await client.connect();
|
24 |
+
const db = client.db(DB_NAME);
|
25 |
+
const users = db.collection('users');
|
26 |
+
|
27 |
+
const existingUser = await users.findOne({ email });
|
28 |
+
if (existingUser) {
|
29 |
+
return {
|
30 |
+
statusCode: 409,
|
31 |
+
body: JSON.stringify({ error: 'Cet email est déjà utilisé' })
|
32 |
+
};
|
33 |
+
}
|
34 |
+
|
35 |
+
// Insérer l'utilisateur
|
36 |
+
const result = await users.insertOne({
|
37 |
+
prenom,
|
38 |
+
nom,
|
39 |
+
email,
|
40 |
+
password,
|
41 |
+
createdAt: new Date()
|
42 |
+
});
|
43 |
+
|
44 |
+
return {
|
45 |
+
statusCode: 201,
|
46 |
+
body: JSON.stringify({ message: 'Utilisateur créé avec succès', userId: result.insertedId })
|
47 |
+
};
|
48 |
+
} catch (error) {
|
49 |
+
console.error('Erreur:', error);
|
50 |
+
return {
|
51 |
+
statusCode: 500,
|
52 |
+
body: JSON.stringify({ error: 'Erreur serveur' })
|
53 |
+
};
|
54 |
+
}
|
55 |
+
};
|
frontend/public/blurBackground.png
ADDED
![]() |
Git LFS Details
|
frontend/public/color4bg.png
ADDED
![]() |
Git LFS Details
|
frontend/public/emojipouce.png
ADDED
![]() |
frontend/public/favicon.ico
ADDED
|
frontend/public/index.html
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="en">
|
3 |
+
<head>
|
4 |
+
<meta charset="utf-8" />
|
5 |
+
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
7 |
+
<meta name="theme-color" content="#000000" />
|
8 |
+
<meta
|
9 |
+
name="description"
|
10 |
+
content="Web site created using create-react-app"
|
11 |
+
/>
|
12 |
+
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
13 |
+
<!--
|
14 |
+
manifest.json provides metadata used when your web app is installed on a
|
15 |
+
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
16 |
+
-->
|
17 |
+
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
18 |
+
<!--
|
19 |
+
Notice the use of %PUBLIC_URL% in the tags above.
|
20 |
+
It will be replaced with the URL of the `public` folder during the build.
|
21 |
+
Only files inside the `public` folder can be referenced from the HTML.
|
22 |
+
|
23 |
+
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
24 |
+
work correctly both with client-side routing and a non-root public URL.
|
25 |
+
Learn how to configure a non-root public URL by running `npm run build`.
|
26 |
+
-->
|
27 |
+
<title>Medic.IAL</title>
|
28 |
+
</head>
|
29 |
+
<body>
|
30 |
+
<noscript>You need to enable JavaScript to run this app.</noscript>
|
31 |
+
<div id="root"></div>
|
32 |
+
<!--
|
33 |
+
This HTML file is a template.
|
34 |
+
If you open it directly in the browser, you will see an empty page.
|
35 |
+
|
36 |
+
You can add webfonts, meta tags, or analytics to this file.
|
37 |
+
The build step will place the bundled scripts into the <body> tag.
|
38 |
+
|
39 |
+
To begin the development, run `npm start` or `yarn start`.
|
40 |
+
To create a production bundle, use `npm run build` or `yarn build`.
|
41 |
+
-->
|
42 |
+
</body>
|
43 |
+
</html>
|
frontend/public/logo192.png
ADDED
![]() |
frontend/public/logo512.png
ADDED
![]() |
frontend/public/manifest.json
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"short_name": "React App",
|
3 |
+
"name": "Create React App Sample",
|
4 |
+
"icons": [
|
5 |
+
{
|
6 |
+
"src": "favicon.ico",
|
7 |
+
"sizes": "64x64 32x32 24x24 16x16",
|
8 |
+
"type": "image/x-icon"
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"src": "logo192.png",
|
12 |
+
"type": "image/png",
|
13 |
+
"sizes": "192x192"
|
14 |
+
},
|
15 |
+
{
|
16 |
+
"src": "logo512.png",
|
17 |
+
"type": "image/png",
|
18 |
+
"sizes": "512x512"
|
19 |
+
}
|
20 |
+
],
|
21 |
+
"start_url": ".",
|
22 |
+
"display": "standalone",
|
23 |
+
"theme_color": "#000000",
|
24 |
+
"background_color": "#ffffff"
|
25 |
+
}
|
frontend/public/robots.txt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
# https://www.robotstxt.org/robotstxt.html
|
2 |
+
User-agent: *
|
3 |
+
Disallow:
|