feat: adding configuration environtment

This commit is contained in:
akhdanre 2025-02-07 19:33:30 +07:00
parent a6639dc206
commit b9f7f3fd60
33 changed files with 265 additions and 209 deletions

3
.env Normal file
View File

@ -0,0 +1,3 @@
MONGO_URI=mongodb://localhost:27017/quiz_app
FLASK_ENV=development
DEBUG=True

0
.env.example Normal file
View File

View File

@ -1,2 +1,3 @@
from .auth import auth_blueprint
from .user import user_blueprint
from .default import default_blueprint
from .auth import auth_blueprint
from .user import user_blueprint

Binary file not shown.

View File

@ -1,22 +1,22 @@
from flask import Blueprint
from controllers import AuthController
# Inisialisasi blueprint
auth_blueprint = Blueprint("auth", __name__)
auth_controller = AuthController()
# Daftarkan rute ke controller
@auth_blueprint.route("/register", methods=["POST"])
def register():
return auth_controller.register()
@auth_blueprint.route("/login", methods=["POST"])
def login():
return auth_controller.login()
@auth_blueprint.route("/logout", methods=["DELETE"])
def logout():
return auth_controller.logout()
from flask import Blueprint
from controllers import AuthController
# Inisialisasi blueprint
auth_blueprint = Blueprint("auth", __name__)
auth_controller = AuthController()
# Daftarkan rute ke controller
@auth_blueprint.route("/register", methods=["POST"])
def register():
return auth_controller.register()
@auth_blueprint.route("/login", methods=["POST"])
def login():
return auth_controller.login()
@auth_blueprint.route("/logout", methods=["DELETE"])
def logout():
return auth_controller.logout()

View File

@ -0,0 +1,9 @@
from flask import Blueprint
default_blueprint = Blueprint("default", __name__)
@default_blueprint.route("/")
def home():
return "Welcome to the Home Page!"

View File

@ -1,12 +1,12 @@
# /blueprints/user.py
from flask import Blueprint
from controllers import UserController
user_blueprint = Blueprint("user", __name__)
user_controller = UserController()
@user_blueprint.route("/users", methods=["GET"])
def get_users():
return user_controller.get_users()
# /blueprints/user.py
from flask import Blueprint
from controllers import UserController
user_blueprint = Blueprint("user", __name__)
user_controller = UserController()
@user_blueprint.route("/users", methods=["GET"])
def get_users():
return user_controller.get_users()

1
app/configs/__init__.py Normal file
View File

@ -0,0 +1 @@
from .config import Config

Binary file not shown.

Binary file not shown.

18
app/configs/config.py Normal file
View File

@ -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

View File

@ -1,2 +1,2 @@
from .auth_controller import AuthController
from .user_controller import UserController
from .auth_controller import AuthController
from .user_controller import UserController

View File

@ -1,19 +1,19 @@
from flask import jsonify, request
from services import UserService
from services import AuthService
class AuthController:
def __init__(self):
self.user_service = UserService()
self.auth_service = AuthService()
def login(self):
data = request.get_json()
users = self.auth_service.login(data)
response = {
"status": True,
"message": "success retrive data",
"data": users,
}
return jsonify(response)
from flask import jsonify, request
from services import UserService
from services import AuthService
class AuthController:
def __init__(self):
self.user_service = UserService()
self.auth_service = AuthService()
def login(self):
data = request.get_json()
users = self.auth_service.login(data)
response = {
"status": True,
"message": "success retrive data",
"data": users,
}
return jsonify(response)

View File

@ -1,17 +1,17 @@
# # Sample Data Preparation
# input_dim = 3 # Example input dimension
# hidden_dim = 5 # Example hidden dimension
# num_samples = 1000
# sequence_length = 10
# # Generate dummy data for training
# X = np.random.randn(num_samples, input_dim, 1) # Shape (num_samples, input_dim, 1)
# y = np.random.randn(
# num_samples, hidden_dim, 1
# ) # Shape (num_samples, hidden_dim, 1)
# # Initialize and train the LSTM
# lstm = LSTM(input_dim, hidden_dim)
# # Sample Data Preparation
# input_dim = 3 # Example input dimension
# hidden_dim = 5 # Example hidden dimension
# num_samples = 1000
# sequence_length = 10
# # Generate dummy data for training
# X = np.random.randn(num_samples, input_dim, 1) # Shape (num_samples, input_dim, 1)
# y = np.random.randn(
# num_samples, hidden_dim, 1
# ) # Shape (num_samples, hidden_dim, 1)
# # Initialize and train the LSTM
# lstm = LSTM(input_dim, hidden_dim)
# lstm.train(X, y, num_epochs=10, learning_rate=0.01)

View File

@ -1,12 +1,12 @@
# /controllers/user_controller.py
from flask import jsonify
from services import UserService
class UserController:
def __init__(self):
self.user_service = UserService()
def get_users(self):
users = self.user_service.get_all_users()
return jsonify(users)
# /controllers/user_controller.py
from flask import jsonify
from services import UserService
class UserController:
def __init__(self):
self.user_service = UserService()
def get_users(self):
users = self.user_service.get_all_users()
return jsonify(users)

1
app/database/__init__.py Normal file
View File

@ -0,0 +1 @@
from .db import init_db

Binary file not shown.

Binary file not shown.

11
app/database/db.py Normal file
View File

@ -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)

View File

@ -1,10 +1,21 @@
from flask import Flask
from blueprints import auth_blueprint, user_blueprint
app = Flask(__name__)
app.register_blueprint(auth_blueprint, url_prefix="/api")
app.register_blueprint(user_blueprint, url_prefix="/api")
if __name__ == "__main__":
app.run(debug=True)
from flask import Flask
from blueprints import auth_blueprint, user_blueprint, default_blueprint
from database import init_db
from configs import Config # Import the config class
app = Flask(__name__)
# Apply configurations environtment
app.config["FLASK_ENV"] = Config.FLASK_ENV
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)

View File

@ -1 +1 @@
from .user_repository import UserRepository
from .user_repository import UserRepository

View File

@ -1,24 +1,24 @@
class UserRepository:
users = [
{
"id": 1,
"name": "akhdan",
"email": "akhdanre@gmail.com",
"password": "password123",
},
{
"id": 2,
"name": "Bob",
"email": "bob@example.com",
"password": "password123",
},
]
def get_all_users(self):
return self.users
def get_user_by_email(self, email):
for user in self.users:
if user.get("email") == email:
return user
return None
class UserRepository:
users = [
{
"id": 1,
"name": "akhdan",
"email": "akhdanre@gmail.com",
"password": "password123",
},
{
"id": 2,
"name": "Bob",
"email": "bob@example.com",
"password": "password123",
},
]
def get_all_users(self):
return self.users
def get_user_by_email(self, email):
for user in self.users:
if user.get("email") == email:
return user
return None

View File

@ -1,2 +1,2 @@
from .auth_service import AuthService
from .user_service import UserService
from .auth_service import AuthService
from .user_service import UserService

View File

@ -1,21 +1,21 @@
from repositories import UserRepository
class AuthService:
def __init__(self):
self.user_repository = UserRepository()
def login(self, data):
email = data.get("email")
password = data.get("password")
user_data = self.user_repository.get_user_by_email(email)
if user_data == None:
return None
if user_data["password"] == password:
del user_data["password"]
return user_data
return None
from repositories import UserRepository
class AuthService:
def __init__(self):
self.user_repository = UserRepository()
def login(self, data):
email = data.get("email")
password = data.get("password")
user_data = self.user_repository.get_user_by_email(email)
if user_data == None:
return None
if user_data["password"] == password:
del user_data["password"]
return user_data
return None

View File

@ -1,53 +1,53 @@
import numpy as np
class LSTM:
def __init__(self, input_dim, hidden_dim):
self.input_dim = input_dim
self.hidden_dim = hidden_dim
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.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.bf = np.zeros((hidden_dim, 1))
self.bi = np.zeros((hidden_dim, 1))
self.bc = np.zeros((hidden_dim, 1))
self.bo = np.zeros((hidden_dim, 1))
self.h = np.zeros((hidden_dim, 1))
self.c = np.zeros((hidden_dim, 1))
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def tanh(self, x):
return np.tanh(x)
def forward(self, x_t):
combined = np.vstack((self.h, x_t))
f_t = self.sigmoid(np.dot(self.Wf, combined) + self.bf)
i_t = self.sigmoid(np.dot(self.Wi, combined) + self.bi)
C_tilde_t = self.tanh(np.dot(self.Wc, combined) + self.bc)
self.c = f_t * self.c + i_t * C_tilde_t
o_t = self.sigmoid(np.dot(self.Wo, combined) + self.bo)
self.h = o_t * self.tanh(self.c)
return self.h
def backward(self, x_t, h_t, y_t, learning_rate):
# Your backward pass implementation here
pass
def train(self, X, y, num_epochs, learning_rate):
for epoch in range(num_epochs):
for i in range(len(X)):
x_t = X[i]
y_t = y[i]
# Forward pass
h_t = self.forward(x_t)
# Calculate loss and perform backward pass
loss = np.mean((h_t - y_t) ** 2) # Example loss
self.backward(x_t, h_t, y_t, learning_rate)
if i % 100 == 0: # Print loss every 100 samples
print(f"Epoch {epoch}, Sample {i}, Loss: {loss}")
import numpy as np
class LSTM:
def __init__(self, input_dim, hidden_dim):
self.input_dim = input_dim
self.hidden_dim = hidden_dim
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.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.bf = np.zeros((hidden_dim, 1))
self.bi = np.zeros((hidden_dim, 1))
self.bc = np.zeros((hidden_dim, 1))
self.bo = np.zeros((hidden_dim, 1))
self.h = np.zeros((hidden_dim, 1))
self.c = np.zeros((hidden_dim, 1))
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def tanh(self, x):
return np.tanh(x)
def forward(self, x_t):
combined = np.vstack((self.h, x_t))
f_t = self.sigmoid(np.dot(self.Wf, combined) + self.bf)
i_t = self.sigmoid(np.dot(self.Wi, combined) + self.bi)
C_tilde_t = self.tanh(np.dot(self.Wc, combined) + self.bc)
self.c = f_t * self.c + i_t * C_tilde_t
o_t = self.sigmoid(np.dot(self.Wo, combined) + self.bo)
self.h = o_t * self.tanh(self.c)
return self.h
def backward(self, x_t, h_t, y_t, learning_rate):
# Your backward pass implementation here
pass
def train(self, X, y, num_epochs, learning_rate):
for epoch in range(num_epochs):
for i in range(len(X)):
x_t = X[i]
y_t = y[i]
# Forward pass
h_t = self.forward(x_t)
# Calculate loss and perform backward pass
loss = np.mean((h_t - y_t) ** 2) # Example loss
self.backward(x_t, h_t, y_t, learning_rate)
if i % 100 == 0: # Print loss every 100 samples
print(f"Epoch {epoch}, Sample {i}, Loss: {loss}")

View File

@ -1,9 +1,9 @@
from repositories import UserRepository
class UserService:
def __init__(self):
self.user_repository = UserRepository()
def get_all_users(self):
return self.user_repository.get_all_users()
from repositories import UserRepository
class UserService:
def __init__(self):
self.user_repository = UserRepository()
def get_all_users(self):
return self.user_repository.get_all_users()

View File

@ -1,4 +1,5 @@
Flask==3.0.3
numpy==2.1.2
pymongo
Flask-PyMongo
Flask==3.0.3
numpy==2.1.2
pymongo
Flask-PyMongo
python-dotenv