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
|
||||
bson==0.5.10
|
||||
click==8.1.8
|
||||
flask==3.0.3
|
||||
importlib-metadata==8.5.0
|
||||
colorama==0.4.6
|
||||
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
|
||||
jinja2==3.1.5
|
||||
Jinja2==3.1.5
|
||||
MarkupSafe==2.1.5
|
||||
werkzeug==3.0.6
|
||||
zipp==3.20.2
|
||||
pydantic==2.10.6
|
||||
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 pymongo import MongoClient
|
||||
from flask_jwt_extended import JWTManager
|
||||
|
||||
from config import Config
|
||||
from singletons.database_singleton import DatabaseSingleton
|
||||
|
||||
from controllers.user_controller import user_blueprint
|
||||
from controllers.reservation_controller import reservation_blueprint
|
||||
|
||||
app = Flask(__name__)
|
||||
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)
|
||||
client = MongoClient(Config.MONGO_URI)
|
||||
db = DatabaseSingleton.get_instance()
|
||||
|
||||
if db is not None:
|
||||
print('Connected to MongoDB')
|
||||
else:
|
||||
print('Failed to connect to MongoDB')
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
||||
|
@ -1,6 +1,6 @@
|
||||
import os
|
||||
|
||||
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')
|
||||
MONGO_URI = os.getenv('MONGO_URI', 'mongodb://localhost:27017/')
|
@ -13,9 +13,9 @@ reservation_blueprint = Blueprint('reservation', __name__)
|
||||
@jwt_required()
|
||||
def create_reservation():
|
||||
current_user = get_jwt_identity()
|
||||
reservation = Reservation(**request.json.dict(), creator=current_user)
|
||||
ReservationRepository.insert(reservation)
|
||||
return jsonify({"message": "Reservation created successfully"})
|
||||
reservation = Reservation(**request.json, creator=current_user)
|
||||
id = ReservationRepository.insert(reservation)
|
||||
return jsonify({"message": "Reservation created successfully", "id": id})
|
||||
|
||||
@reservation_blueprint.route('/<reservation_id>', methods=['DELETE'])
|
||||
@jwt_required()
|
||||
@ -43,7 +43,7 @@ def change_reservation(reservation_id):
|
||||
@jwt_required()
|
||||
def get_reservation(reservation_id):
|
||||
try:
|
||||
reservation = ReservationRepository.get_by_id()
|
||||
reservation = ReservationRepository.get_by_id(reservation_id)
|
||||
if not reservation:
|
||||
return jsonify({"error": "Reservation not found"}), 404
|
||||
except:
|
||||
@ -55,11 +55,11 @@ def get_reservation(reservation_id):
|
||||
@jwt_required()
|
||||
def list_reservations():
|
||||
filters = {
|
||||
"start_date": request.args.get("start_date"),
|
||||
"end_date": request.args.get("end_date"),
|
||||
"date": request.args.get("date"),
|
||||
"room_id": request.args.get("room_id")
|
||||
}
|
||||
filters = {k: v for k, v in filters.items() if v is not None}
|
||||
|
||||
reservations = ReservationRepository.list_all(filters)
|
||||
print(reservations)
|
||||
return jsonify(reservations)
|
@ -12,9 +12,9 @@ user_blueprint = Blueprint('user', __name__)
|
||||
@validate_request(RegisterUserDTO)
|
||||
def register_user():
|
||||
data = request.json
|
||||
if UserRepo.find_by_username(data.username):
|
||||
if UserRepo.find_by_username(data['username']):
|
||||
return jsonify({"error": "User already exists"}), 409
|
||||
user = User(**data.dict())
|
||||
user = User(**data)
|
||||
UserRepo.insert(user)
|
||||
return jsonify({"message": "User registered successfully"})
|
||||
|
||||
|
@ -1,17 +1,22 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel
|
||||
from datetime import datetime
|
||||
|
||||
from dtos.time_dtos import TimeDTO
|
||||
|
||||
class CreateReservationDTO(BaseModel):
|
||||
title: str
|
||||
description: Optional[str] = None
|
||||
room_id: str
|
||||
start_date: datetime
|
||||
finish_date: datetime
|
||||
date: str
|
||||
start_time: TimeDTO
|
||||
finish_time: TimeDTO
|
||||
color: int
|
||||
|
||||
class UpdateReservationDTO(BaseModel):
|
||||
title: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
room_id: Optional[str] = None
|
||||
start_date: Optional[datetime] = None
|
||||
finish_date: Optional[datetime] = None
|
||||
date: Optional[str] = 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
|
||||
|
||||
class RegisterUserDTO(BaseModel):
|
||||
username: str
|
||||
password: str
|
||||
email: EmailStr
|
||||
first_name: str
|
||||
last_name: str
|
||||
department: str
|
||||
position: str
|
||||
email: Optional[EmailStr] = None
|
||||
first_name: Optional[str] = None
|
||||
last_name: Optional[str] = None
|
||||
department: Optional[str] = None
|
||||
position: Optional[str] = None
|
||||
is_admin: bool = False
|
||||
|
||||
class LoginUserDTO(BaseModel):
|
||||
|
@ -1,8 +1,18 @@
|
||||
from models.time_model import Time
|
||||
|
||||
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.description = description
|
||||
self.room_id = room_id
|
||||
self.creator = creator
|
||||
self.start_date = start_date
|
||||
self.finish_date = finish_date
|
||||
self.date = 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:
|
||||
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.password = password
|
||||
self.email = email
|
||||
self.first_name = first_name
|
||||
self.last_name = last_name
|
||||
|
@ -1,3 +1,6 @@
|
||||
import json
|
||||
from bson import ObjectId, json_util
|
||||
|
||||
from singletons.database_singleton import DatabaseSingleton
|
||||
|
||||
class ReservationRepository:
|
||||
@ -5,7 +8,7 @@ class ReservationRepository:
|
||||
|
||||
@classmethod
|
||||
def insert(cls, reservation):
|
||||
cls.db.reservation.insert_one(reservation.__dict__)
|
||||
return str(cls.db.reservation.insert_one(reservation.dict()).inserted_id)
|
||||
|
||||
@classmethod
|
||||
def delete(cls, reservation_id):
|
||||
@ -24,17 +27,24 @@ class ReservationRepository:
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def get_by_id(cls):
|
||||
def get_by_id(cls, reservation_id):
|
||||
return list(cls.db.reservation.find({"_id": ObjectId(reservation_id)}))
|
||||
|
||||
@classmethod
|
||||
def list_all(cls, filters=None):
|
||||
query = {}
|
||||
if filters:
|
||||
if "start_date" in filters:
|
||||
query["start_date"] = {"$gte": filters["start_date"]}
|
||||
if "end_date" in filters:
|
||||
query["start_date"] = {"$lte": filters["end_date"]}
|
||||
if "date" in filters:
|
||||
query["date"] = {"$gte": filters["date"]}
|
||||
if "room_id" in filters:
|
||||
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