From 20c99c6e1cae572c82d60ddff098ef46dfa5ccb5 Mon Sep 17 00:00:00 2001
From: janghanul090801 <25s100@sunrint.hs.kr>
Date: Wed, 9 Jul 2025 17:57:43 +0900
Subject: [PATCH] jdsflkafjklajfl
---
.idea/.gitignore | 8 ++++++
.idea/dataSources.xml | 20 +++++++++++++++
.idea/dotori_test.iml | 16 ++++++++++++
.idea/inspectionProfiles/Project_Default.xml | 12 +++++++++
.../inspectionProfiles/profiles_settings.xml | 6 +++++
.idea/misc.xml | 7 ++++++
.idea/modules.xml | 8 ++++++
.idea/sqldialects.xml | 6 +++++
.idea/vcs.xml | 6 +++++
instance/dotori.db | Bin 12288 -> 8192 bytes
models/__pycache__/dotori.cpython-313.pyc | Bin 2775 -> 2660 bytes
models/dotori.py | 9 ++++---
routes/__pycache__/dotori.cpython-313.pyc | Bin 3319 -> 3126 bytes
routes/__pycache__/product.cpython-313.pyc | Bin 2114 -> 2126 bytes
routes/dotori.py | 22 ++++++++---------
routes/product.py | 4 +--
.../dotori_service.cpython-313.pyc | Bin 3679 -> 4160 bytes
services/dotori_service.py | 23 +++++++++++-------
18 files changed, 120 insertions(+), 27 deletions(-)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/dataSources.xml
create mode 100644 .idea/dotori_test.iml
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
create mode 100644 .idea/inspectionProfiles/profiles_settings.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/sqldialects.xml
create mode 100644 .idea/vcs.xml
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 0fccb6e5ae36b84f805f69df522b7e099a64319b..91bc6a1e03f07c0e8f2ec380f36a60df739e6d54 100644
GIT binary patch
delta 133
zcmZojXmFSy&&V`U!IhJNfq{|Vn1SDTv!K9HKCVVDMs{&!WyYrH$xr#hCoAxaOb+D_
z$q59bMU4085x
z4AL+(FwmSln?E^OM}dno)Xy_8)Kx*Fv^cdWJ~Ks=OVgBzP25wNks&iLCAFfsFekGl
zH9oPlBp=L=2dhiTFUc>;j5kE$Ff%YPa4;}1Fz_-kFfj95GVt%?ujIGfEGVGOUvJ0E
z#=y_)=xE6A7uatv82DfC|KxwSSx{gd|HK9z307u)Mnh&UW=Tef
N1DV*Eg*gq4jQ~XXU}FFP
diff --git a/models/__pycache__/dotori.cpython-313.pyc b/models/__pycache__/dotori.cpython-313.pyc
index 7672caa03915433ba3c9c704aaba76443080aae6..24ffa843d031745d80014b3e1aeed5a5839397e8 100644
GIT binary patch
delta 1033
zcmcaE`b32HGcPX}0|Ns?pH5ze-bCItj6D-~xv?_`vsf}0aZEg~&(0dmX312<31YGb
zb67GJaZNlgEiMMqgNkE#f}|#IWE5rvDdL-WURoE2B2;Z49#pHSA#)LbFqafVkw7rF
z6ho0x=@xfEQD$ypQDuB~
zYUM57#L|-d%)I2H)ZEm(5;sl8TO4_%IXQ_*IjKcV3=9mKjJMcRQqvMkb4oOsig+0q
z7;bUo=am+uB$lKmGlJX$#jFer49pA+44-FAp2cD~nS)u(B#0dL)Ibz1_p*AK@cGXvY#`vI6p1FC^xaBNSJ|vVI|`&
zmg3Z$v|^BJ6mH38wrKU`ts*mNMt%mqV;$Dgs5-Ew;qm{L;LVVo)F{
zC=`iL7GYCil$mVFW(wB7M@R|eU=@%Ja3!|vDvXMgli1yqq!<_&um>N=;Zqrc87I$Y
z5u5ygUCzmvRfR#5#ji@lCbT%U$R)odzbI3ov^cdWJ~PF(iccX0EE1m#a*gdRM!O<8
zki{ro%i&ORQU|$285}A%1XUNLEYDe(vmkDR-2s*BPQe$Qf-g9RTnGuhz#n#jBdiGI
zJWWQhfBiHWUxGqbQ*81rjwq*FOqnT&5WL0Vl30=&l9`)Y1PY}hkoiTRNCImuk^s3x
z9z>{t2u%>7JGq`y)*EC&kvNDCN+U%e0+fJ?r!p`wv@zTeQEc#iz{%Y&*(Eu_Xu8!z
zs}&|YN-lD`G&tSh6X?(E%ACP8pKB)9iqMOE#*<%j`bn{|a(xnDVdeV5!_2Dqg^QI{
z^eYb|YdB+()Z}0;OK&TXO>jGJaoFVMr^Yk&*E(gZfs(
z3=F}{!EC|omduk28D%HF5@F{E=Coug;+}Y3T3-U90-22A4U$3TL)c&~{1eYh*AuM;
zhe2GH%tZph+)@lhg26me3`Ii0LczRJ3|Wjt!ofnpd|;MHFuxQ-k!Y|$kyyH*rtmGU
z(Bjl0m;93aqRh$ROd@iOx3~+6GIJA)D&wxH~B1+yH_Yf5J&_pg&=}B5o{RC6v_x?
z2m*&clnbSTI465B%kr?QFlaLQX|mp8%1oJ@%WPoARwT&4z)&OvB7{MN2*_!inZ@~O
z`9-;jB}JkP3=At7Z?P1o=A;#a9I9|j-evMRW(PiJ1_p)(h6h4o)72-c-U*`7^uvN>y$HrQ?!kloCA
z`Q;E>nTkNsd5bMEH@`Hmq?n0;fk8o`NOJNMRux9s$((GaVEuc9ltJ!R1=#>s!ppA0
zs5IG#-AxIUTu=g-9Tvc03=9lY8G;!n=d*}S-oP%$7&>_)n`i_dLokamy9$FQt6vqr
z4I*w8GE;1;I2B5ZQ;Xt3Og@DaaGb{{gIs5Oi_uP#89gvjye+_?L5Z3MCeTx;FR?T*;FJ6;)BAe2t=@g+&q(kfuW7zhKOQ=?*mTme#tJ$2}aYcCR(j9
zxyWhI;B@kXMUAF8#pF$jEq?LH#a+
b>|F-IFDxpIDU1_@rb|qe_{socgTn{_44LT^
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 182a595eb37fbaf76078a25289f7d5b332f79d6a..db93845922024e631f44b098853a5829beb42b32 100644
GIT binary patch
delta 1047
zcmew^xlMxiGcPX}0|Ns?j$U2{-$Y(XM!Svb5{%lsri>s_1_lWRC5B)=DTZMF7$#F@
zh?psaVkqKG7tj=(yn?ZWoxQX;wJ1JwvJ#UL7uY-o28PcYCi^kjv&66j2~NJiF3Ko8
znUPtTojI5#hAT*H5{IZRYcQK7qXDBS6U022mBH*%3~(!Wf;ozK(>XP{Hcw?@X5_fV
z2C~RAW%68RamJL%TbWB_Z*e-Nq`2glfq_9mK|!HN6ePi1P+D?}FSIzd2;wfi
zg3=NZ1_p*=69$IKft;FR*ZCbT@;hASce=pgR3yQ`z_60RPm^!59!qEp$nINgsTBpO
z$tAZ~bMsSDbBb6&hO&F+m87Pp78NOic%t#~#U+U)naS~qB_&0fNu?#J#qse)${@#q
z3&cp#KNlifro*OfASknO#x@d&&&*LF^r#?m|2|}izFsL
zWZ5PS3YA-2o_U!inTa`>RjEawI1MS1W?*2Lypwe%dyyQ-V6n-uZ0aIK3LrK}K`|(O
zfCFLjTs8$pnaTUuWa}+23#oRn-{F_J&To8)-*|)jWqz9r95!HIgPrTA$z7xZGC~zZ
zsDTJ|5CMvkA}tV08$^J@phySA0!3hvE{KKZTLX|7hyXdi*ouLHp^ahkOHKj(oDGo&
z*pBlZ;=2$LbI~F8f=S$EvG~iZ2_Ko5S#3eyPXv447UC#_$r@aKj7pQsxtiHP(OD!m
ziCdIWWwIEzTmm>~LDu?dvSD>KDEhEE&I05(5TOK$3U;vLzOpc}ib5;}$$*l;6mAC(
zuz$f`)dWQ~Yf*k_Nh%~RLB1;jsRaieL@UURw>WHa^HWN5QtgTy85kHqnYVcDWJMkg
xHh$6my3V@E{yfT(JdDna6C^$}fauT63`|NNm_W=AGLt)abSB^6k!AsT4*(yW;AQ{-
delta 1300
zcmdlc@m-SlGcPX}0|NuYqqn&kmJ@j;8EZDGOEA`Rm@NVs2`2L1J?1Esmhn
z$qkHgY;2{)sYRZXpE4?OK`mzZ>@-=B$(|#axrig3MU!>&F(zh4)*_GxCSPP0XLOnT
zlDUL+C4-+P=j1D_p^T!Feb}U(Bp4VNio`*L2#DZ>5!?(648`&c3=C}y4_NuGvr1oN
zm7d{snN|HG6AP>6XJ!UAjn5!fk@)1NY}=GTns0G==4F;-Cgx;TrGl*uS;=^dqbRko
zG_xo*W%4%mncTP73lb}H@)J{vL??%Fs7u~rNl7e8yu}XkOnhcaF~}ETq!GeurP?I=}HHe&Y@9m-%fj
zaM(aR1M-%iCU=n}$UjmbLK;NKfCzpD28LT~sTBpO$tAZ~bMsSDbBb8OV!vV5S)MAc4sW93pPP%)u;{
zj0TLROrZE@V1OlJo#p#%m;*wvIUzGV0djL!oa|w$yx;Revt;qBcRk-#0K&?S7J&^dt-*
ziZ5!4^gx#Cg9vb}uzTi}q^7496`6yCKuHokR*XOrAOhrl9I-NaC!370DJb}3z`<_{
zag5RAUQRzomC1KFn`J<8S_BG{TLSK>C5|~ckU-T-Pc2cKT+Jny0L~^5=d)o=Ss=|t
z*j#80av_LN0fiDfINf|@VPX}9xB?{Or^!G0CzpdS*yENU^`H>F#afhKT9R4>&X=Hs
zR|N8B5l91CDBR+($<0qG%}KQ@a$#U#0F_Y1=O#CDYq0T&^yhWvOka87{tGcPX}0|NuYLcP2UmW{k87#TG;Ut>&Q;=aXRTAW%GpP5o5GTD|ziBFTc
zh?jwZp-3D=@J&u+>0$-5Cx2lvW=xr^!5YS5d09wxaucf)leE(0W31~9)fgBUZi&Xn
z7ndZKWG2TamXs7_CY6??7RSdIX@ZQ=01>JnLI6xmUd9%~1{M^U%)uUJsSh%M-6=mm
rCp9sz$PmP1Ey^z~Ni71aM>XRXhfQvNN@-52U6JMF>Fmo{Kn4K-yZ<@_
delta 215
zcmX>na7cjnGcPX}0|NuYqqn&kOdEMmFfy*(e2p=IiMxRaoFVMr')
-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 ac8e799654a9b294aef182922bdc9f7ed186fe29..cfe77d92f41c9368c77fdc739d979d8817a240cd 100644
GIT binary patch
delta 1709
zcmcaFb3lRbGcPX}0|NuYGQGTvgB%n2Br*aR7#OB91TzFPdNX)26fr1(*i7DxMU24=
z!OY%FUd%1-=oLF_itn7L$rc9F`GOII6
zPhyjrtjr><%HdbU!@$6h>EOiApvioTDKiBesJD1hz!4FjoL`z(GC7PzufD3u(=XUH
zC`7^2FT`J=v^cdW9->A;1I)=x(NTa1Ks4znBp0P7mZYY{Czj|aloo&z4~VU)5a#F;
z>Kd$|VFlM`g{sjCS*I05Ydu)6CJWekMW6t=#f4CIiwmL(tcdRxYe7+FUP%!PC_(aq
z2tE+O4Yl?exm%MRQO~sR`vSpJaQL#
z4l13=C1siOgRZ7z&sxn7@Ol8s<+B>NAL{
z1IhWagtB~RVDM#$WcdW4K7*)emX8b!fSx^@a7nq0U8NCp%@
zoGGcvMX9-|c_rWgE0P6;pArKDgC;X17E~t}u-h_9PhQ7&j(>s1&u
zSs}@)6qMj!_qV)lTkv|>8ihC8ro7tF0Ch!?I>;n$tZo3s57@d}%!w%}MIhHeqMS1`
z59TCfhiHRbCJ2fgW(J1IHC*~^pd48|d-6uE*#Z|hq>4mA{$VRhEh#O^n;gZxLK>bl
zZZRk3>z4G4=7A|K?EPzp9Mvkc_mjNFs&aY*`!GcYjxVo}hwQwYIsE5tepko}w~smVpDxv6<2VC#z{K`xU9
zMFcZAXp7_~8}f)vj^8ihC8ro7tFprcR(a#E23$XIS{!GL796vzP}r-2=Li!(D1=00Rssen`o
zf*b^jG6jXn4m>(+${_wiumflD6!Tr@SHH-wet|>1NE8$avb-zAL5jgKaEm!HC+8M>
zNq&4vW^&2o2fU$ddLZ3Kldburq_qt$^Bb-*U0^buXCluuzLlmI`3)~{82-G(Z#cP_
zFF3roq^L+3%y9m|
zz`?4qLijU?g35ESYJ3o3U=#Yt#KdX@7W)ihfjtej!B3Oz7H@8TN@`BA9wdu^qu>^6
zT25kdb`i*KNce+Xg670q95%W6DWy57c16~j3=9mQ%uo!9oe#{6jEr{~RPHj!-enN{
Q&ZNs|^oc>2(FklU0O#)#IsgCw
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: