commit cc19df62c42a2e2a1bd4aa7ef3a9a2352f089c5e Author: moxitech Date: Sun Sep 1 02:36:40 2024 +0700 First diff --git a/.env b/.env new file mode 100644 index 0000000..51be5e5 --- /dev/null +++ b/.env @@ -0,0 +1,13 @@ +API_PORT=8099 +API_HOST=zametki-server + +MONGO_INITDB_ROOT_USERNAME=moxitech +MONGO_INITDB_ROOT_PASSWORD=moxitech +MONGO_INITDB_DATABASE=notes +MONGO_INITDB_PORT=27017 +MONGO_INITDB_HOST=mongo + +MONGO_COLLECTION_USERS=Users +MONGO_COLLECTION_GROUPS=Groups + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d157b32 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +frontend/node_modules/ +frontend/.expo/ +frontend/dist/ +frontend/npm-debug.* +frontend/*.jks +frontend/*.p8 +frontend/*.p12 +frontend/*.key +frontend/*.mobileprovision +frontend/*.orig.* +frontend/web-build/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4e6d2d1 --- /dev/null +++ b/Makefile @@ -0,0 +1,30 @@ +#DEV + + + +build: + docker compose build + +dev: build + docker compose up -d --force-recreate + +devf: dev + docker compose logs -f + +up: + docker compose up -d --force-recreate + +upf: up + docker compose logs -f + +logs: + docker compose logs -f + + +stop: + docker compose stop +start: + docker compose start + +drop: + docker-compose down --volumes \ No newline at end of file diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..81b6aeb --- /dev/null +++ b/Readme.md @@ -0,0 +1,3 @@ +#### Заметки + +Простая программа для сетевого обмена заметками/задачами \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..82c3f3b --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,55 @@ + + +services: + + api: + container_name: mnote-api-application + build: + context: ./server + dockerfile: Dockerfile + env_file: ".env" + ports: + - "8099:8099" + depends_on: + - mongo + networks: + - notes_network + restart: always + + nginx: + image: nginx:alpine + container_name: mnotes-nginx-service + ports: + - "80:80" + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf + networks: + - notes_network + depends_on: + - api + + mongo: + image: mongo + container_name: mnotes-db + environment: + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + ports: + - '27017:27017' + networks: + - notes_network + volumes: + - mongodata:/data/db + restart: always + + + +networks: + notes_network: + driver: bridge + + +volumes: + mongodata: + driver: local diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..cd4feb8 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,50 @@ +# Welcome to your Expo app 👋 + +This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app). + +## Get started + +1. Install dependencies + + ```bash + npm install + ``` + +2. Start the app + + ```bash + npx expo start + ``` + +In the output, you'll find options to open the app in a + +- [development build](https://docs.expo.dev/develop/development-builds/introduction/) +- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/) +- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/) +- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo + +You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction). + +## Get a fresh project + +When you're ready, run: + +```bash +npm run reset-project +``` + +This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing. + +## Learn more + +To learn more about developing your project with Expo, look at the following resources: + +- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides). +- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web. + +## Join the community + +Join our community of developers creating universal apps. + +- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. +- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. diff --git a/frontend/app.json b/frontend/app.json new file mode 100644 index 0000000..d30aa03 --- /dev/null +++ b/frontend/app.json @@ -0,0 +1,36 @@ +{ + "expo": { + "name": "frontend", + "slug": "frontend", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/images/icon.png", + "scheme": "myapp", + "userInterfaceStyle": "automatic", + "splash": { + "image": "./assets/images/splash.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/images/adaptive-icon.png", + "backgroundColor": "#ffffff" + } + }, + "web": { + "bundler": "metro", + "output": "static", + "favicon": "./assets/images/favicon.png" + }, + "plugins": [ + "expo-router" + ], + "experiments": { + "typedRoutes": true + } + } +} diff --git a/frontend/app/(auth)/_layout.tsx b/frontend/app/(auth)/_layout.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/(auth)/authorization.tsx b/frontend/app/(auth)/authorization.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/app/(tabs)/_layout.tsx b/frontend/app/(tabs)/_layout.tsx new file mode 100644 index 0000000..79cd584 --- /dev/null +++ b/frontend/app/(tabs)/_layout.tsx @@ -0,0 +1,37 @@ +import { Tabs } from 'expo-router'; +import React from 'react'; + +import { TabBarIcon } from '@/components/navigation/TabBarIcon'; +import { Colors } from '@/constants/Colors'; +import { useColorScheme } from '@/hooks/useColorScheme'; + +export default function TabLayout() { + const colorScheme = useColorScheme(); + + return ( + + ( + + ), + }} + /> + ( + + ), + }} + /> + + ); +} diff --git a/frontend/app/(tabs)/explore.tsx b/frontend/app/(tabs)/explore.tsx new file mode 100644 index 0000000..64425e8 --- /dev/null +++ b/frontend/app/(tabs)/explore.tsx @@ -0,0 +1,102 @@ +import Ionicons from '@expo/vector-icons/Ionicons'; +import { StyleSheet, Image, Platform } from 'react-native'; + +import { Collapsible } from '@/components/Collapsible'; +import { ExternalLink } from '@/components/ExternalLink'; +import ParallaxScrollView from '@/components/ParallaxScrollView'; +import { ThemedText } from '@/components/ThemedText'; +import { ThemedView } from '@/components/ThemedView'; + +export default function TabTwoScreen() { + return ( + }> + + Settings + + This code can be help you. + + + This app has two screens:{' '} + app/(tabs)/index.tsx and{' '} + app/(tabs)/explore.tsx + + + The layout file in app/(tabs)/_layout.tsx{' '} + sets up the tab navigator. + + + Learn more + + + + + You can open this project on Android, iOS, and the web. To open the web version, press{' '} + w in the terminal running this project. + + + + + For static images, you can use the @2x and{' '} + @3x suffixes to provide files for + different screen densities + + + + Learn more + + + + + Open app/_layout.tsx to see how to load{' '} + + custom fonts such as this one. + + + + Learn more + + + + + This template has light and dark mode support. The{' '} + useColorScheme() hook lets you inspect + what the user's current color scheme is, and so you can adjust UI colors accordingly. + + + Learn more + + + + + This template includes an example of an animated component. The{' '} + components/HelloWave.tsx component uses + the powerful react-native-reanimated library + to create a waving hand animation. + + {Platform.select({ + ios: ( + + The components/ParallaxScrollView.tsx{' '} + component provides a parallax effect for the header image. + + ), + })} + + + ); +} + +const styles = StyleSheet.create({ + headerImage: { + color: '#808080', + bottom: -90, + left: -35, + position: 'absolute', + }, + titleContainer: { + flexDirection: 'row', + gap: 8, + }, +}); diff --git a/frontend/app/(tabs)/group.tsx b/frontend/app/(tabs)/group.tsx new file mode 100644 index 0000000..3773e80 --- /dev/null +++ b/frontend/app/(tabs)/group.tsx @@ -0,0 +1,107 @@ +import { Image, StyleSheet, Platform, Button, ActivityIndicator } from 'react-native'; + +import ParallaxScrollView from '@/components/ParallaxScrollView'; +import { ThemedText } from '@/components/ThemedText'; +import { ThemedView } from '@/components/ThemedView'; +import { useEffect, useState } from 'react'; + +interface Message { + title: string; + type: string; + additionally: { + payload: string; + }; +} + +interface Data { + users: string[]; + messages: Message[]; +} + +export default function GroupScreen() { + const [groupData, setGroupData] = useState(null); + + useEffect(() => { + fetch("http://127.0.0.1:8099/grouphash:1/reloadDataFromServer") + .then(v => v.json()) + .then((data: Data) => { + setGroupData(data); + }) + .catch(e => { + console.log(e); + }); + }, []); + + return ( + + }> + + + Пользователи + {groupData?.users.map((user, index) => ( + {user} + ))} + + + + { groupData === null ? + : + groupData?.messages.map((message, index) => ( + + {message.title} + { message.type === "text" ? + {message.additionally.payload} : + !!! Please Update Program !!! + } + + + )) + } + + +