diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/README.md b/README.md index 1b148f7..67a106c 100644 --- a/README.md +++ b/README.md @@ -19,5 +19,5 @@ pip3 install -r requirements.txt 3. Installing MongoDB database. You can use the [official manual](https://www.mongodb.com/docs/manual/installation/) to install MongoDB manually, or use a [Docker image](https://hub.docker.com/r/mongodb/mongodb-community-server) to run the container: ```bash -docker run --name mongodb -d -p 27017:27017 mongodb/mongodb-community-server +docker run --name mongodb -d -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=user -e MONGO_INITDB_ROOT_PASSWORD=pass mongodb/mongodb-community-server ``` diff --git a/app/.env b/app/.env new file mode 100644 index 0000000..3944b68 --- /dev/null +++ b/app/.env @@ -0,0 +1,5 @@ +MONGO_HOST = 127.0.0.1 +MONGO_PORT = 27017 + +MONGO_USER = user +MONGO_PASS = pass \ No newline at end of file diff --git a/app/mongo_worker.py b/app/mongo_worker.py index e165b4b..e0f0fe6 100644 --- a/app/mongo_worker.py +++ b/app/mongo_worker.py @@ -1,13 +1,20 @@ +import os + import pymongo -from datetime import datetime +from schemas import * -from bson import ObjectId +from datetime import datetime +from dotenv import load_dotenv class MongoWorker: def __init__(self): - self.client = pymongo.MongoClient(host="127.0.0.1", port=27017) + load_dotenv() + self.client = pymongo.MongoClient(host = os.getenv('MONGO_HOST'), + port = int(os.getenv('MONGO_PORT')), + username = os.getenv('MONGO_USER'), + password = os.getenv('MONGO_PASS')) self.db = self.client["data"] self.users_data = self.db["users_data"] self.game_data = self.db["game_data"] @@ -16,30 +23,33 @@ class MongoWorker: print(self.client.list_database_names()) print(self.db.list_collection_names()) - def find_user(self, user_id: int) -> dict: - result = self.users_data.find_one({"user_id": user_id}) - return result + def check_user(self, user_id: int) -> True | False: + if self.users_data.find_one({"user_id": user_id}): + return True + else: + return False - def add_user(self, user_id: int, username: str, first_name: str, last_name: str, photo_path: str) -> ObjectId: + def add_user(self, user_id: int, username: str, first_name: str, last_name: str, photo_path: str) -> User: + new_user = User(user_id=user_id, + username=username, + first_name=first_name, + last_name=last_name, + photo_path=photo_path, + registration_date=datetime.now().isoformat()) try: - res = self.users_data.insert_one({"user_id": user_id, - "username": username, - "first_name": first_name, - "last_name": last_name, - "photo_path": photo_path, - "activity": 0, - "liked_post_ids": [], - "disliked_post_ids": [], - "comments_ids": [], - "registration_date": datetime.now().isoformat() - }) - return res.inserted_id + res = self.users_data.insert_one(new_user.model_dump()) + return new_user except Exception as exception: print(exception) + return new_user + + def get_user(self, user_id: int) -> User: + return User.model_validate(self.users_data.find_one({"user_id": user_id})) if __name__ == "__main__": mongo = MongoWorker() mongo.get_mongodb_info() - print(mongo.add_user(123, "VolochayIgor", "Igor", "Volochay", "path/to/img")) - print(mongo.find_user(123)) + print(mongo.check_user(123)) + # print(mongo.add_user(123, "VolochayIgor", "Igor", "Volochay", os.path.join("/path/to", "photo.jpg"))) + print(mongo.get_user(123)) diff --git a/app/schemas.py b/app/schemas.py new file mode 100644 index 0000000..91cec5f --- /dev/null +++ b/app/schemas.py @@ -0,0 +1,17 @@ +from pydantic import BaseModel + + +class User(BaseModel): + user_id: int + username: str + + first_name: str + last_name: str + photo_path: str + + activity: int = 0 + liked_post_ids: list[int] = None + disliked_post_ids: list[int] = None + comments_ids: list[int] = None + + registration_date: str diff --git a/requirements.txt b/requirements.txt index 8f61843..73be66f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ fastapi==0.115.7 pymongo==4.10.1 +python-dotenv==1.0.1 \ No newline at end of file