Skip to content
Snippets Groups Projects
Commit 42123376 authored by julien.debray's avatar julien.debray
Browse files

Merge branch 'main' into 'web'

# Conflicts:
#   backend/node_modules/.package-lock.json
#   backend/package-lock.json
#   backend/package.json
parents 65724802 2fd262b4
No related branches found
No related tags found
1 merge request!14ajout de la page de consultation des rendez-vous coter pro avec la possibilité...
Showing
with 658 additions and 0 deletions
.DS_Store 0 → 100644
File added
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/rpg.iml" filepath="$PROJECT_DIR$/.idea/rpg.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?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$/temp" />
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
const express = require('express')
const bodyParser = require('body-parser');
const db = require('./DatabaseConnection')
const app = express()
const port = 3001
const cors = require('cors');
app.use(bodyParser.json());
app.use(cors({
origin: '*'
}));
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.get('/liste-rdv-magasin', (req, res) => {
let date = formatDate(req.body.date);
let id_address = req.body.id_address;
db.executeQuery("SELECT * FROM Rendez_Vous where Id_Adresse = " + id_address + " and Date = " + date)
.then((result) => {
console.log(result);
res.status(200).send(result);
})
.catch((err) => {
res.status(500).send(err);
});
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
app.post('/liste-horaires', (req, res) => {
let date = formatDate(req.body.date);
console.log(date)
db.executeQuery("select Heure from rendez_vous WHERE Date = '"+date+"' AND Id_Adresse = "+req.body.address).then((result) => {
console.log(result);
res.status(200).send(result);
}).catch((err) => {
res.status(500).send(err);
});
})
app.get('/prendre-rdv', (req, res) => {
selectAppointmentWithDate(req.body.date, 'Heure').then((result) => {
res.status(200).send(result);
}).catch((err) => {
res.status(500).send(err);
});
})
app.post('/prendre-rdv', (req, res) => {
selectAppointmentWithDate(req.body.date, 'Heure, Id_Adresse').then((result) => {
for (let i = 0; i < result.length; i++) {
if (result[i].Heure == req.body.hour && result[i].Id_Adresse == req.body.address) {
res.status(400).send("Horaire déjà pris");
return;
}
}
let date = formatDate(req.body.date);
let hour = req.body.hour;
let client = req.body.client;
let address = req.body.address;
db.updateQuery("INSERT INTO Rendez_Vous (Date, Heure, Description, Id_Client, Id_Adresse) VALUES ('" + date + "', STR_TO_DATE('" + hour + "', '%H:%i'), NULL, '" + client + "', '" + address + "')")
.then(() => {
res.status(200).send("Rendez-vous pris");
})
.catch((err) => {
console.log(err);
res.status(500).send(err);
});
}).catch((err) => {
res.status(500).send(err);
});
})
app.get('/liste-magasins', (req, res) => {
db.executeQuery("SELECT * FROM Adresse")
.then((result) => {
console.log(result);
res.status(200).send(result);
})
.catch((err) => {
res.status(500).send(err);
});
})
app.delete('/supp-rendez-vous', (req, res) => {
let date = formatDate(req.body.date);
db.executeQuery("SELECT * FROM rendez_vous WHERE Id_RDV = " + req.body.idrdv + " AND Id_Client = " + req.body.idclient)
.then((result) => {
if(formatDate(result[0]['Date']) > date){
db.executeQuery("DELETE FROM rendez_vous WHERE Id_RDV = " + req.body.idrdv)
.then(r => {
console.log(r)
res.status(200).send(r);
})
.catch((err) => {
res.status(500).send(err);
})
} else {
res.status(500).send("Impossible de supprimer un rendez-vous déjà passé.");
}
})
.catch((err) => {
res.status(500).send("Aucun rendez-vous à annuler");
})
})
app.post('/ajouter-conseil', (req, res) => {
let id_rdv = req.body.idrdv;
let description = req.body.description;
let id_article = req.body.idarticle
let has_bought = req.body.hasbought;
if(typeof id_article === 'undefined'){
db.executeQuery('INSERT INTO conseil (Description, id_RDV) VALUES ("' + description + '", "' + id_rdv + '")')
.then(() => {
res.status(200).send("Le conseil à bien été ajouté.");
})
.catch((err) => {
res.status(500).send(err);
});
} else {
if(typeof has_bought === 'undefined'){
has_bought = 0;
}
db.executeQuery('INSERT INTO conseil (Description, Has_Bought, Id_RDV, Id_Article) VALUES ("' + description + '", "' + has_bought + '", "' + id_rdv + '", "' + id_article + '")')
.then(() => {
res.status(200).send("Le conseil à bien été ajouté.");
})
.catch((err) => {
res.status(500).send(err);
});
}
})
app.post('/inscription', (req, res) => {
db.executeQuery("INSERT INTO `Client` (`Id_Client`, `Nom`, `Prenom`, `Mail`, `Password`, `Date_Naissance`, `Sexe`, `Taille`, `Poids`, `Pointure`, `IsAdmin`) VALUES (NULL, '"
+ req.body.nom + "', '" + req.body.prenom + "', '" + req.body.email + "', '" + req.body.password + "', '"
+ req.body.date_naissance + "', '" + req.body.sexe + "', '" + req.body.taille + "', '"
+ req.body.poids + "', '" + req.body.pointure + "', '0')")
.then(() => {
res.status(200).send("Le client à bien été ajouté.");
})
.catch((err) => {
res.status(500).send(err);
});
})
app.put('/update-conseil', (req, res) => {
let id_conseil = req.body.idconseil;
let description = req.body.description;
let id_article = req.body.idarticle
let has_bought = req.body.hasbought;
if(typeof id_article === 'undefined'){
db.executeQuery('UPDATE conseil SET Description = "' + description + '" WHERE Id_Conseil = "' + id_conseil + '"')
.then(() => {
res.status(200).send("Le conseil à bien été mis à jour.");
})
.catch((err) => {
res.status(500).send(err);
});
} else {
if(typeof has_bought === 'undefined'){
has_bought = 0;
}
db.executeQuery('UPDATE conseil SET Description = "' + description + '", Id_Article = "' + id_article + '", Has_Bought = "' + has_bought + '" WHERE Id_Conseil = "' + id_conseil + '"')
.then(() => {
res.status(200).send("Le conseil à bien été mis à jour.");
})
.catch((err) => {
res.status(500).send(err);
});
}
})
/* app.put('/update-rendez-vous', (req, res) => {
let realDate = formatDate(req.body.realdate);
let newDate = formatDate(req.body.newdate);
let heure = formatHour(req.body.heure);
db.executeQuery("SELECT * FROM rendez_vous WHERE Id_RDV = " + req.body.idrdv + " AND Id_Client = " + req.body.idclient)
.then((result) => {
if(formatDate(result[0]['Date']) > date){
db.executeQuery("UPDATE rendez_vous SET Date = " + date + " AND Heure = " + heure + " WHERE Id_RDV = " + result[0]['Id_RDV'] + " AND Id_Client = " + result[0]['Id_Client'])
.then(r => {
console.log(r)
res.status(200).send(r);
})
.catch((err) => {
res.status(500).send(err);
})
} else {
res.status(500).send("Impossible de modifier un rendez-vous déjà passé.");
}
})
.catch((err) => {
res.status(500).send("Aucun rendez-vous à modifier");
})
})*/
function selectAppointmentWithDate(date, column = "*") {
return db.executeQuery("SELECT " + column + " FROM Rendez_Vous WHERE DATE='" + date + "'")
.then((result) => {
for (let i = 0; i < result.length; i++) {
result[i].Heure = formatHour(result[i].Heure);
}
console.log(result);
return result;
})
.catch((err) => {
console.log(err);
return err;
});
}
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
function formatHour(hour) {
var hours = hour.substring(0, 2);
var minutes = hour.substring(3, 5);
return hours + ":" + minutes;
}
\ No newline at end of file
var mysql = require('mysql2');
var config = {
host: "localhost",
port: "3306",
user: "root",
password: "root",
database: "mydb"
};
module.exports = {
// Execute SQL query given and return result
executeQuery: function(query) {
return new Promise((resolve, reject) => {
const con = mysql.createConnection(config);
con.connect();
con.query(query, (err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
});
con.end();
});
},
// Execute SQL query given, which may be an INSERT, UPDATE, or DELETE statement or other SQL statement that does not return data
updateQuery: function(query) {
return new Promise((resolve, reject) => {
const con = mysql.createConnection(config);
con.connect();
con.query(query, (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
con.end();
});
},
}
\ No newline at end of file
# Utilisation de la base de donné avec mysql Workbench
## Insatallation
Il faut installer mysql et mysql Workbench.
# Utilisation
Il faut lancer mysql.
Mac : brew services start mysql
Linux : service mysql start
Dans mysql Workbench il faudra faire une connection avec mysql.
Il faudra appuyer sur le button +.
![diagram](/db/creation_connection.png "Création de la connection")
Donner un nom pour la connection.
![diagram](/db/param_connection.png "Param de connection")
Il faudra pour finir importe le fichier creation_db qui va crée la db.
\ No newline at end of file
File added
db/creation_connection.png

127 KiB

-- MySQL Script generated by MySQL Workbench
-- Tue Jan 17 15:50:00 2023
-- Model: New Model Version: 1.0
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUPrendez_vous_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`Client`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Client` (
`Id_Client` INT NOT NULL AUTO_INCREMENT,
`Nom` VARCHAR(80) NULL,
`Prenom` VARCHAR(80) NULL,
`Mail` VARCHAR(80) NULL UNIQUE,
`Password` VARCHAR(80) NULL,
`Date_Naissance` DATE NULL,
`Sexe` VARCHAR(80) NULL,
`Taille` INT NULL,
`Poids` INT NULL,
`Pointure` INT NULL,
`IsAdmin` TINYINT(1) NULL,
PRIMARY KEY (`Id_Client`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Adresse`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Adresse` (
`Id_Adresse` INT NOT NULL AUTO_INCREMENT,
`Adresse` VARCHAR(80) NULL,
`Code_Postal` INT NULL,
`Ville` VARCHAR(80) NULL,
`Image` VARCHAR(80) NULL,
PRIMARY KEY (`Id_Adresse`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Rendez_Vous`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Rendez_Vous` (
`Id_RDV` INT NOT NULL AUTO_INCREMENT,
`Date` DATE NULL,
`Heure` TIME NULL,
`Description` VARCHAR(80) NULL,
`Id_Client` INT NOT NULL,
`Id_Adresse` INT NOT NULL,
PRIMARY KEY (`Id_RDV`),
INDEX `fk_Rendez_Vous_Client_idx` (`Id_Client` ASC) VISIBLE,
INDEX `fk_Rendez_Vous_Adresse1_idx` (`Id_Adresse` ASC) VISIBLE,
CONSTRAINT `fk_Rendez_Vous_Client`
FOREIGN KEY (`Id_Client`)
REFERENCES `mydb`.`Client` (`Id_Client`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Rendez_Vous_Adresse1`
FOREIGN KEY (`Id_Adresse`)
REFERENCES `mydb`.`Adresse` (`Id_Adresse`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Video`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Video` (
`Id_Video` INT NOT NULL AUTO_INCREMENT,
`Nom_Fichier` VARCHAR(45) NULL,
`Id_RDV` INT NOT NULL,
PRIMARY KEY (`Id_Video`),
INDEX `fk_Video_Rendez_Vous2_idx` (`Id_RDV` ASC) VISIBLE,
CONSTRAINT `fk_Video_Rendez_Vous2`
FOREIGN KEY (`Id_RDV`)
REFERENCES `mydb`.`Rendez_Vous` (`Id_RDV`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Article`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Article` (
`Id_Article` INT NOT NULL AUTO_INCREMENT,
`Nom` VARCHAR(80) NOT NULL,
`Description` VARCHAR(80) NULL,
`Image` VARCHAR(250) NULL,
`Prix` INT NOT NULL,
PRIMARY KEY (`Id_Article`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Conseil`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Conseil` (
`Id_Conseil` INT NOT NULL AUTO_INCREMENT,
`Description` VARCHAR(80) NULL,
`Has_Bought` TINYINT(1) NULL,
`Id_RDV` INT NOT NULL,
`Id_Article` INT NULL,
PRIMARY KEY (`Id_Conseil`),
INDEX `fk_Conseil_Rendez_Vous1_idx` (`Id_RDV` ASC) VISIBLE,
INDEX `fk_Conseil_Article1_idx` (`Id_Article` ASC) VISIBLE,
CONSTRAINT `fk_Conseil_Rendez_Vous1`
FOREIGN KEY (`Id_RDV`)
REFERENCES `mydb`.`Rendez_Vous` (`Id_RDV`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Conseil_Article1`
FOREIGN KEY (`Id_Article`)
REFERENCES `mydb`.`Article` (`Id_Article`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Jour`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Jour` (
`Id_Jour` INT NOT NULL AUTO_INCREMENT,
`Nom` VARCHAR(45) NULL,
PRIMARY KEY (`Id_Jour`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Horaire`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Horaire` (
`Id_Horaire` INT NOT NULL AUTO_INCREMENT,
`Heure_Debut` TIME NULL,
`Heure_Fin` TIME NULL,
`Id_Jour` INT NOT NULL,
PRIMARY KEY (`Id_Horaire`),
INDEX `fk_Horaire_Jour1_idx` (`Id_Jour` ASC) VISIBLE,
CONSTRAINT `fk_Horaire_Jour1`
FOREIGN KEY (`Id_Jour`)
REFERENCES `mydb`.`Jour` (`Id_Jour`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Video`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Video` (
`Id_Video` INT NOT NULL AUTO_INCREMENT,
`Nom_Fichier` VARCHAR(45) NULL,
`Id_RDV` INT NOT NULL,
PRIMARY KEY (`Id_Video`),
INDEX `fk_Video_Rendez_Vous2_idx` (`Id_RDV` ASC) VISIBLE,
CONSTRAINT `fk_Video_Rendez_Vous2`
FOREIGN KEY (`Id_RDV`)
REFERENCES `mydb`.`Rendez_Vous` (`Id_RDV`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
INSERT INTO mydb.Client
(Nom, Prenom, Mail, Password, Date_Naissance, Sexe, Taille, Poids, Pointure, IsAdmin)
VALUES
('Acevedo', 'Valentin', 'valentin.acevedo@etu.hesge.ch', 'bibulus', '2023-01-17', 'Homme', '197', '76', '45', '1'),
('Gouveia', 'André', 'andre.gouveiad@etu.hesge.ch', 'babalos', '2023-01-04', 'Homme', '195', '120', '47', 0);
INSERT INTO mydb.Adresse
(Adresse, Code_Postal, Ville, Image)
VALUES
('Rue Grange-Levrier 1', '1220', 'Vernier', 'https://i.skyrock.net/9640/6429640/pics/164610040_small.jpg'),
('Rue Francois Durafour 13', '1220', 'Vernier', 'https://i.skyrock.net/9640/6429640/pics/164610040_small.jpg');
INSERT INTO mydb.Article
(Nom, Description, Image, Prix)
VALUES
('Bar protein', 'Je suis bonne.', 'https://image.migros.ch/mo-boxed/v-w-480-h-360/af37a13a9d139d707adb40eab1bc31d3db6133d0/sponser-low-carb-bar-choco-brownie.jpg', '2'),
('Chaussure Betton', 'Tu vas beton.', 'https://static.nike.com/a/images/t_PDP_1728_v1/d6420cb8-3eb5-4fb8-ab0e-5676a75710cb/chaussure-de-running-sur-route-pegasus-39-pour-tw7PWn.png', '110');
INSERT INTO mydb.Rendez_Vous
(Date, Heure, Description, Id_Client, Id_Adresse)
VALUES
('2022-12-05', '14:30', 'Premier visite', (SELECT Id_Client FROM mydb.Client WHERE mail = 'andre.gouveiad@etu.hesge.ch'), (SELECT Id_Adresse FROM mydb.Adresse WHERE Adresse = 'Rue Grange-Levrier 1')),
('2022-11-27', '19:00', 'Visite pour verifier la progression de la course',(SELECT Id_Client FROM mydb.Client WHERE Prenom = 'Valentin'), (SELECT Id_Adresse FROM mydb.Adresse WHERE Adresse = 'Rue Francois Durafour 13'));
INSERT INTO mydb.Conseil
(Description, Has_Bought, Id_RDV, Id_Article)
VALUES
('Faire exercices pour fésier pour le genoux. La bar permetera de faire muscles', 0, (SELECT Id_RDV FROM mydb.Rendez_vous WHERE Date = '2022-12-05'), (SELECT Id_Article FROM mydb.Article WHERE Nom = 'Bar protein')),
('Meilleur maintien de la cheville. Plus adapter pour la plante des pieds', 1, (SELECT Id_RDV FROM mydb.Rendez_vous WHERE Date = '2022-11-27'), (SELECT Id_Article FROM mydb.Article WHERE Nom = 'Chaussure Betton'));
INSERT INTO mydb.Video
(Nom_Fichier, Id_RDV)
VALUES
('Andre-Course-2022-12-05', (SELECT Id_RDV FROM mydb.Rendez_Vous WHERE Date = '2022-12-05')),
('Valentin-Fente-2022-11-27', (SELECT Id_RDV FROM mydb.Rendez_Vous WHERE Date = '2022-11-27'));
INSERT INTO mydb.Jour
(Nom)
VALUES
('Lundi'),
('Mardi'),
('Mercredi'),
('Jeudi'),
('Vendredi');
INSERT INTO mydb.Horaire
(Heure_Debut, Heure_Fin, Id_Jour)
VALUES
('08:00', '19:30', (SELECT Id_Jour FROM mydb.Jour WHERE Nom = 'Lundi')),
('08:00', '18:00', (SELECT Id_Jour FROM mydb.Jour WHERE Nom = 'Mercredi'));
db/param_connection.png

174 KiB

node_modules/
.expo/
dist/
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
web-build/
# macOS
.DS_Store
import { createStackNavigator } from "@react-navigation/stack";
import { NavigationContainer, DefaultTheme } from "@react-navigation/native";
import { useFonts } from "expo-font";
import Home from './screens/Home';
import Details from './screens/Details';
import Accounts from './screens/Accounts';
import RdvScreen from './screens/RdvScreen'
const Stack = createStackNavigator();
const theme = {
...DefaultTheme,
colors: {
...DefaultTheme.colors,
background: "transparent"
}
}
const App = () => {
const [loaded] = useFonts({
InterBold: require("./assets/fonts/Inter-Bold.ttf"),
InterLight: require("./assets/fonts/Inter-Light.ttf"),
InterMedium: require("./assets/fonts/Inter-Medium.ttf"),
InterRegular: require("./assets/fonts/Inter-Regular.ttf"),
InterSemiBold: require("./assets/fonts/Inter-SemiBold.ttf")
});
if(!loaded) return null;
return (
<NavigationContainer theme={theme}>
<Stack.Navigator screenOptions={{headerShown: false}} initialRouteName="Home">
<Stack.Screen name="Home" component={Home}/>
<Stack.Screen name="Details" component={Details}/>
<Stack.Screen name="Accounts" component={Accounts}/>
<Stack.Screen name="RdvScreen" component={RdvScreen}/>
</Stack.Navigator>
</NavigationContainer>
);
}
export default App;
{
"expo": {
"name": "rpg_app",
"slug": "rpg_app",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"updates": {
"fallbackToCacheTimeout": 0
},
"assetBundlePatterns": [
"**/*"
],
"ios": {
"supportsTablet": true
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#FFFFFF"
}
},
"web": {
"favicon": "./assets/favicon.png"
}
}
}
mobile_app/assets/adaptive-icon.png

17.1 KiB

mobile_app/assets/favicon.png

1.43 KiB

File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment