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: