diff --git a/.dockerignore b/.dockerignore
index e9795c7..8eb645d 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -7,3 +7,5 @@ coverage
Docker*
start.sh
package-lock.json
+pb
+compose.yaml
diff --git a/.gitignore b/.gitignore
index 01fbd2b..e9241bf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -124,3 +124,5 @@ Thumbs.db
start.sh
logs/*
logs/*.log
+
+pb/data/*
diff --git a/Dockerfile b/Dockerfile
index fff4bf5..7937e22 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,10 +4,12 @@ FROM node:20-alpine AS node-builder
ARG APP_NAME=technostrea
ARG ENVIRONMENT=production
ARG NG_VERSION=18
+ARG ENV_URL
ENV APP_NAME=$APP_NAME
ENV ENVIRONMENT=$ENVIRONMENT
ENV NG_VERSION=$NG_VERSION
+ENV ENV_URL=$ENV_URL
WORKDIR /app
@@ -30,6 +32,9 @@ RUN npm install -g @angular/cli@$NG_VERSION
COPY . .
+RUN chmod +x replace-prod-env.sh
+RUN ./replace-prod-env.sh src/environments/environment.ts $ENV_URL
+
RUN npm install --legacy-peer-deps
RUN ng build --configuration=$ENVIRONMENT --output-path=dist/
diff --git a/compose.yaml b/compose.yaml
new file mode 100644
index 0000000..5e5ec04
--- /dev/null
+++ b/compose.yaml
@@ -0,0 +1,21 @@
+networks:
+ pb-net:
+ name: pb
+
+services:
+ pocketbase:
+ image: elestio/pocketbase:latest
+ container_name: pocketbase
+ user: root
+ environment:
+ ADMIN_EMAIL: "admin@example.com"
+ ADMIN_PASSWORD: "password1234"
+ networks:
+ - pb-net
+ volumes:
+ - ./pb/data:/pb/data
+ - ./pb/schemas:/schemas
+ - ./pb/init.sh:/init.sh
+ entrypoint: ["/bin/sh", "/init.sh"]
+ ports:
+ - "8090:8090"
diff --git a/pb/data/.gitkeep b/pb/data/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/pb/init.sh b/pb/init.sh
new file mode 100644
index 0000000..b00a946
--- /dev/null
+++ b/pb/init.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+set -e
+PB="/usr/local/bin/pocketbase"
+ADMIN_EMAIL="${ADMIN_EMAIL:-admin@example.com}"
+ADMIN_PASSWORD="${ADMIN_PASSWORD:-password1234}"
+LOCK_FILE="/pb/data/superuser_created"
+
+mkdir -p /pb/data
+
+# Vérifier si le fichier de verrouillage existe
+if [ -f "$LOCK_FILE" ]; then
+ echo "✅ Le superuser a déjà été créé précédemment."
+else
+ echo "➡️ Vérification du superuser existant..."
+ if $PB list-users --dir /pb/data | grep -q "$ADMIN_EMAIL"; then
+ echo "✅ Le superuser $ADMIN_EMAIL existe déjà."
+ else
+ echo "➡️ Création du superuser..."
+ $PB superuser upsert "$ADMIN_EMAIL" "$ADMIN_PASSWORD"
+ fi
+ # Créer le fichier de verrouillage
+ touch "$LOCK_FILE"
+fi
+
+echo "➡️ Lancement de PocketBase..."
+exec $PB serve --http=0.0.0.0:8090 --dir /pb/data
diff --git a/pb/schemas/schema__1.0.0.json b/pb/schemas/schema__1.0.0.json
new file mode 100644
index 0000000..49af99e
--- /dev/null
+++ b/pb/schemas/schema__1.0.0.json
@@ -0,0 +1,1111 @@
+[
+ {
+ "id": "pbc_3142635823",
+ "listRule": null,
+ "viewRule": null,
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": null,
+ "name": "_superusers",
+ "type": "auth",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cost": 0,
+ "hidden": true,
+ "id": "password901924565",
+ "max": 0,
+ "min": 8,
+ "name": "password",
+ "pattern": "",
+ "presentable": false,
+ "required": true,
+ "system": true,
+ "type": "password"
+ },
+ {
+ "autogeneratePattern": "[a-zA-Z0-9]{50}",
+ "hidden": true,
+ "id": "text2504183744",
+ "max": 60,
+ "min": 30,
+ "name": "tokenKey",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "email3885137012",
+ "name": "email",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": true,
+ "system": true,
+ "type": "email"
+ },
+ {
+ "hidden": false,
+ "id": "bool1547992806",
+ "name": "emailVisibility",
+ "presentable": false,
+ "required": false,
+ "system": true,
+ "type": "bool"
+ },
+ {
+ "hidden": false,
+ "id": "bool256245529",
+ "name": "verified",
+ "presentable": false,
+ "required": false,
+ "system": true,
+ "type": "bool"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [
+ "CREATE UNIQUE INDEX `idx_tokenKey_pbc_3142635823` ON `_superusers` (`tokenKey`)",
+ "CREATE UNIQUE INDEX `idx_email_pbc_3142635823` ON `_superusers` (`email`) WHERE `email` != ''"
+ ],
+ "system": true,
+ "authRule": "",
+ "manageRule": null,
+ "authAlert": {
+ "enabled": true,
+ "emailTemplate": {
+ "subject": "Login from a new location",
+ "body": "
Hello,
\nWe noticed a login to your {APP_NAME} account from a new location.
\nIf this was you, you may disregard this email.
\nIf this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.
\n\n Thanks,
\n {APP_NAME} team\n
"
+ }
+ },
+ "oauth2": {
+ "mappedFields": {
+ "id": "",
+ "name": "",
+ "username": "",
+ "avatarURL": ""
+ },
+ "enabled": false
+ },
+ "passwordAuth": {
+ "enabled": true,
+ "identityFields": [
+ "email"
+ ]
+ },
+ "mfa": {
+ "enabled": false,
+ "duration": 1800,
+ "rule": ""
+ },
+ "otp": {
+ "enabled": false,
+ "duration": 180,
+ "length": 8,
+ "emailTemplate": {
+ "subject": "OTP for {APP_NAME}",
+ "body": "Hello,
\nYour one-time password is: {OTP}
\nIf you didn't ask for the one-time password, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
"
+ }
+ },
+ "authToken": {
+ "duration": 86400
+ },
+ "passwordResetToken": {
+ "duration": 1800
+ },
+ "emailChangeToken": {
+ "duration": 1800
+ },
+ "verificationToken": {
+ "duration": 259200
+ },
+ "fileToken": {
+ "duration": 180
+ },
+ "verificationTemplate": {
+ "subject": "Verify your {APP_NAME} email",
+ "body": "Hello,
\nThank you for joining us at {APP_NAME}.
\nClick on the button below to verify your email address.
\n\n Verify\n
\n\n Thanks,
\n {APP_NAME} team\n
"
+ },
+ "resetPasswordTemplate": {
+ "subject": "Reset your {APP_NAME} password",
+ "body": "Hello,
\nClick on the button below to reset your password.
\n\n Reset password\n
\nIf you didn't ask to reset your password, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
"
+ },
+ "confirmEmailChangeTemplate": {
+ "subject": "Confirm your {APP_NAME} new email address",
+ "body": "Hello,
\nClick on the button below to confirm your new email address.
\n\n Confirm new email\n
\nIf you didn't ask to change your email address, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
"
+ }
+ },
+ {
+ "id": "_pb_users_auth_",
+ "listRule": "id = @request.auth.id",
+ "viewRule": "",
+ "createRule": "",
+ "updateRule": "id = @request.auth.id",
+ "deleteRule": "id = @request.auth.id",
+ "name": "users",
+ "type": "auth",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cost": 0,
+ "hidden": true,
+ "id": "password901924565",
+ "max": 0,
+ "min": 8,
+ "name": "password",
+ "pattern": "",
+ "presentable": false,
+ "required": true,
+ "system": true,
+ "type": "password"
+ },
+ {
+ "autogeneratePattern": "[a-zA-Z0-9]{50}",
+ "hidden": true,
+ "id": "text2504183744",
+ "max": 60,
+ "min": 30,
+ "name": "tokenKey",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "exceptDomains": null,
+ "hidden": false,
+ "id": "email3885137012",
+ "name": "email",
+ "onlyDomains": null,
+ "presentable": false,
+ "required": true,
+ "system": true,
+ "type": "email"
+ },
+ {
+ "hidden": false,
+ "id": "bool1547992806",
+ "name": "emailVisibility",
+ "presentable": false,
+ "required": false,
+ "system": true,
+ "type": "bool"
+ },
+ {
+ "hidden": false,
+ "id": "bool256245529",
+ "name": "verified",
+ "presentable": false,
+ "required": false,
+ "system": true,
+ "type": "bool"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text1579384326",
+ "max": 255,
+ "min": 0,
+ "name": "name",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "file376926767",
+ "maxSelect": 1,
+ "maxSize": 0,
+ "mimeTypes": [
+ "image/jpeg",
+ "image/png",
+ "image/svg+xml",
+ "image/gif",
+ "image/webp"
+ ],
+ "name": "avatar",
+ "presentable": false,
+ "protected": false,
+ "required": false,
+ "system": false,
+ "thumbs": null,
+ "type": "file"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [
+ "CREATE UNIQUE INDEX `idx_tokenKey__pb_users_auth_` ON `users` (`tokenKey`)",
+ "CREATE UNIQUE INDEX `idx_email__pb_users_auth_` ON `users` (`email`) WHERE `email` != ''"
+ ],
+ "system": false,
+ "authRule": "",
+ "manageRule": null,
+ "authAlert": {
+ "enabled": true,
+ "emailTemplate": {
+ "subject": "Login from a new location",
+ "body": "Hello,
\nWe noticed a login to your {APP_NAME} account from a new location.
\nIf this was you, you may disregard this email.
\nIf this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.
\n\n Thanks,
\n {APP_NAME} team\n
"
+ }
+ },
+ "oauth2": {
+ "mappedFields": {
+ "id": "",
+ "name": "name",
+ "username": "",
+ "avatarURL": "avatar"
+ },
+ "enabled": false
+ },
+ "passwordAuth": {
+ "enabled": true,
+ "identityFields": [
+ "email"
+ ]
+ },
+ "mfa": {
+ "enabled": false,
+ "duration": 1800,
+ "rule": ""
+ },
+ "otp": {
+ "enabled": false,
+ "duration": 180,
+ "length": 8,
+ "emailTemplate": {
+ "subject": "OTP for {APP_NAME}",
+ "body": "Hello,
\nYour one-time password is: {OTP}
\nIf you didn't ask for the one-time password, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
"
+ }
+ },
+ "authToken": {
+ "duration": 604800
+ },
+ "passwordResetToken": {
+ "duration": 1800
+ },
+ "emailChangeToken": {
+ "duration": 1800
+ },
+ "verificationToken": {
+ "duration": 259200
+ },
+ "fileToken": {
+ "duration": 180
+ },
+ "verificationTemplate": {
+ "subject": "Verify your {APP_NAME} email",
+ "body": "Hello,
\nThank you for joining us at {APP_NAME}.
\nClick on the button below to verify your email address.
\n\n Verify\n
\n\n Thanks,
\n {APP_NAME} team\n
"
+ },
+ "resetPasswordTemplate": {
+ "subject": "Reset your {APP_NAME} password",
+ "body": "Hello,
\nClick on the button below to reset your password.
\n\n Reset password\n
\nIf you didn't ask to reset your password, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
"
+ },
+ "confirmEmailChangeTemplate": {
+ "subject": "Confirm your {APP_NAME} new email address",
+ "body": "Hello,
\nClick on the button below to confirm your new email address.
\n\n Confirm new email\n
\nIf you didn't ask to change your email address, you can ignore this email.
\n\n Thanks,
\n {APP_NAME} team\n
"
+ }
+ },
+ {
+ "id": "pbc_4275539003",
+ "listRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "viewRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "name": "_authOrigins",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text455797646",
+ "max": 0,
+ "min": 0,
+ "name": "collectionRef",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text127846527",
+ "max": 0,
+ "min": 0,
+ "name": "recordRef",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text4228609354",
+ "max": 0,
+ "min": 0,
+ "name": "fingerprint",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [
+ "CREATE UNIQUE INDEX `idx_authOrigins_unique_pairs` ON `_authOrigins` (collectionRef, recordRef, fingerprint)"
+ ],
+ "system": true
+ },
+ {
+ "id": "pbc_2281828961",
+ "listRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "viewRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "name": "_externalAuths",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text455797646",
+ "max": 0,
+ "min": 0,
+ "name": "collectionRef",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text127846527",
+ "max": 0,
+ "min": 0,
+ "name": "recordRef",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text2462348188",
+ "max": 0,
+ "min": 0,
+ "name": "provider",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text1044722854",
+ "max": 0,
+ "min": 0,
+ "name": "providerId",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [
+ "CREATE UNIQUE INDEX `idx_externalAuths_record_provider` ON `_externalAuths` (collectionRef, recordRef, provider)",
+ "CREATE UNIQUE INDEX `idx_externalAuths_collection_provider` ON `_externalAuths` (collectionRef, provider, providerId)"
+ ],
+ "system": true
+ },
+ {
+ "id": "pbc_2279338944",
+ "listRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "viewRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": null,
+ "name": "_mfas",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text455797646",
+ "max": 0,
+ "min": 0,
+ "name": "collectionRef",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text127846527",
+ "max": 0,
+ "min": 0,
+ "name": "recordRef",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text1582905952",
+ "max": 0,
+ "min": 0,
+ "name": "method",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [
+ "CREATE INDEX `idx_mfas_collectionRef_recordRef` ON `_mfas` (collectionRef,recordRef)"
+ ],
+ "system": true
+ },
+ {
+ "id": "pbc_1638494021",
+ "listRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "viewRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": null,
+ "name": "_otps",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text455797646",
+ "max": 0,
+ "min": 0,
+ "name": "collectionRef",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text127846527",
+ "max": 0,
+ "min": 0,
+ "name": "recordRef",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "cost": 8,
+ "hidden": true,
+ "id": "password901924565",
+ "max": 0,
+ "min": 0,
+ "name": "password",
+ "pattern": "",
+ "presentable": false,
+ "required": true,
+ "system": true,
+ "type": "password"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": true,
+ "id": "text3866985172",
+ "max": 0,
+ "min": 0,
+ "name": "sentTo",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": true,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [
+ "CREATE INDEX `idx_otps_collectionRef_recordRef` ON `_otps` (collectionRef, recordRef)"
+ ],
+ "system": true
+ },
+ {
+ "id": "pbc_3414089001",
+ "listRule": "",
+ "viewRule": "",
+ "createRule": "",
+ "updateRule": "@request.auth.id = utilisateur.id",
+ "deleteRule": "@request.auth.id = utilisateur.id",
+ "name": "profiles",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text3130199401",
+ "max": 0,
+ "min": 0,
+ "name": "profession",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "relation488399795",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "utilisateur",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "bool2649804963",
+ "name": "estVerifier",
+ "presentable": true,
+ "required": false,
+ "system": false,
+ "type": "bool"
+ },
+ {
+ "cascadeDelete": false,
+ "collectionId": "pbc_286677749",
+ "hidden": false,
+ "id": "relation2152015135",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "secteur",
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "json1235994641",
+ "maxSize": 0,
+ "name": "reseaux",
+ "presentable": true,
+ "required": false,
+ "system": false,
+ "type": "json"
+ },
+ {
+ "hidden": false,
+ "id": "file3060792978",
+ "maxSelect": 1,
+ "maxSize": 0,
+ "mimeTypes": [
+ "application/pdf"
+ ],
+ "name": "cv",
+ "presentable": false,
+ "protected": true,
+ "required": false,
+ "system": false,
+ "thumbs": [],
+ "type": "file"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text608239274",
+ "max": 0,
+ "min": 0,
+ "name": "apropos",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text3709889147",
+ "max": 0,
+ "min": 0,
+ "name": "bio",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ },
+ {
+ "id": "pbc_621264433",
+ "listRule": "",
+ "viewRule": "",
+ "createRule": "@request.auth.id = utilisateur.id",
+ "updateRule": "@request.auth.id = utilisateur.id",
+ "deleteRule": "@request.auth.id = utilisateur.id",
+ "name": "projets",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text1819170229",
+ "max": 0,
+ "min": 0,
+ "name": "nom",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": true,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "exceptDomains": [],
+ "hidden": false,
+ "id": "url2771563701",
+ "name": "lien",
+ "onlyDomains": [],
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "url"
+ },
+ {
+ "hidden": false,
+ "id": "file2608223519",
+ "maxSelect": 1,
+ "maxSize": 0,
+ "mimeTypes": [
+ "image/jpeg",
+ "image/png",
+ "image/webp"
+ ],
+ "name": "fichier",
+ "presentable": false,
+ "protected": true,
+ "required": false,
+ "system": false,
+ "thumbs": [
+ "50x50"
+ ],
+ "type": "file"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text1843675174",
+ "max": 0,
+ "min": 0,
+ "name": "description",
+ "pattern": "",
+ "presentable": false,
+ "primaryKey": false,
+ "required": false,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "cascadeDelete": true,
+ "collectionId": "_pb_users_auth_",
+ "hidden": false,
+ "id": "relation488399795",
+ "maxSelect": 1,
+ "minSelect": 0,
+ "name": "utilisateur",
+ "presentable": false,
+ "required": true,
+ "system": false,
+ "type": "relation"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [],
+ "system": false
+ },
+ {
+ "id": "pbc_286677749",
+ "listRule": "",
+ "viewRule": "",
+ "createRule": null,
+ "updateRule": null,
+ "deleteRule": null,
+ "name": "secteur",
+ "type": "base",
+ "fields": [
+ {
+ "autogeneratePattern": "[a-z0-9]{15}",
+ "hidden": false,
+ "id": "text3208210256",
+ "max": 15,
+ "min": 15,
+ "name": "id",
+ "pattern": "^[a-z0-9]+$",
+ "presentable": false,
+ "primaryKey": true,
+ "required": true,
+ "system": true,
+ "type": "text"
+ },
+ {
+ "autogeneratePattern": "",
+ "hidden": false,
+ "id": "text1819170229",
+ "max": 0,
+ "min": 0,
+ "name": "nom",
+ "pattern": "",
+ "presentable": true,
+ "primaryKey": false,
+ "required": true,
+ "system": false,
+ "type": "text"
+ },
+ {
+ "hidden": false,
+ "id": "autodate2990389176",
+ "name": "created",
+ "onCreate": true,
+ "onUpdate": false,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ },
+ {
+ "hidden": false,
+ "id": "autodate3332085495",
+ "name": "updated",
+ "onCreate": true,
+ "onUpdate": true,
+ "presentable": false,
+ "system": false,
+ "type": "autodate"
+ }
+ ],
+ "indexes": [
+ "CREATE UNIQUE INDEX `idx_MNAdhMbyBE` ON `secteur` (`nom`)"
+ ],
+ "system": false
+ }
+]
diff --git a/replace-prod-env.sh b/replace-prod-env.sh
new file mode 100644
index 0000000..de11086
--- /dev/null
+++ b/replace-prod-env.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# Vérifier que le fichier et la nouvelle URL sont fournis
+if [ "$#" -ne 2 ]; then
+ echo "Usage: $0 "
+ exit 1
+fi
+
+FICHIER=$1
+NOUVELLE_URL=$2
+
+# Vérifier que le fichier existe
+if [ ! -f "$FICHIER" ]; then
+ echo "Erreur: Le fichier $FICHIER n'existe pas."
+ exit 1
+fi
+
+# Détecter le système d'exploitation pour adapter la commande sed
+case "$(uname -s)" in
+ Darwin*)
+ # macOS
+ sed -i '' "s|baseUrl: '.*'|baseUrl: '$NOUVELLE_URL'|g" "$FICHIER"
+ ;;
+ Linux*)
+ # Linux
+ sed -i "s|baseUrl: '.*'|baseUrl: '$NOUVELLE_URL'|g" "$FICHIER"
+ ;;
+ *)
+ echo "Système d'exploitation non supporté"
+ exit 1
+ ;;
+esac
+
+echo "L'URL a été remplacée avec succès dans $FICHIER."
diff --git a/src/environments/environment.development.ts b/src/environments/environment.development.ts
index 56d2dfb..894e345 100644
--- a/src/environments/environment.development.ts
+++ b/src/environments/environment.development.ts
@@ -1,4 +1,4 @@
export const environment = {
production: false,
- baseUrl: 'https://pb-dev.prod.K3s.technostrea.fr',
+ baseUrl: 'http://localhost:8090',
};
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index 744e8d1..76011c9 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -1,4 +1,4 @@
export const environment = {
production: true,
- baseUrl: 'https://pb-dev.prod.K3s.technostrea.fr',
+ baseUrl: 'http://localhost:8090',
};