12 Commits

Author SHA1 Message Date
82a24efd91 Test commit
Some checks failed
Build DeguApp backend / build (pull_request) Failing after 2m15s
2024-06-03 13:22:54 +02:00
5f29773b4a Added: gitea action for backend 2024-06-03 13:22:54 +02:00
7eb548e138 Added: gitea action for backend 2024-06-03 13:22:25 +02:00
6c2ebe7d7a Added: dist/ to biome ignore 2024-06-02 23:06:58 +02:00
1dd7952976 Code formatted 2024-06-02 23:06:32 +02:00
922a11b23b Added: package.json format script 2024-06-02 23:05:57 +02:00
5a2a2db5e2 Fixes: error handling on signup page #13 2024-06-02 23:04:42 +02:00
61449caef1 Updated README.md 2024-06-02 22:34:07 +02:00
c9b8246218 Fix: route for frontend 2024-05-16 15:41:24 +02:00
c89dfa6786 Added: script for building website version 2024-05-15 03:04:16 +02:00
8f3e442077 Added: beer image and other info about beer into reviews 2024-05-15 02:52:01 +02:00
0430710522 Fixed: reviews data now contains info about beer 2024-05-15 02:33:38 +02:00
10 changed files with 243 additions and 114 deletions

View 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

View File

@ -35,7 +35,12 @@ To get started with DeguApp, follow these steps:
2. Install dependencies: 2. Install dependencies:
```bash ```bash
cd deguapp # frontend
cd deguapp/frontend
npm install
# backend
cd deguapp/api
npm install 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! 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 ## Local builds
### Android ### Android
@ -74,12 +74,24 @@ bundletool build-apks --bundle=./frontend/android/app/build/outputs/bundle/relea
bundletool install-apks --apks=./deguapp.apks bundletool install-apks --apks=./deguapp.apks
``` ```
#### Resources:
### Resources:
- https://github.com/expo/eas-cli/issues/1300 - https://github.com/expo/eas-cli/issues/1300
- https://reactnative.dev/docs/signed-apk-android#generating-the-release-aab - 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 ## License
This project is licensed under the GNU GPLv3 License - see the [LICENSE](LICENSE) file for details. This project is licensed under the GNU GPLv3 License - see the [LICENSE](LICENSE) file for details.

View File

@ -0,0 +1,23 @@
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, build and test
run: |
npm install
npm run build --if-present
npm run test

View File

@ -41,3 +41,5 @@ app.use(cookieParser());
// Routes // Routes
app.use(routes); app.use(routes);
//test

View File

@ -5,9 +5,9 @@ export const router = Router();
router.use("/api/v1", api_v1); router.use("/api/v1", api_v1);
//router.get("*", (req: Request, res: Response) => { router.get("*", (req: Request, res: Response) => {
// res.sendFile(path.join(__dirname, "../views/index.html")); res.sendFile(path.join(__dirname, "../public/index.html"));
//}); });
// 404 // 404
router.use((req: Request, res: Response) => { router.use((req: Request, res: Response) => {

View File

@ -12,9 +12,7 @@
"resizeMode": "contain", "resizeMode": "contain",
"backgroundColor": "#ffffff" "backgroundColor": "#ffffff"
}, },
"assetBundlePatterns": [ "assetBundlePatterns": ["**/*"],
"**/*"
],
"ios": { "ios": {
"supportsTablet": true "supportsTablet": true
}, },

View File

@ -1,4 +1,4 @@
import { View, StyleSheet, FlatList } from "react-native"; import { View, StyleSheet, FlatList, Image } from "react-native";
import Text from "@components/Text"; import Text from "@components/Text";
import Button from "@components/Button"; import Button from "@components/Button";
import { colors } from "@components/style"; import { colors } from "@components/style";
@ -14,6 +14,8 @@ export default function Tab() {
fetchData(); fetchData();
}, []); }, []);
const API_HOST = process.env.EXPO_PUBLIC_API_URL.replace("/api/v1", "");
async function fetchData() { async function fetchData() {
try { try {
const res = await fetch(`${process.env.EXPO_PUBLIC_API_URL}/review/get`, { const res = await fetch(`${process.env.EXPO_PUBLIC_API_URL}/review/get`, {
@ -23,6 +25,28 @@ export default function Tab() {
let data = await res.json(); let data = await res.json();
// show only logged in user's data // show only logged in user's data
data = data.data.filter((review) => review.user_id == user._id); data = data.data.filter((review) => review.user_id == user._id);
let beers = await fetch(`${process.env.EXPO_PUBLIC_API_URL}/beer/get`, {
method: "GET",
credentials: "include",
});
beers = await beers.json();
beers = beers.data;
console.log(beers);
async function getBeerParam(search, beers) {
for (let i = 0; i < beers.length; i++) {
if (beers[i]._id == search) {
return beers[i];
}
}
return null;
}
data.forEach(async (el) => {
el.beer = await getBeerParam(el.beer_id, beers);
});
console.log("reviews", data); console.log("reviews", data);
setData(data); setData(data);
} catch (err) { } catch (err) {
@ -48,14 +72,36 @@ export default function Tab() {
style={styles.reviewList} style={styles.reviewList}
keyExtractor={(item) => String(item._id)} keyExtractor={(item) => String(item._id)}
renderItem={({ item }) => ( renderItem={({ item }) => (
<View style={styles.item}> <View style={styles.itemContainer}>
<View>
<Text>{item.beer.name}</Text>
<Text>{item.beer.brand}</Text>
<Text>{item.beer.degree}°</Text>
<Text>{item.beer.packaging}</Text>
<Image
source={
item.beer.imgs[0]
? {
uri: `${API_HOST}/public/uploads/${item.beer.imgs[0]}`,
}
: {
uri: "https://imagesvc.meredithcorp.io/v3/mm/image?url=https:%2F%2Fstatic.onecms.io%2Fwp-content%2Fuploads%2Fsites%2F44%2F2020%2F09%2F29%2Flight-beer.jpg",
}
}
style={styles.itemImg}
/>
</View>
<View>
<Text>Foam {opt3[item.foam - 1]}</Text> <Text>Foam {opt3[item.foam - 1]}</Text>
<Text>Bitter / Sweetness {opt3[item.bitter_sweetness - 1]}</Text> <Text>
Bitter / Sweetness {opt3[item.bitter_sweetness - 1]}
</Text>
<Text>Taste {opt5[item.taste - 1]}</Text> <Text>Taste {opt5[item.taste - 1]}</Text>
<Text>Packaging {opt5[item.packaging - 1]}</Text> <Text>Packaging {opt5[item.packaging - 1]}</Text>
<Text>Sourness {sourness[item.sourness - 1]}</Text> <Text>Sourness {sourness[item.sourness - 1]}</Text>
<Text>Would again? {opt2[item.would_again - 1]}</Text> <Text>Would again? {opt2[item.would_again - 1]}</Text>
</View> </View>
</View>
)} )}
/> />
</View> </View>
@ -74,11 +120,20 @@ export const styles = StyleSheet.create({
paddingHorizontal: "15%", paddingHorizontal: "15%",
marginTop: "5%", marginTop: "5%",
}, },
item: { itemContainer: {
borderColor: "gray", borderColor: "gray",
borderWidth: 1, borderWidth: 1,
borderRadius: 10, borderRadius: 10,
padding: 13, padding: 13,
marginBottom: "5%", marginBottom: "5%",
flex: 1,
flexDirection: "row",
justifyContent: "space-between",
},
itemImg: {
width: 150,
aspectRatio: 1,
resizeMode: "contain",
marginTop: "5%",
}, },
}); });

View File

@ -16,23 +16,28 @@ function SignupPage() {
const { onSignin } = useAuth(); const { onSignin } = useAuth();
async function signin() { async function signin() {
if (pass1 == pass2) { if (pass1 != pass2) {
alert("Passwords are not same!");
return;
}
const res = await onSignin(username, email, pass1); const res = await onSignin(username, email, pass1);
if (res.error) { const data = await res.json();
if (res.msg.message == "validation error") {
alert(res.msg.data.message); if (res.status == 400) {
if (data.message == "validation error") {
alert(data.data.message);
} else { } else {
alert(res.msg.message); alert("Something went wrong");
}
}
if (!res.error) {
alert("You have been successfully registered. Please Log In");
router.replace("/login");
} }
return; return;
} }
alert("Passwords are not same!"); if (res.status == 201) {
alert("You have been successfully registered. Please Log In");
router.replace("/login");
return;
}
} }
return ( return (

View File

@ -1,7 +1,7 @@
{ {
"$schema": "https://biomejs.dev/schemas/1.7.3/schema.json", "$schema": "https://biomejs.dev/schemas/1.7.3/schema.json",
"files": { "files": {
"ignore": [".expo/", ".vscode/", "node_modules/"] "ignore": [".expo/", ".vscode/", "node_modules/", "dist/"]
}, },
"organizeImports": { "organizeImports": {
"enabled": true "enabled": true

View File

@ -6,7 +6,9 @@
"start": "expo start", "start": "expo start",
"android": "expo start --android", "android": "expo start --android",
"ios": "expo start --ios", "ios": "expo start --ios",
"web": "expo start --web" "web": "expo start --web",
"build:web": "npx expo export",
"format": "npx @biomejs/biome format --write ."
}, },
"dependencies": { "dependencies": {
"@expo/metro-runtime": "~3.2.1", "@expo/metro-runtime": "~3.2.1",