Implemented database connection
This commit is contained in:
parent
0f605c4f42
commit
35661ebbf3
@ -1,9 +1,23 @@
|
|||||||
|
annotated-types==0.7.0
|
||||||
blinker==1.8.2
|
blinker==1.8.2
|
||||||
|
bson==0.5.10
|
||||||
click==8.1.8
|
click==8.1.8
|
||||||
flask==3.0.3
|
colorama==0.4.6
|
||||||
importlib-metadata==8.5.0
|
dnspython==2.7.0
|
||||||
|
email_validator==2.2.0
|
||||||
|
Flask==3.0.3
|
||||||
|
Flask-JWT-Extended==4.7.1
|
||||||
|
idna==3.10
|
||||||
|
importlib_metadata==8.5.0
|
||||||
itsdangerous==2.2.0
|
itsdangerous==2.2.0
|
||||||
jinja2==3.1.5
|
Jinja2==3.1.5
|
||||||
MarkupSafe==2.1.5
|
MarkupSafe==2.1.5
|
||||||
werkzeug==3.0.6
|
pydantic==2.10.6
|
||||||
zipp==3.20.2
|
pydantic_core==2.27.2
|
||||||
|
PyJWT==2.10.1
|
||||||
|
pymongo==4.11.1
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
six==1.17.0
|
||||||
|
typing_extensions==4.12.2
|
||||||
|
Werkzeug==3.0.6
|
||||||
|
zipp==3.20.2
|
14
src/app.py
14
src/app.py
@ -1,13 +1,27 @@
|
|||||||
from flask import Flask
|
from flask import Flask
|
||||||
from pymongo import MongoClient
|
from pymongo import MongoClient
|
||||||
from flask_jwt_extended import JWTManager
|
from flask_jwt_extended import JWTManager
|
||||||
|
|
||||||
|
from config import Config
|
||||||
from singletons.database_singleton import DatabaseSingleton
|
from singletons.database_singleton import DatabaseSingleton
|
||||||
|
|
||||||
|
from controllers.user_controller import user_blueprint
|
||||||
|
from controllers.reservation_controller import reservation_blueprint
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config['JWT_SECRET_KEY'] = Config.JWT_SECRET_KEY
|
app.config['JWT_SECRET_KEY'] = Config.JWT_SECRET_KEY
|
||||||
|
|
||||||
|
app.register_blueprint(user_blueprint, url_prefix='/user')
|
||||||
|
app.register_blueprint(reservation_blueprint, url_prefix='/reservation')
|
||||||
|
|
||||||
jwt = JWTManager(app)
|
jwt = JWTManager(app)
|
||||||
client = MongoClient(Config.MONGO_URI)
|
client = MongoClient(Config.MONGO_URI)
|
||||||
db = DatabaseSingleton.get_instance()
|
db = DatabaseSingleton.get_instance()
|
||||||
|
|
||||||
|
if db is not None:
|
||||||
|
print('Connected to MongoDB')
|
||||||
|
else:
|
||||||
|
print('Failed to connect to MongoDB')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True)
|
app.run(debug=True)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
DB_NAME = os.getenv('DB_NAME', 'meeting_reservation')
|
DB_NAME = os.getenv('DB_NAME', 'talkpal')
|
||||||
JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'your_jwt_secret_key')
|
JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'your_jwt_secret_key')
|
||||||
MONGO_URI = os.getenv('MONGO_URI', 'mongodb://localhost:27017/')
|
MONGO_URI = os.getenv('MONGO_URI', 'mongodb://localhost:27017/')
|
@ -13,9 +13,9 @@ reservation_blueprint = Blueprint('reservation', __name__)
|
|||||||
@jwt_required()
|
@jwt_required()
|
||||||
def create_reservation():
|
def create_reservation():
|
||||||
current_user = get_jwt_identity()
|
current_user = get_jwt_identity()
|
||||||
reservation = Reservation(**request.json.dict(), creator=current_user)
|
reservation = Reservation(**request.json, creator=current_user)
|
||||||
ReservationRepository.insert(reservation)
|
id = ReservationRepository.insert(reservation)
|
||||||
return jsonify({"message": "Reservation created successfully"})
|
return jsonify({"message": "Reservation created successfully", "id": id})
|
||||||
|
|
||||||
@reservation_blueprint.route('/<reservation_id>', methods=['DELETE'])
|
@reservation_blueprint.route('/<reservation_id>', methods=['DELETE'])
|
||||||
@jwt_required()
|
@jwt_required()
|
||||||
@ -43,7 +43,7 @@ def change_reservation(reservation_id):
|
|||||||
@jwt_required()
|
@jwt_required()
|
||||||
def get_reservation(reservation_id):
|
def get_reservation(reservation_id):
|
||||||
try:
|
try:
|
||||||
reservation = ReservationRepository.get_by_id()
|
reservation = ReservationRepository.get_by_id(reservation_id)
|
||||||
if not reservation:
|
if not reservation:
|
||||||
return jsonify({"error": "Reservation not found"}), 404
|
return jsonify({"error": "Reservation not found"}), 404
|
||||||
except:
|
except:
|
||||||
@ -55,11 +55,11 @@ def get_reservation(reservation_id):
|
|||||||
@jwt_required()
|
@jwt_required()
|
||||||
def list_reservations():
|
def list_reservations():
|
||||||
filters = {
|
filters = {
|
||||||
"start_date": request.args.get("start_date"),
|
"date": request.args.get("date"),
|
||||||
"end_date": request.args.get("end_date"),
|
|
||||||
"room_id": request.args.get("room_id")
|
"room_id": request.args.get("room_id")
|
||||||
}
|
}
|
||||||
filters = {k: v for k, v in filters.items() if v is not None}
|
filters = {k: v for k, v in filters.items() if v is not None}
|
||||||
|
|
||||||
reservations = ReservationRepository.list_all(filters)
|
reservations = ReservationRepository.list_all(filters)
|
||||||
|
print(reservations)
|
||||||
return jsonify(reservations)
|
return jsonify(reservations)
|
@ -12,9 +12,9 @@ user_blueprint = Blueprint('user', __name__)
|
|||||||
@validate_request(RegisterUserDTO)
|
@validate_request(RegisterUserDTO)
|
||||||
def register_user():
|
def register_user():
|
||||||
data = request.json
|
data = request.json
|
||||||
if UserRepo.find_by_username(data.username):
|
if UserRepo.find_by_username(data['username']):
|
||||||
return jsonify({"error": "User already exists"}), 409
|
return jsonify({"error": "User already exists"}), 409
|
||||||
user = User(**data.dict())
|
user = User(**data)
|
||||||
UserRepo.insert(user)
|
UserRepo.insert(user)
|
||||||
return jsonify({"message": "User registered successfully"})
|
return jsonify({"message": "User registered successfully"})
|
||||||
|
|
||||||
|
@ -1,17 +1,22 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from datetime import datetime
|
|
||||||
|
from dtos.time_dtos import TimeDTO
|
||||||
|
|
||||||
class CreateReservationDTO(BaseModel):
|
class CreateReservationDTO(BaseModel):
|
||||||
title: str
|
title: str
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
room_id: str
|
room_id: str
|
||||||
start_date: datetime
|
date: str
|
||||||
finish_date: datetime
|
start_time: TimeDTO
|
||||||
|
finish_time: TimeDTO
|
||||||
|
color: int
|
||||||
|
|
||||||
class UpdateReservationDTO(BaseModel):
|
class UpdateReservationDTO(BaseModel):
|
||||||
title: Optional[str] = None
|
title: Optional[str] = None
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
room_id: Optional[str] = None
|
room_id: Optional[str] = None
|
||||||
start_date: Optional[datetime] = None
|
date: Optional[str] = None
|
||||||
finish_date: Optional[datetime] = None
|
start_time: Optional[TimeDTO] = None
|
||||||
|
finish_time: Optional[TimeDTO] = None
|
||||||
|
color: Optional[int] = None
|
5
src/dtos/time_dtos.py
Normal file
5
src/dtos/time_dtos.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
class TimeDTO(BaseModel):
|
||||||
|
hours: int
|
||||||
|
minutes: int
|
@ -1,13 +1,14 @@
|
|||||||
|
from typing import Optional
|
||||||
from pydantic import BaseModel, EmailStr
|
from pydantic import BaseModel, EmailStr
|
||||||
|
|
||||||
class RegisterUserDTO(BaseModel):
|
class RegisterUserDTO(BaseModel):
|
||||||
username: str
|
username: str
|
||||||
password: str
|
password: str
|
||||||
email: EmailStr
|
email: Optional[EmailStr] = None
|
||||||
first_name: str
|
first_name: Optional[str] = None
|
||||||
last_name: str
|
last_name: Optional[str] = None
|
||||||
department: str
|
department: Optional[str] = None
|
||||||
position: str
|
position: Optional[str] = None
|
||||||
is_admin: bool = False
|
is_admin: bool = False
|
||||||
|
|
||||||
class LoginUserDTO(BaseModel):
|
class LoginUserDTO(BaseModel):
|
||||||
|
@ -1,8 +1,18 @@
|
|||||||
|
from models.time_model import Time
|
||||||
|
|
||||||
class Reservation:
|
class Reservation:
|
||||||
def __init__(self, title, description, room_id, creator, start_date, finish_date):
|
def __init__(self, title, room_id, creator, date, start_time, finish_time, color, description=None):
|
||||||
self.title = title
|
self.title = title
|
||||||
self.description = description
|
self.description = description
|
||||||
self.room_id = room_id
|
self.room_id = room_id
|
||||||
self.creator = creator
|
self.creator = creator
|
||||||
self.start_date = start_date
|
self.date = date
|
||||||
self.finish_date = finish_date
|
self.start_time = Time(**start_time)
|
||||||
|
self.finish_time = Time(**finish_time)
|
||||||
|
self.color = color
|
||||||
|
|
||||||
|
def dict(self):
|
||||||
|
dict = self.__dict__.copy()
|
||||||
|
dict["start_time"] = self.start_time.dict()
|
||||||
|
dict["finish_time"] = self.finish_time.dict()
|
||||||
|
return dict
|
7
src/models/time_model.py
Normal file
7
src/models/time_model.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class Time:
|
||||||
|
def __init__(self, hours, minutes):
|
||||||
|
self.hours = hours
|
||||||
|
self.minutes = minutes
|
||||||
|
|
||||||
|
def dict(self):
|
||||||
|
return self.__dict__
|
@ -1,6 +1,9 @@
|
|||||||
class User:
|
class User:
|
||||||
def __init__(self, username, email, first_name, last_name, department, position, is_admin=False):
|
def __init__(self, username, password, email=None, \
|
||||||
|
first_name=None, last_name=None, department=None, \
|
||||||
|
position=None, is_admin=False):
|
||||||
self.username = username
|
self.username = username
|
||||||
|
self.password = password
|
||||||
self.email = email
|
self.email = email
|
||||||
self.first_name = first_name
|
self.first_name = first_name
|
||||||
self.last_name = last_name
|
self.last_name = last_name
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
import json
|
||||||
|
from bson import ObjectId, json_util
|
||||||
|
|
||||||
from singletons.database_singleton import DatabaseSingleton
|
from singletons.database_singleton import DatabaseSingleton
|
||||||
|
|
||||||
class ReservationRepository:
|
class ReservationRepository:
|
||||||
@ -5,7 +8,7 @@ class ReservationRepository:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def insert(cls, reservation):
|
def insert(cls, reservation):
|
||||||
cls.db.reservation.insert_one(reservation.__dict__)
|
return str(cls.db.reservation.insert_one(reservation.dict()).inserted_id)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def delete(cls, reservation_id):
|
def delete(cls, reservation_id):
|
||||||
@ -24,17 +27,24 @@ class ReservationRepository:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_by_id(cls):
|
def get_by_id(cls, reservation_id):
|
||||||
return list(cls.db.reservation.find({"_id": ObjectId(reservation_id)}))
|
return list(cls.db.reservation.find({"_id": ObjectId(reservation_id)}))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list_all(cls, filters=None):
|
def list_all(cls, filters=None):
|
||||||
query = {}
|
query = {}
|
||||||
if filters:
|
if filters:
|
||||||
if "start_date" in filters:
|
if "date" in filters:
|
||||||
query["start_date"] = {"$gte": filters["start_date"]}
|
query["date"] = {"$gte": filters["date"]}
|
||||||
if "end_date" in filters:
|
|
||||||
query["start_date"] = {"$lte": filters["end_date"]}
|
|
||||||
if "room_id" in filters:
|
if "room_id" in filters:
|
||||||
query["room_id"] = filters["room_id"]
|
query["room_id"] = filters["room_id"]
|
||||||
return list(cls.db.reservation.find(query))
|
|
||||||
|
results = cls.db.reservation.find(query)
|
||||||
|
|
||||||
|
reservations = []
|
||||||
|
for res in results:
|
||||||
|
res["id"] = str(res["_id"])
|
||||||
|
del res["_id"]
|
||||||
|
reservations.append(res)
|
||||||
|
|
||||||
|
return reservations
|
Loading…
x
Reference in New Issue
Block a user