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: