Compare commits
	
		
			11 Commits
		
	
	
		
			kevin/revi
			...
			main
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 19a3d168a1 | |||
| 81ce9eb546 | |||
| d40af87c46 | |||
| 7eb548e138 | |||
| 6c2ebe7d7a | |||
| 1dd7952976 | |||
| 922a11b23b | |||
| 5a2a2db5e2 | |||
| 61449caef1 | |||
| c9b8246218 | |||
| c89dfa6786 | 
							
								
								
									
										32
									
								
								.gitea/workflows/build.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.gitea/workflows/build.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| name: Build DeguApp backend | ||||
|  | ||||
| on: pull_request | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout Repository | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Set up Node.js and TypeScript | ||||
|         uses: actions/setup-node@v1 | ||||
|         with: | ||||
|           node-version: "20.14.0" | ||||
|  | ||||
|       - name: npm install | ||||
|         working-directory: api/ | ||||
|         run: | | ||||
|           npm install | ||||
|  | ||||
|       - name: npm run build | ||||
|         working-directory: api/ | ||||
|         run: | | ||||
|           npm run build --if-present | ||||
|  | ||||
|       - name: npm run test | ||||
|         working-directory: api/ | ||||
|         run: | | ||||
|           npm run test | ||||
|  | ||||
							
								
								
									
										28
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								README.md
									
									
									
									
									
								
							| @@ -35,7 +35,12 @@ To get started with DeguApp, follow these steps: | ||||
| 2. Install dependencies: | ||||
|  | ||||
|    ```bash | ||||
|    cd deguapp | ||||
|    # frontend | ||||
|    cd deguapp/frontend | ||||
|    npm install | ||||
|  | ||||
|    # backend | ||||
|    cd deguapp/api | ||||
|    npm install | ||||
|    ``` | ||||
|  | ||||
| @@ -43,11 +48,6 @@ To get started with DeguApp, follow these steps: | ||||
|  | ||||
| 5. Open the app in your browser or Android emulator and start exploring! | ||||
|  | ||||
| ## Contributing | ||||
|  | ||||
| Contributions are welcome! If you'd like to contribute to DeguApp, please fork the repository and submit a pull request with your changes. | ||||
| Use the upstream of the project, which can be found at https:/git.filiprojek.cz/fr/deguapp. **GitHub repository is just a mirror!** | ||||
|  | ||||
| ## Local builds | ||||
| ### Android | ||||
|  | ||||
| @@ -74,12 +74,24 @@ bundletool build-apks --bundle=./frontend/android/app/build/outputs/bundle/relea | ||||
| bundletool install-apks --apks=./deguapp.apks | ||||
| ``` | ||||
|  | ||||
|  | ||||
| ### Resources: | ||||
| #### Resources: | ||||
|  | ||||
| - https://github.com/expo/eas-cli/issues/1300 | ||||
| - https://reactnative.dev/docs/signed-apk-android#generating-the-release-aab | ||||
|  | ||||
| ### Server | ||||
|  | ||||
| ```bash | ||||
| cd api/ | ||||
| npm i | ||||
| npm run build | ||||
| ``` | ||||
|  | ||||
| ## Contributing | ||||
|  | ||||
| Contributions are welcome! If you'd like to contribute to DeguApp, please fork the repository and submit a pull request with your changes. | ||||
| Use the upstream of the project, which can be found at https:/git.filiprojek.cz/fr/deguapp. **GitHub repository is just a mirror!** | ||||
|  | ||||
| ## License | ||||
|  | ||||
| This project is licensed under the GNU GPLv3 License - see the [LICENSE](LICENSE) file for details. | ||||
|   | ||||
| @@ -5,9 +5,9 @@ export const router = Router(); | ||||
|  | ||||
| router.use("/api/v1", api_v1); | ||||
|  | ||||
| //router.get("*", (req: Request, res: Response) => { | ||||
| //  res.sendFile(path.join(__dirname, "../views/index.html")); | ||||
| //}); | ||||
| router.get("*", (req: Request, res: Response) => { | ||||
|   res.sendFile(path.join(__dirname, "../public/index.html")); | ||||
| }); | ||||
|  | ||||
| // 404 | ||||
| router.use((req: Request, res: Response) => { | ||||
|   | ||||
| @@ -1,43 +1,41 @@ | ||||
| { | ||||
|   "expo": { | ||||
|     "name": "deguapp", | ||||
|     "slug": "deguapp", | ||||
|     "scheme": "deguapp", | ||||
|     "version": "1.0.0", | ||||
|     "orientation": "portrait", | ||||
|     "icon": "./assets/icon.png", | ||||
|     "userInterfaceStyle": "light", | ||||
|     "splash": { | ||||
|       "image": "./assets/splash.png", | ||||
|       "resizeMode": "contain", | ||||
|       "backgroundColor": "#ffffff" | ||||
|     }, | ||||
|     "assetBundlePatterns": [ | ||||
|       "**/*" | ||||
|     ], | ||||
|     "ios": { | ||||
|       "supportsTablet": true | ||||
|     }, | ||||
|     "android": { | ||||
|       "adaptiveIcon": { | ||||
|         "foregroundImage": "./assets/adaptive-icon.png", | ||||
|         "backgroundColor": "#ffffff" | ||||
|       } | ||||
|     }, | ||||
|     "web": { | ||||
|       "favicon": "./assets/favicon.png" | ||||
|     }, | ||||
|     "plugins": [ | ||||
|       "expo-router", | ||||
|       [ | ||||
|         "expo-image-picker", | ||||
|         { | ||||
|           "photosPermission": "The app accesses your photos to let you share them with your friends.", | ||||
|           "cameraPermission": "The app accesses your camera to let you take photos of your beer and share them with your friends.", | ||||
|           "microphonePermission": "The app accesses your microphone to let you record audio and share it with your friends." | ||||
|         } | ||||
|       ], | ||||
|       "expo-secure-store" | ||||
|     ] | ||||
|   } | ||||
| 	"expo": { | ||||
| 		"name": "deguapp", | ||||
| 		"slug": "deguapp", | ||||
| 		"scheme": "deguapp", | ||||
| 		"version": "1.0.0", | ||||
| 		"orientation": "portrait", | ||||
| 		"icon": "./assets/icon.png", | ||||
| 		"userInterfaceStyle": "light", | ||||
| 		"splash": { | ||||
| 			"image": "./assets/splash.png", | ||||
| 			"resizeMode": "contain", | ||||
| 			"backgroundColor": "#ffffff" | ||||
| 		}, | ||||
| 		"assetBundlePatterns": ["**/*"], | ||||
| 		"ios": { | ||||
| 			"supportsTablet": true | ||||
| 		}, | ||||
| 		"android": { | ||||
| 			"adaptiveIcon": { | ||||
| 				"foregroundImage": "./assets/adaptive-icon.png", | ||||
| 				"backgroundColor": "#ffffff" | ||||
| 			} | ||||
| 		}, | ||||
| 		"web": { | ||||
| 			"favicon": "./assets/favicon.png" | ||||
| 		}, | ||||
| 		"plugins": [ | ||||
| 			"expo-router", | ||||
| 			[ | ||||
| 				"expo-image-picker", | ||||
| 				{ | ||||
| 					"photosPermission": "The app accesses your photos to let you share them with your friends.", | ||||
| 					"cameraPermission": "The app accesses your camera to let you take photos of your beer and share them with your friends.", | ||||
| 					"microphonePermission": "The app accesses your microphone to let you record audio and share it with your friends." | ||||
| 				} | ||||
| 			], | ||||
| 			"expo-secure-store" | ||||
| 		] | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -18,7 +18,7 @@ export default function BeerAdd() { | ||||
| 	const [open, setOpen] = useState(false); | ||||
| 	const [items, setItems] = useState([ | ||||
| 		{ label: "Tank beer", value: "tank" }, | ||||
| 		{ label: "Cask beer", value: "cask" }, | ||||
| 		{ label: "Keg beer", value: "keg" }, | ||||
| 		{ label: "Glass bottle", value: "glass" }, | ||||
| 		{ label: "Can", value: "can" }, | ||||
| 		{ label: "PET bottle", value: "pet" }, | ||||
|   | ||||
| @@ -19,7 +19,7 @@ export default function reviewAdd() { | ||||
| 	const [openSourness, setOpenSourness] = useState(false); | ||||
| 	const [openAgain, setOpenAgain] = useState(false); | ||||
|  | ||||
| 	// pěna | ||||
| 	// foam | ||||
| 	const [itemFoam, setFoamValue] = useState(null); | ||||
| 	const [foam, setFoam] = useState([ | ||||
| 		{ | ||||
| @@ -54,11 +54,11 @@ export default function reviewAdd() { | ||||
| 		}, | ||||
| 	]); | ||||
|  | ||||
| 	// hořkost / sladkost | ||||
| 	// bitter / sweetness | ||||
| 	const [itemBitter_sweetness, setBitter_sweetnessValue] = useState(null); | ||||
| 	const [bitter_sweetness, setBitter_sweetness] = useState([ | ||||
| 		{ | ||||
| 			label: "Bad", | ||||
| 			label: "Bitter", | ||||
| 			value: "1", | ||||
| 			icon: () => ( | ||||
| 				<Image | ||||
| @@ -78,7 +78,7 @@ export default function reviewAdd() { | ||||
| 			), | ||||
| 		}, | ||||
| 		{ | ||||
| 			label: "Excellent", | ||||
| 			label: "Sweet", | ||||
| 			value: "3", | ||||
| 			icon: () => ( | ||||
| 				<Image | ||||
| @@ -89,7 +89,7 @@ export default function reviewAdd() { | ||||
| 		}, | ||||
| 	]); | ||||
|  | ||||
| 	//chuť | ||||
| 	// taste | ||||
| 	const [itemTaste, setTasteValue] = useState(null); | ||||
| 	const [taste, setTaste] = useState([ | ||||
| 		{ | ||||
| @@ -199,7 +199,7 @@ export default function reviewAdd() { | ||||
| 		}, | ||||
| 	]); | ||||
|  | ||||
| 	//kyselost | ||||
| 	// sourness | ||||
| 	const [itemSourness, setSournessValue] = useState(null); | ||||
| 	const [sourness, setSourness] = useState([ | ||||
| 		{ | ||||
| @@ -224,7 +224,7 @@ export default function reviewAdd() { | ||||
| 		}, | ||||
| 	]); | ||||
|  | ||||
| 	//dal bych si znovu? | ||||
| 	// would again | ||||
| 	const [itemAgain, setAgainValue] = useState(null); | ||||
| 	const [again, setAgain] = useState([ | ||||
| 		{ | ||||
|   | ||||
| @@ -90,7 +90,7 @@ export function AuthProvider({ children }) { | ||||
| 			}); | ||||
|  | ||||
| 			if (resUser.status != 200) { | ||||
| 				throw Error("user does not have user data"); | ||||
| 				throw Error("Username or password is incorrect!"); | ||||
| 			} | ||||
|  | ||||
| 			const userData = await resUser.json(); | ||||
| @@ -104,7 +104,7 @@ export function AuthProvider({ children }) { | ||||
| 			await storageUtil.setItem(TOKEN_KEY, loginData.data.jwt); | ||||
| 		} catch (err) { | ||||
| 			console.error("Failed to log in", err); | ||||
| 			return { error: true, msg: err.res }; | ||||
| 			return { error: true, msg: err }; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -20,8 +20,12 @@ function LoginPage() { | ||||
| 		} | ||||
| 	}, [authState.authenticated]); | ||||
|  | ||||
| 	function login() { | ||||
| 		onLogin(email, pass); | ||||
| 	async function login() { | ||||
| 		const res = await onLogin(email, pass); | ||||
| 		if (res !== undefined && res.error === true) { | ||||
| 			alert(res.msg); | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return ( | ||||
|   | ||||
| @@ -16,23 +16,28 @@ function SignupPage() { | ||||
| 	const { onSignin } = useAuth(); | ||||
|  | ||||
| 	async function signin() { | ||||
| 		if (pass1 == pass2) { | ||||
| 			const res = await onSignin(username, email, pass1); | ||||
| 			if (res.error) { | ||||
| 				if (res.msg.message == "validation error") { | ||||
| 					alert(res.msg.data.message); | ||||
| 				} else { | ||||
| 					alert(res.msg.message); | ||||
| 				} | ||||
| 			} | ||||
| 			if (!res.error) { | ||||
| 				alert("You have been successfully registered. Please Log In"); | ||||
| 				router.replace("/login"); | ||||
| 		if (pass1 != pass2) { | ||||
| 			alert("Passwords are not same!"); | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		const res = await onSignin(username, email, pass1); | ||||
| 		const data = await res.json(); | ||||
|  | ||||
| 		if (res.status == 400) { | ||||
| 			if (data.message == "validation error") { | ||||
| 				alert(data.data.message); | ||||
| 			} else { | ||||
| 				alert("Something went wrong"); | ||||
| 			} | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		alert("Passwords are not same!"); | ||||
| 		if (res.status == 201) { | ||||
| 			alert("You have been successfully registered. Please Log In"); | ||||
| 			router.replace("/login"); | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return ( | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| { | ||||
| 	"$schema": "https://biomejs.dev/schemas/1.7.3/schema.json", | ||||
| 	"files": { | ||||
| 		"ignore": [".expo/", ".vscode/", "node_modules/"] | ||||
| 		"ignore": [".expo/", ".vscode/", "node_modules/", "dist/"] | ||||
| 	}, | ||||
| 	"organizeImports": { | ||||
| 		"enabled": true | ||||
|   | ||||
| @@ -1,41 +1,43 @@ | ||||
| { | ||||
|   "name": "deguapp", | ||||
|   "version": "1.0.0", | ||||
|   "main": "expo-router/entry", | ||||
|   "scripts": { | ||||
|     "start": "expo start", | ||||
|     "android": "expo start --android", | ||||
|     "ios": "expo start --ios", | ||||
|     "web": "expo start --web" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@expo/metro-runtime": "~3.2.1", | ||||
|     "@react-native-async-storage/async-storage": "^1.23.1", | ||||
|     "@types/react": "~18.2.45", | ||||
|     "axios": "^1.6.8", | ||||
|     "expo": "^51.0.2", | ||||
|     "expo-constants": "~16.0.1", | ||||
|     "expo-image-picker": "~15.0.4", | ||||
|     "expo-linear-gradient": "~13.0.2", | ||||
|     "expo-linking": "~6.3.1", | ||||
|     "expo-router": "~3.5.11", | ||||
|     "expo-secure-store": "~13.0.1", | ||||
|     "expo-status-bar": "~1.12.1", | ||||
|     "expo-system-ui": "~3.0.4", | ||||
|     "react": "18.2.0", | ||||
|     "react-dom": "18.2.0", | ||||
|     "react-native": "0.74.1", | ||||
|     "react-native-dropdown-picker": "^5.4.6", | ||||
|     "react-native-range-slider-expo": "^1.4.3", | ||||
|     "react-native-safe-area-context": "4.10.1", | ||||
|     "react-native-screens": "3.31.1", | ||||
|     "react-native-web": "~0.19.6", | ||||
|     "@shopify/flash-list": "1.6.4" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@babel/core": "^7.20.0", | ||||
|     "@biomejs/biome": "1.7.3", | ||||
|     "babel-plugin-module-resolver": "^5.0.2" | ||||
|   }, | ||||
|   "private": true | ||||
| 	"name": "deguapp", | ||||
| 	"version": "1.0.0", | ||||
| 	"main": "expo-router/entry", | ||||
| 	"scripts": { | ||||
| 		"start": "expo start", | ||||
| 		"android": "expo start --android", | ||||
| 		"ios": "expo start --ios", | ||||
| 		"web": "expo start --web", | ||||
| 		"build:web": "npx expo export", | ||||
| 		"format": "npx @biomejs/biome format --write ." | ||||
| 	}, | ||||
| 	"dependencies": { | ||||
| 		"@expo/metro-runtime": "~3.2.1", | ||||
| 		"@react-native-async-storage/async-storage": "^1.23.1", | ||||
| 		"@types/react": "~18.2.45", | ||||
| 		"axios": "^1.6.8", | ||||
| 		"expo": "^51.0.2", | ||||
| 		"expo-constants": "~16.0.1", | ||||
| 		"expo-image-picker": "~15.0.4", | ||||
| 		"expo-linear-gradient": "~13.0.2", | ||||
| 		"expo-linking": "~6.3.1", | ||||
| 		"expo-router": "~3.5.11", | ||||
| 		"expo-secure-store": "~13.0.1", | ||||
| 		"expo-status-bar": "~1.12.1", | ||||
| 		"expo-system-ui": "~3.0.4", | ||||
| 		"react": "18.2.0", | ||||
| 		"react-dom": "18.2.0", | ||||
| 		"react-native": "0.74.1", | ||||
| 		"react-native-dropdown-picker": "^5.4.6", | ||||
| 		"react-native-range-slider-expo": "^1.4.3", | ||||
| 		"react-native-safe-area-context": "4.10.1", | ||||
| 		"react-native-screens": "3.31.1", | ||||
| 		"react-native-web": "~0.19.6", | ||||
| 		"@shopify/flash-list": "1.6.4" | ||||
| 	}, | ||||
| 	"devDependencies": { | ||||
| 		"@babel/core": "^7.20.0", | ||||
| 		"@biomejs/biome": "1.7.3", | ||||
| 		"babel-plugin-module-resolver": "^5.0.2" | ||||
| 	}, | ||||
| 	"private": true | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user