From 296727ead286b5fde33972843d93cb42048c6a90 Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Tue, 18 Mar 2025 16:57:24 -0300 Subject: [PATCH] Modificado o Storage para ser um singleton --- Tracker/package-lock.json | 44 +++++++++++++++++++++----- Tracker/package.json | 3 +- Tracker/src/system/database/storage.js | 35 ++++++++++++++++++++ 3 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 Tracker/src/system/database/storage.js diff --git a/Tracker/package-lock.json b/Tracker/package-lock.json index ebc80a1..2a567dc 100644 --- a/Tracker/package-lock.json +++ b/Tracker/package-lock.json @@ -8,6 +8,7 @@ "name": "tracker", "version": "1.0.0", "dependencies": { + "@react-native-async-storage/async-storage": "^2.1.2", "@react-navigation/native": "^7.0.15", "@react-navigation/stack": "^7.1.2", "expo": "~52.0.38", @@ -15,7 +16,7 @@ "expo-status-bar": "~2.0.1", "react": "18.3.1", "react-native": "0.76.7", - "react-native-maps": "^1.20.1" + "react-native-maps": "1.18.0" }, "devDependencies": { "@babel/core": "^7.20.0" @@ -3198,6 +3199,17 @@ "node": ">=14" } }, + "node_modules/@react-native-async-storage/async-storage": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.1.2.tgz", + "integrity": "sha512-dvlNq4AlGWC+ehtH12p65+17V0Dx7IecOWl6WanF2ja38O1Dcjjvn7jVzkUHJ5oWkQBlyASurTPlTHgKXyYiow==", + "dependencies": { + "merge-options": "^3.0.4" + }, + "peerDependencies": { + "react-native": "^0.0.0-0 || >=0.65 <1.0" + } + }, "node_modules/@react-native/assets-registry": { "version": "0.76.7", "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.7.tgz", @@ -3779,8 +3791,7 @@ "node_modules/@types/geojson": { "version": "7946.0.16", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", - "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", - "license": "MIT" + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==" }, "node_modules/@types/graceful-fs": { "version": "4.1.9", @@ -5533,7 +5544,6 @@ "version": "52.0.39", "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.39.tgz", "integrity": "sha512-EOnrgj8MHSt0o0SIBhM7jCim2QpJJNonbSATn9LqNtVgKtotIg718G/OrP5/g0GUAOBDyxHH9PfNu/aq9c0vDw==", - "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "0.22.20", @@ -6603,6 +6613,14 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -7489,6 +7507,17 @@ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", "license": "MIT" }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -9140,10 +9169,9 @@ } }, "node_modules/react-native-maps": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-1.20.1.tgz", - "integrity": "sha512-NZI3B5Z6kxAb8gzb2Wxzu/+P2SlFIg1waHGIpQmazDSCRkNoHNY4g96g+xS0QPSaG/9xRBbDNnd2f2/OW6t6LQ==", - "license": "MIT", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-1.18.0.tgz", + "integrity": "sha512-S17nYUqeMptgIPaAZuVRo+eRelPreBBYQWw6jsxU7qQ12p+THSfFaqabcNn7fBmsXhT3T27iIl8ek8v1H8BaGw==", "dependencies": { "@types/geojson": "^7946.0.13" }, diff --git a/Tracker/package.json b/Tracker/package.json index 677c990..608f428 100644 --- a/Tracker/package.json +++ b/Tracker/package.json @@ -9,6 +9,7 @@ "web": "expo start --web" }, "dependencies": { + "@react-native-async-storage/async-storage": "^2.1.2", "@react-navigation/native": "^7.0.15", "@react-navigation/stack": "^7.1.2", "expo": "~52.0.38", @@ -16,7 +17,7 @@ "expo-status-bar": "~2.0.1", "react": "18.3.1", "react-native": "0.76.7", - "react-native-maps": "^1.20.1" + "react-native-maps": "1.18.0" }, "devDependencies": { "@babel/core": "^7.20.0" diff --git a/Tracker/src/system/database/storage.js b/Tracker/src/system/database/storage.js new file mode 100644 index 0000000..ec85899 --- /dev/null +++ b/Tracker/src/system/database/storage.js @@ -0,0 +1,35 @@ +import AsyncStorage from "@react-native-async-storage/async-storage" + +export default class Storage{ + static #instance; + + constructor(){ + if (Storage.#instance){ + throw new Error("Use the The getInstanceMethod instead of new") + } + + } + + static getInstance(){ + if (!Storage.#instance){ + Storage.#instance = new Storage + } + return Storage.#instance + } + + async listData(){ + + const data = await AsyncStorage.multiGet(await this.getKeys()) + return data + } + + async getKeys(){ + const keys = await AsyncStorage.getAllKeys() + return keys; + } + + async saveData(index,content){ + await AsyncStorage.setItem(index.toString(),JSON.stringify(content)) + + } +} \ No newline at end of file