diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..c3f502a
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 디폴트 무시된 파일
+/shelf/
+/workspace.xml
+# 에디터 기반 HTTP 클라이언트 요청
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..eebed55
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:D:\dotori_test\instance\dotori.db
+ $ProjectFileDir$
+
+
+ file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.45.1/org/xerial/sqlite-jdbc/3.45.1.0/sqlite-jdbc-3.45.1.0.jar
+
+
+ file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.45.1/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dotori_test.iml b/.idea/dotori_test.iml
new file mode 100644
index 0000000..3299580
--- /dev/null
+++ b/.idea/dotori_test.iml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..7e7ac73
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..207b0eb
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..a425752
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml
new file mode 100644
index 0000000..51513f1
--- /dev/null
+++ b/.idea/sqldialects.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/instance/dotori.db b/instance/dotori.db
index 0fccb6e..91bc6a1 100644
Binary files a/instance/dotori.db and b/instance/dotori.db differ
diff --git a/models/__pycache__/dotori.cpython-313.pyc b/models/__pycache__/dotori.cpython-313.pyc
index 7672caa..24ffa84 100644
Binary files a/models/__pycache__/dotori.cpython-313.pyc and b/models/__pycache__/dotori.cpython-313.pyc differ
diff --git a/models/dotori.py b/models/dotori.py
index 17db2ab..fba7526 100644
--- a/models/dotori.py
+++ b/models/dotori.py
@@ -5,14 +5,15 @@ from db import db
class UserDotori(db.Model):
__tablename__ = 'user_dotori'
- id = db.Column(db.Integer, primary_key=True)
+ id = db.Column(db.Integer, primary_key=True, autoincrement=True)
+ user_id = db.Column(db.Integer, nullable=False)
dotori_count = db.Column(db.Integer, default=0)
created_at = db.Column(db.DateTime, default=datetime.now)
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
def to_dict(self):
return {
- 'user_id': self.id,
+ 'user_id': self.user_id,
'dotori_count': self.dotori_count,
'created_at': self.created_at.isoformat(),
'updated_at': self.updated_at.isoformat()
@@ -20,7 +21,7 @@ class UserDotori(db.Model):
def to_response(self):
return {
- 'userId': self.id,
+ 'userId': self.user_id,
'dotory': self.dotori_count
}
@@ -36,4 +37,4 @@ class UserDotori(db.Model):
return self.dotori_count
return False
def __repr__(self):
- return f""
\ No newline at end of file
+ return f""
\ No newline at end of file
diff --git a/routes/__pycache__/dotori.cpython-313.pyc b/routes/__pycache__/dotori.cpython-313.pyc
index 182a595..db93845 100644
Binary files a/routes/__pycache__/dotori.cpython-313.pyc and b/routes/__pycache__/dotori.cpython-313.pyc differ
diff --git a/routes/__pycache__/product.cpython-313.pyc b/routes/__pycache__/product.cpython-313.pyc
index 38b3bc3..ea52de8 100644
Binary files a/routes/__pycache__/product.cpython-313.pyc and b/routes/__pycache__/product.cpython-313.pyc differ
diff --git a/routes/dotori.py b/routes/dotori.py
index c7686c0..18ca42a 100644
--- a/routes/dotori.py
+++ b/routes/dotori.py
@@ -4,7 +4,7 @@ from services.dotori_service import DotoriService
dotori_ns = Namespace('dotory', description='도토리 관련 API')
user_model = dotori_ns.model('UserDotori', {
- 'userId': fields.Integer,
+ 'user_id': fields.Integer,
'dotory': fields.Integer,
})
@@ -17,21 +17,19 @@ class UserDotori(Resource):
dotori_ns.abort(404, 'User not found')
return user_dotori.to_response()
-@dotori_ns.route('')
-class InitializeDotori(Resource):
- @dotori_ns.expect(dotori_ns.model('Initialize', {'userId': fields.Integer(required=True)}))
- def post(self):
- data = dotori_ns.payload
- user_id = data.get('userId')
- return DotoriService.initialize_user_dotori(user_id)
-
-@dotori_ns.route('/')
-class AddDotori(Resource):
@dotori_ns.expect(dotori_ns.model('AddDotori', {'num': fields.Integer(required=True)}))
def put(self, userId):
data = dotori_ns.payload
num = data.get('num')
- return DotoriService.add_dotori(userId, num)
+ return DotoriService.add_dotori(userId, num).to_response()
+
+@dotori_ns.route('')
+class InitializeDotori(Resource):
+ @dotori_ns.expect(dotori_ns.model('Initialize', {'user_id': fields.Integer(required=True)}))
+ def post(self):
+ data = dotori_ns.payload
+ user_id = data.get('user_id')
+ return DotoriService.initialize_user_dotori(user_id)
@dotori_ns.route('/all')
class GetAllDotori(Resource):
diff --git a/routes/product.py b/routes/product.py
index d8f4a43..36da47a 100644
--- a/routes/product.py
+++ b/routes/product.py
@@ -20,7 +20,7 @@ class BuyProduct(Resource):
@product_ns.response(400, 'Failed')
def post(self, productId):
data = product_ns.payload
- user_id = data.get('userId')
+ user_id = data.get('user_id')
if not user_id:
product_ns.abort(400, 'userId is required')
@@ -30,7 +30,7 @@ class BuyProduct(Resource):
user_dotori = DotoriService.get_user_dotori(user_id)
return {
'isSuccess': True,
- 'userId': user_id,
+ 'user_id': user_id,
'dotory': user_dotori if user_dotori else 0
}
else:
diff --git a/services/__pycache__/dotori_service.cpython-313.pyc b/services/__pycache__/dotori_service.cpython-313.pyc
index ac8e799..cfe77d9 100644
Binary files a/services/__pycache__/dotori_service.cpython-313.pyc and b/services/__pycache__/dotori_service.cpython-313.pyc differ
diff --git a/services/dotori_service.py b/services/dotori_service.py
index 71b2471..81f6177 100644
--- a/services/dotori_service.py
+++ b/services/dotori_service.py
@@ -1,27 +1,32 @@
+from datetime import datetime
+
+import sqlalchemy
+
from models.dotori import UserDotori
from flask import current_app
from db import db
class DotoriService:
@staticmethod
def get_user_dotori(user_id: int):
- user_dotori = UserDotori.query.filter_by(id=user_id).first()
+ user_dotori = UserDotori.query.filter_by(user_id=user_id).first()
if user_dotori:
- return user_dotori.dotori_count
+ return user_dotori
return None
@staticmethod
def initialize_user_dotori(user_id: int):
- user_dotori = UserDotori.query.filter_by(id=user_id).first()
+ print(user_id)
+ user_dotori = UserDotori.query.filter_by(user_id=user_id).first()
if not user_dotori:
- user_dotori = UserDotori(id=user_id, dotori_count=1000000)
+ user_dotori = UserDotori(id=user_id, user_id=user_id, dotori_count=1000000)
print(f"초기화 완료, {user_id}님의 도토리: {user_dotori.dotori_count}")
- db.session.add(user_dotori)
+ db.session.execute(sqlalchemy.text("INSERT INTO user_dotori (user_id, dotori_count, created_at, updated_at) VALUES (:user_id, :dotori_count, :created_at, :updated_at)"), {"user_id":user_id, "dotori_count":1000000, "created_at":datetime.now(), "updated_at":datetime.now()})
db.session.commit()
return user_dotori.dotori_count
@staticmethod
def buy_product(user_id: int, product_price: int):
- user_dotori = UserDotori.query.filter_by(id=user_id).first()
+ user_dotori = UserDotori.query.filter_by(user_id=user_id).first()
if not user_dotori:
return False
@@ -34,14 +39,14 @@ class DotoriService:
@staticmethod
def add_dotori(user_id: int, amount: int):
- user_dotori = UserDotori.query.filter_by(id=user_id).first()
+ user_dotori = UserDotori.query.filter_by(user_id=user_id).first()
if not user_dotori:
- user_dotori = UserDotori(id=user_id)
+ user_dotori = UserDotori(user_id=user_id)
db.session.add(user_dotori)
print(f"도토리 추가, {user_id}님의 도토리: {user_dotori.dotori_count} -> {user_dotori.dotori_count + amount}")
user_dotori.increment(amount)
db.session.commit()
- return user_dotori.dotori_count
+ return user_dotori
@staticmethod
def get_all_users_dotori() -> list: