feat: adding configuration environtment
This commit is contained in:
parent
a6639dc206
commit
b9f7f3fd60
|
@ -0,0 +1,3 @@
|
||||||
|
MONGO_URI=mongodb://localhost:27017/quiz_app
|
||||||
|
FLASK_ENV=development
|
||||||
|
DEBUG=True
|
|
@ -1,2 +1,3 @@
|
||||||
from .auth import auth_blueprint
|
from .default import default_blueprint
|
||||||
from .user import user_blueprint
|
from .auth import auth_blueprint
|
||||||
|
from .user import user_blueprint
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,22 +1,22 @@
|
||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
from controllers import AuthController
|
from controllers import AuthController
|
||||||
|
|
||||||
# Inisialisasi blueprint
|
# Inisialisasi blueprint
|
||||||
auth_blueprint = Blueprint("auth", __name__)
|
auth_blueprint = Blueprint("auth", __name__)
|
||||||
auth_controller = AuthController()
|
auth_controller = AuthController()
|
||||||
|
|
||||||
|
|
||||||
# Daftarkan rute ke controller
|
# Daftarkan rute ke controller
|
||||||
@auth_blueprint.route("/register", methods=["POST"])
|
@auth_blueprint.route("/register", methods=["POST"])
|
||||||
def register():
|
def register():
|
||||||
return auth_controller.register()
|
return auth_controller.register()
|
||||||
|
|
||||||
|
|
||||||
@auth_blueprint.route("/login", methods=["POST"])
|
@auth_blueprint.route("/login", methods=["POST"])
|
||||||
def login():
|
def login():
|
||||||
return auth_controller.login()
|
return auth_controller.login()
|
||||||
|
|
||||||
|
|
||||||
@auth_blueprint.route("/logout", methods=["DELETE"])
|
@auth_blueprint.route("/logout", methods=["DELETE"])
|
||||||
def logout():
|
def logout():
|
||||||
return auth_controller.logout()
|
return auth_controller.logout()
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
from flask import Blueprint
|
||||||
|
|
||||||
|
|
||||||
|
default_blueprint = Blueprint("default", __name__)
|
||||||
|
|
||||||
|
|
||||||
|
@default_blueprint.route("/")
|
||||||
|
def home():
|
||||||
|
return "Welcome to the Home Page!"
|
|
@ -1,12 +1,12 @@
|
||||||
# /blueprints/user.py
|
# /blueprints/user.py
|
||||||
|
|
||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
from controllers import UserController
|
from controllers import UserController
|
||||||
|
|
||||||
user_blueprint = Blueprint("user", __name__)
|
user_blueprint = Blueprint("user", __name__)
|
||||||
user_controller = UserController()
|
user_controller = UserController()
|
||||||
|
|
||||||
|
|
||||||
@user_blueprint.route("/users", methods=["GET"])
|
@user_blueprint.route("/users", methods=["GET"])
|
||||||
def get_users():
|
def get_users():
|
||||||
return user_controller.get_users()
|
return user_controller.get_users()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
from .config import Config
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,18 @@
|
||||||
|
import os
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
load_dotenv() # Load environment variables from .env
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
MONGO_URI = os.getenv(
|
||||||
|
"MONGO_URI", "mongodb://localhost:27017/quiz_app"
|
||||||
|
) # Default value if not set
|
||||||
|
|
||||||
|
FLASK_ENV = os.getenv("FLASK_ENV", "development") # Default to development
|
||||||
|
|
||||||
|
DEBUG = os.getenv("DEBUG", "True").lower() in [
|
||||||
|
"true",
|
||||||
|
"1",
|
||||||
|
"t",
|
||||||
|
] # Convert string to boolean
|
|
@ -1,2 +1,2 @@
|
||||||
from .auth_controller import AuthController
|
from .auth_controller import AuthController
|
||||||
from .user_controller import UserController
|
from .user_controller import UserController
|
||||||
|
|
Binary file not shown.
|
@ -1,19 +1,19 @@
|
||||||
from flask import jsonify, request
|
from flask import jsonify, request
|
||||||
from services import UserService
|
from services import UserService
|
||||||
from services import AuthService
|
from services import AuthService
|
||||||
|
|
||||||
|
|
||||||
class AuthController:
|
class AuthController:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.user_service = UserService()
|
self.user_service = UserService()
|
||||||
self.auth_service = AuthService()
|
self.auth_service = AuthService()
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
users = self.auth_service.login(data)
|
users = self.auth_service.login(data)
|
||||||
response = {
|
response = {
|
||||||
"status": True,
|
"status": True,
|
||||||
"message": "success retrive data",
|
"message": "success retrive data",
|
||||||
"data": users,
|
"data": users,
|
||||||
}
|
}
|
||||||
return jsonify(response)
|
return jsonify(response)
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
|
|
||||||
|
|
||||||
# # Sample Data Preparation
|
# # Sample Data Preparation
|
||||||
# input_dim = 3 # Example input dimension
|
# input_dim = 3 # Example input dimension
|
||||||
# hidden_dim = 5 # Example hidden dimension
|
# hidden_dim = 5 # Example hidden dimension
|
||||||
# num_samples = 1000
|
# num_samples = 1000
|
||||||
# sequence_length = 10
|
# sequence_length = 10
|
||||||
|
|
||||||
# # Generate dummy data for training
|
# # Generate dummy data for training
|
||||||
# X = np.random.randn(num_samples, input_dim, 1) # Shape (num_samples, input_dim, 1)
|
# X = np.random.randn(num_samples, input_dim, 1) # Shape (num_samples, input_dim, 1)
|
||||||
# y = np.random.randn(
|
# y = np.random.randn(
|
||||||
# num_samples, hidden_dim, 1
|
# num_samples, hidden_dim, 1
|
||||||
# ) # Shape (num_samples, hidden_dim, 1)
|
# ) # Shape (num_samples, hidden_dim, 1)
|
||||||
|
|
||||||
# # Initialize and train the LSTM
|
# # Initialize and train the LSTM
|
||||||
# lstm = LSTM(input_dim, hidden_dim)
|
# lstm = LSTM(input_dim, hidden_dim)
|
||||||
# lstm.train(X, y, num_epochs=10, learning_rate=0.01)
|
# lstm.train(X, y, num_epochs=10, learning_rate=0.01)
|
|
@ -1,12 +1,12 @@
|
||||||
# /controllers/user_controller.py
|
# /controllers/user_controller.py
|
||||||
from flask import jsonify
|
from flask import jsonify
|
||||||
from services import UserService
|
from services import UserService
|
||||||
|
|
||||||
|
|
||||||
class UserController:
|
class UserController:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.user_service = UserService()
|
self.user_service = UserService()
|
||||||
|
|
||||||
def get_users(self):
|
def get_users(self):
|
||||||
users = self.user_service.get_all_users()
|
users = self.user_service.get_all_users()
|
||||||
return jsonify(users)
|
return jsonify(users)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
from .db import init_db
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,11 @@
|
||||||
|
from flask_pymongo import PyMongo
|
||||||
|
from flask import Flask
|
||||||
|
from configs import Config
|
||||||
|
|
||||||
|
mongo = PyMongo()
|
||||||
|
|
||||||
|
|
||||||
|
def init_db(app: Flask):
|
||||||
|
app.config["MONGO_URI"] = Config.MONGO_URI
|
||||||
|
print(Config.MONGO_URI)
|
||||||
|
mongo.init_app(app)
|
31
app/main.py
31
app/main.py
|
@ -1,10 +1,21 @@
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from blueprints import auth_blueprint, user_blueprint
|
from blueprints import auth_blueprint, user_blueprint, default_blueprint
|
||||||
|
from database import init_db
|
||||||
app = Flask(__name__)
|
from configs import Config # Import the config class
|
||||||
|
|
||||||
app.register_blueprint(auth_blueprint, url_prefix="/api")
|
app = Flask(__name__)
|
||||||
app.register_blueprint(user_blueprint, url_prefix="/api")
|
|
||||||
|
# Apply configurations environtment
|
||||||
if __name__ == "__main__":
|
app.config["FLASK_ENV"] = Config.FLASK_ENV
|
||||||
app.run(debug=True)
|
app.config["DEBUG"] = Config.DEBUG
|
||||||
|
|
||||||
|
# Initialize database
|
||||||
|
init_db(app)
|
||||||
|
|
||||||
|
# Register blueprints
|
||||||
|
app.register_blueprint(default_blueprint)
|
||||||
|
app.register_blueprint(auth_blueprint, url_prefix="/api")
|
||||||
|
app.register_blueprint(user_blueprint, url_prefix="/api")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(debug=Config.DEBUG)
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
from .user_repository import UserRepository
|
from .user_repository import UserRepository
|
||||||
|
|
Binary file not shown.
|
@ -1,24 +1,24 @@
|
||||||
class UserRepository:
|
class UserRepository:
|
||||||
users = [
|
users = [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"name": "akhdan",
|
"name": "akhdan",
|
||||||
"email": "akhdanre@gmail.com",
|
"email": "akhdanre@gmail.com",
|
||||||
"password": "password123",
|
"password": "password123",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Bob",
|
"name": "Bob",
|
||||||
"email": "bob@example.com",
|
"email": "bob@example.com",
|
||||||
"password": "password123",
|
"password": "password123",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_all_users(self):
|
def get_all_users(self):
|
||||||
return self.users
|
return self.users
|
||||||
|
|
||||||
def get_user_by_email(self, email):
|
def get_user_by_email(self, email):
|
||||||
for user in self.users:
|
for user in self.users:
|
||||||
if user.get("email") == email:
|
if user.get("email") == email:
|
||||||
return user
|
return user
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
from .auth_service import AuthService
|
from .auth_service import AuthService
|
||||||
from .user_service import UserService
|
from .user_service import UserService
|
||||||
|
|
Binary file not shown.
|
@ -1,21 +1,21 @@
|
||||||
from repositories import UserRepository
|
from repositories import UserRepository
|
||||||
|
|
||||||
|
|
||||||
class AuthService:
|
class AuthService:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.user_repository = UserRepository()
|
self.user_repository = UserRepository()
|
||||||
|
|
||||||
def login(self, data):
|
def login(self, data):
|
||||||
email = data.get("email")
|
email = data.get("email")
|
||||||
password = data.get("password")
|
password = data.get("password")
|
||||||
|
|
||||||
user_data = self.user_repository.get_user_by_email(email)
|
user_data = self.user_repository.get_user_by_email(email)
|
||||||
|
|
||||||
if user_data == None:
|
if user_data == None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if user_data["password"] == password:
|
if user_data["password"] == password:
|
||||||
del user_data["password"]
|
del user_data["password"]
|
||||||
return user_data
|
return user_data
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -1,53 +1,53 @@
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class LSTM:
|
class LSTM:
|
||||||
def __init__(self, input_dim, hidden_dim):
|
def __init__(self, input_dim, hidden_dim):
|
||||||
self.input_dim = input_dim
|
self.input_dim = input_dim
|
||||||
self.hidden_dim = hidden_dim
|
self.hidden_dim = hidden_dim
|
||||||
self.Wf = np.random.randn(hidden_dim, input_dim + hidden_dim) * 0.01
|
self.Wf = np.random.randn(hidden_dim, input_dim + hidden_dim) * 0.01
|
||||||
self.Wi = np.random.randn(hidden_dim, input_dim + hidden_dim) * 0.01
|
self.Wi = np.random.randn(hidden_dim, input_dim + hidden_dim) * 0.01
|
||||||
self.Wc = np.random.randn(hidden_dim, input_dim + hidden_dim) * 0.01
|
self.Wc = np.random.randn(hidden_dim, input_dim + hidden_dim) * 0.01
|
||||||
self.Wo = np.random.randn(hidden_dim, input_dim + hidden_dim) * 0.01
|
self.Wo = np.random.randn(hidden_dim, input_dim + hidden_dim) * 0.01
|
||||||
self.bf = np.zeros((hidden_dim, 1))
|
self.bf = np.zeros((hidden_dim, 1))
|
||||||
self.bi = np.zeros((hidden_dim, 1))
|
self.bi = np.zeros((hidden_dim, 1))
|
||||||
self.bc = np.zeros((hidden_dim, 1))
|
self.bc = np.zeros((hidden_dim, 1))
|
||||||
self.bo = np.zeros((hidden_dim, 1))
|
self.bo = np.zeros((hidden_dim, 1))
|
||||||
self.h = np.zeros((hidden_dim, 1))
|
self.h = np.zeros((hidden_dim, 1))
|
||||||
self.c = np.zeros((hidden_dim, 1))
|
self.c = np.zeros((hidden_dim, 1))
|
||||||
|
|
||||||
def sigmoid(self, x):
|
def sigmoid(self, x):
|
||||||
return 1 / (1 + np.exp(-x))
|
return 1 / (1 + np.exp(-x))
|
||||||
|
|
||||||
def tanh(self, x):
|
def tanh(self, x):
|
||||||
return np.tanh(x)
|
return np.tanh(x)
|
||||||
|
|
||||||
def forward(self, x_t):
|
def forward(self, x_t):
|
||||||
combined = np.vstack((self.h, x_t))
|
combined = np.vstack((self.h, x_t))
|
||||||
f_t = self.sigmoid(np.dot(self.Wf, combined) + self.bf)
|
f_t = self.sigmoid(np.dot(self.Wf, combined) + self.bf)
|
||||||
i_t = self.sigmoid(np.dot(self.Wi, combined) + self.bi)
|
i_t = self.sigmoid(np.dot(self.Wi, combined) + self.bi)
|
||||||
C_tilde_t = self.tanh(np.dot(self.Wc, combined) + self.bc)
|
C_tilde_t = self.tanh(np.dot(self.Wc, combined) + self.bc)
|
||||||
self.c = f_t * self.c + i_t * C_tilde_t
|
self.c = f_t * self.c + i_t * C_tilde_t
|
||||||
o_t = self.sigmoid(np.dot(self.Wo, combined) + self.bo)
|
o_t = self.sigmoid(np.dot(self.Wo, combined) + self.bo)
|
||||||
self.h = o_t * self.tanh(self.c)
|
self.h = o_t * self.tanh(self.c)
|
||||||
return self.h
|
return self.h
|
||||||
|
|
||||||
def backward(self, x_t, h_t, y_t, learning_rate):
|
def backward(self, x_t, h_t, y_t, learning_rate):
|
||||||
# Your backward pass implementation here
|
# Your backward pass implementation here
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def train(self, X, y, num_epochs, learning_rate):
|
def train(self, X, y, num_epochs, learning_rate):
|
||||||
for epoch in range(num_epochs):
|
for epoch in range(num_epochs):
|
||||||
for i in range(len(X)):
|
for i in range(len(X)):
|
||||||
x_t = X[i]
|
x_t = X[i]
|
||||||
y_t = y[i]
|
y_t = y[i]
|
||||||
|
|
||||||
# Forward pass
|
# Forward pass
|
||||||
h_t = self.forward(x_t)
|
h_t = self.forward(x_t)
|
||||||
|
|
||||||
# Calculate loss and perform backward pass
|
# Calculate loss and perform backward pass
|
||||||
loss = np.mean((h_t - y_t) ** 2) # Example loss
|
loss = np.mean((h_t - y_t) ** 2) # Example loss
|
||||||
self.backward(x_t, h_t, y_t, learning_rate)
|
self.backward(x_t, h_t, y_t, learning_rate)
|
||||||
|
|
||||||
if i % 100 == 0: # Print loss every 100 samples
|
if i % 100 == 0: # Print loss every 100 samples
|
||||||
print(f"Epoch {epoch}, Sample {i}, Loss: {loss}")
|
print(f"Epoch {epoch}, Sample {i}, Loss: {loss}")
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
from repositories import UserRepository
|
from repositories import UserRepository
|
||||||
|
|
||||||
|
|
||||||
class UserService:
|
class UserService:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.user_repository = UserRepository()
|
self.user_repository = UserRepository()
|
||||||
|
|
||||||
def get_all_users(self):
|
def get_all_users(self):
|
||||||
return self.user_repository.get_all_users()
|
return self.user_repository.get_all_users()
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
Flask==3.0.3
|
Flask==3.0.3
|
||||||
numpy==2.1.2
|
numpy==2.1.2
|
||||||
pymongo
|
pymongo
|
||||||
Flask-PyMongo
|
Flask-PyMongo
|
||||||
|
python-dotenv
|
||||||
|
|
Loading…
Reference in New Issue