From 6e240f22962b12083dd1bbdeafb4eb6493dd97c3 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Sun, 26 Oct 2025 12:55:45 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=99=84=EB=A3=8C=20=EC=8B=A0=EC=B2=AD?= =?UTF-8?q?=20API=20=EC=97=94=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit πŸ”§ λ°±μ—”λ“œ API μΆ”κ°€: - POST /api/issues/{issue_id}/completion-request - μ™„λ£Œ 사진 Base64 μ—…λ‘œλ“œ 및 μ €μž₯ - μ™„λ£Œ μ½”λ©˜νŠΈ μ €μž₯ - μ™„λ£Œ μ‹ μ²­ μ‹œκ°„ 및 μ‹ μ²­μž 기둝 πŸ“Š 데이터 λͺ¨λΈ ν™•μž₯: - completion_requested_at: μ™„λ£Œ μ‹ μ²­ μ‹œκ°„ - completion_requested_by_id: μ™„λ£Œ μ‹ μ²­μž ID - completion_photo_path: μ™„λ£Œ 사진 경둜 - completion_comment: μ™„λ£Œ μ½”λ©˜νŠΈ πŸ›‘οΈ 검증 둜직: - μ§„ν–‰ 쀑 μƒνƒœλ§Œ μ™„λ£Œ μ‹ μ²­ κ°€λŠ₯ - 쀑볡 μ™„λ£Œ μ‹ μ²­ λ°©μ§€ - 파일 μ—…λ‘œλ“œ 였λ₯˜ μ‹œ λ‘€λ°± 처리 πŸ”„ ν”„λ‘ νŠΈμ—”λ“œ 연동: - refreshDashboard() ν•¨μˆ˜ μΆ”κ°€ - μ™„λ£Œ μ‹ μ²­ ν›„ ν˜„ν™©νŒ μžλ™ μƒˆλ‘œκ³ μΉ¨ - 였λ₯˜ 처리 및 μ‚¬μš©μž ν”Όλ“œλ°± Expected Result: βœ… μ™„λ£Œ μ‹ μ²­ API 정상 μž‘λ™ βœ… μ™„λ£Œ 사진 μ—…λ‘œλ“œ 및 μ €μž₯ βœ… μ™„λ£Œ λŒ€κΈ° μƒνƒœλ‘œ λ³€κ²½ βœ… 404 였λ₯˜ ν•΄κ²° --- .../__pycache__/models.cpython-311.pyc | Bin 11554 -> 11842 bytes .../__pycache__/schemas.cpython-311.pyc | Bin 19167 -> 19810 bytes backend/database/models.py | 6 ++ backend/database/schemas.py | 11 ++++ .../__pycache__/issues.cpython-311.pyc | Bin 14838 -> 17180 bytes backend/routers/issues.py | 57 +++++++++++++++++- frontend/issues-dashboard.html | 11 ++++ 7 files changed, 84 insertions(+), 1 deletion(-) diff --git a/backend/database/__pycache__/models.cpython-311.pyc b/backend/database/__pycache__/models.cpython-311.pyc index 2a4b533f3d28e1f1ae0d1c4114e1936f6c2241d1..b9ca9e27eb920fe03d19d07aaf4a0a7ef1b39017 100644 GIT binary patch delta 610 zcmZ1!btr~!IWI340}wo#^*6&sX(Qh^A*LkO$p`riH=7IFu?VxIiY;SgU|0>r5D;ZG z`IfLIw>1+(Dhm*^r|?hyASyfgyr@{c4Ulh}B9OwEDxA)^MsOK3P#+LO_1QsWQ%bMgE&Vi1RQq zXMSOv{7b@#(P?s>y2|E6$?Z&@x5Sh4a|?1(OEUBG;)_xXOH+$WQd8m+OKwSFl}M_L z&rG=`gd_)K=BDPAOqP)GWZbejN#-9@puFmgv;`3t<@Bz|>0MxvzM-hTKx_s32B{5F zJG?F$x?eGLzo_VOMbYB|i`)$vr5SDu%odofP+n-g#QLI){uLSh3oMd1B;{v_Ent}` zGe_nEi`eE^`Qwc2D}lcD(-Z|dUTU(dVjbhm%|{g3nHkqjKBHp5xP0?pl^7<*4U?nP zeHk}SUZE~)z7D9qNCreCf(QW+0WzZ~6hugZ2q_RD4I*~Jh#iyvs9#{*x%sRHE2BJE v6jkLf4x8Nkl+v73yP`vzKWb((8CfwVGJasdPIkC_1j~FumamxHr!xfrJR`2r delta 402 zcmX>UvnYyhIWI340}$|b{>}KJu#xYZ5YrQu$p`riH=7IFvD90o@TV}Q3a2x!5m?5| zz_1#KAt1_{i6Ipzo2s17m?F4F2u;=oEGwMCxJG0d6Hp%zL-pB$Wf)S~(iu}VfaZ## z>9k7`3ue$1FY*VfFWOur!NEAWUebZle)9pz+f0+6$apd)Y}S+g$F#XY;Rqx9GN39y zP0`5*B&8;&D%CMg-uy&~otbg<LuduAN+^;mf#g@(B%D^VJ|zWk5tC zh!6k~ATx?WL4+iTkOC3XAYvPg*fd#2^8(|x&2KeX8RfyEs49PP*yQG?l;)(`746?F esGZGZWWt!p_<;dC+2QgLEb|3fK4) zxF3lc2M2{U#C02SChDekYK$(T8#4w;%7R-5OBOe_vB{z&Br`LZopWJRVXu9ko_D_I zoqO*&_x8sl>?a?K`Xn+^67ZV!&DH&!))l2^=gyj(YQ|u<+UQO_t`>xoc+X!|CY4Ys zcsJ}9yah5_q@{7qgIb}S3TMl^SF%|w`oZZE7wX<+bmmPmDq$i-V=?E z%tbk}cw7a>?UWa54sT_JV16lZUF^`Q9;jhZN)FWOE7f+ds>&v7Z%RHs zp^|}$`Y9z9)+MaYwWEL8Q+^Y@!N*U-@y*9oSRuUUuc}P13P-mDzB6uDZ61$*qp6{} zUT)pf)L5g)d)wreR@qzgdh2+?{|dG3HG90{F;8e{Hpq?8QDldmNoK=g9Hk#`rJSH6 zlp)Mnpv_BwGf5*62grAja0n8M_0jcY66)}7sS5a$Z>x$lf+II58v9=M*Nr7+1jQWu zj*2-UyE7;z`NL1>1|owZ+RjnY8A`_hL!ZlE(!U`nqMb1+WZj7t0vs5uEK`PBD|Kmau0SgY+PUR zUk}UYTe$Gkwi2^UzrX+P#|KwUAMj6~JH2Y!*MmO_&1SoD2x$&qGGFv6c?7<43Q{yQ zar-ec318#g;zo2n@d=4Z*ql(D0lR_UQPDt6z&=^=JHHi>SJlpxH~;?js*htC~W=@OZQ zyYPo&7rVrFRkib8*j4oX1!dXg(q#%E+=J8EZ?emLNn3KJVuwhmAW$I{4dDi4y7kgE zG6@f%F1Mat;}ciAV%P;*m*FPK1jf*~NKgET-Q=Uc;_B9ZNj{#Rr@jGmt^_s&Whpw% zf&+(%9;PUQh5Vqm?1~{{RQ`k577y}R2mup8zAS|bM z4-4>NvL4#-!Xho@GkRS@<#BA@|y9Y@TKwv@fq{sl^9CJ z`%UNi@9=zGLzB0yUM^7n#AjTT&=R*SFkRwNr)RU|`@&MZyJd#FvyY`_2Gtwmp`rA$ YMa|aT7nY*0eTKZVk0mLPw)vv!9|Qv#r~m)} delta 1451 zcmZvbZA@EL7{~9^@*=mcFBY{e>xy=5=~`IFD1$-EI~&`=crh`Xd{NuQIEe}xzi3e7 zj2{rTK4WBW!B5~aWW~FTh2R2nk|oLpvdo#Fb!LeeiK)>TO?2`6&xjiICij zw8mE)Yj0Qlk7-|L^jLL=^*nF1X|LEi^!akWN6hyQ>qO?_UCq2GrV}%K+7s)Wb-a-M z5Lbun{D{kM?-hn);_Ye!tU#-Pe>1n%JNPx%9KT$j%boc~onFu55t}xUKc!1{M$w&f8l+V4|pt`cIRlFJ{_6+G4oNN z5*Xl~f-UM%41p1zEO?vSeGYBEzk}8fAbv=|Z|O2&Yz8bqKYzZdf(F* zFi(RT1#?JbVJIwBkHZH{^6tVo9Y>Pd4@IXa^Rx)gac^j&aE^!eswd$Drdi#xL??Mh zwI_-{5$bGlP#uB_%<~_``)G*wgqwJ1>!5iQLIohtGRBs$RUO7R@FhQ8@)Qm8wQM`5 zN*dH81mG(!3Ogw&mgzN*Aou}r1{mYzu#3j{zS5w29s%GRj+XAD^RmYAusKm{;LbWH ze_uM0H7Vp3gpEdr^}Wd(-7K$86XR|3_L4yp284F^HlkB zG_{)ZgZ%jR2WT7?`xRJ#UorR)kX>^{rgd(6!h8v_X+Z9AnOiFyF8M9Dle^10-IHOI zyBlUP1b$ce{fdJ$E0-*+)C?0)E&_XGO6Xo^q%d<%gtB>Wq|I;@B5+sX(a0&fDvx~4 z7~prKE$VfsfPue@meF-7mRBXRZa~-|&%THuVB#OE+Gvq$st+0F5nKR1<%Q~Q5fwEs z-9!M$B}M5zz$;N7_tosAn{wTB&2IXLD{C7}OYi|3;0y3fxt-6{=F!sMb^W>4zFOB5 zyntJH|5ewNEJ9n|3pBwW*S(Z^M_7VfSzjV<^~HLd={Dv8UhHv@lMx5!m)*~o>YK9> zZuW0wYr}hS`KKO%`6w_5$R9)Yylm}Z#AJ7(+hqU9W{}q{FGf~a7E)G9)<7OmX5Mw1 zosCZGvY0G#QMy;eeW&$AbcOl9X6_`i3v@sv~%vWal(hx z8~c}Y?>YCJbI(2Z-0S}+<40KMRfogIKs$5(s~zFC)6P~#J1tXHeV90|QoAtDWO3 zg@rkt+Fx-TCV;+L(6>k{7HWkiVAJ4ur1~o?cmrRfK}1b5$}jOr4Itl~V?17hCRdPy30g=y4&wkZ zBjhzK!)_^nVgc|PjkE%-+ld^OLcNL-mld)~TjsdKE}r_zaoJ>c;iMO|YlT;a-AH}| zp%FnqpgO7N%dtx>u0ZNVgqILrMxg$z1S%*#-$801@1+RhSuefdruLVja(3O+7eyT` zI9EM?gf+j4synr7u2+Yja0ETng>Ah=Q4L3_-}6xZ1q6)Ub)Kw8Iv*hnxxxdWStByG zd}PQ*;A}&Y9|3#;e+QXN0ppl=^4rI>nEMCd)&Ja|afKUzOTL4U_3!ht6@?Ahr+XMg zDxi7GE1%^wc^%m_wvS!b`M4qz>a)&Ey*;X-s01Z3g-8H_#@>O{LI7Rt>5mRXWL4IM zUR91Nxu>rsU}JOdFs82VH1&**LEGw5KQR zxu=(=-e&aS`v^3(-a>uWHG6vG0kyY3rgLzha3exS3h5&0k3_n|Jv((i(yORCzf<0; zSTSZAAzn>;lkPS;1=&Po2?7tG279irqhTvZa<^|4wzwKALHvUTJ?z zHm|{%CL-^Gf~D$~EYZV*mR!T~aR|Qu4sZ;!j$xUz%n&z0?~jD7LJN6Lvb^@CXMwh& zy3xY-S#h4$R^kqsC%L)T=zFXcuIBy15Zi}t(nj1W=4Q6d=1Ah)+4}{xEGNe>eGV<- z^K2O6L)0KLhD?3nq0wO6`Ir`gUb zYOD^Y4+)ZOoZrOw8MQ8_j$r}}`R;x*gvW)dECMODGU`I@AC}7Dn8gpV+swqcJ=|ty zkX7yZY53|;v7BVvka_MsdY-vpdODa8O7j8pAUnty8iS5_Cn&Jt)~C;nq<(V3n?62~ z{`ezrlQ%Vd{FBu2U!^aex_|SaH+}JR`t0GH(1Y_MInt1)8VD`FF;HlfUjkGd4_5l> z$b%1$defIqd((&BeQ;09HeQ)B6~d5go%L7u2EomOhSB%l4EY|_h8D6Gj$Q}TA?9dDR z01iA+X0Wc1A%LfAaB((pp}awI1SA9S{!@Mjki9fKc(rTIt!sxfW=3=*E#(&?$?Bzl zvn)+mmfm$%T;me$?sIz|pyTHDDVp&2g1J_F5 zU}s9J#>JWXMalZrGquYzR-w?AVGOX^9zAq21?~(Zf`_wlMjW=Cv>&q{b)0aFI_}xM z8HTsIGbYaAzFSz4sBD`qT%0UioS>ga858Sp&lI{&@sA!o%7$R~=doQ0qD;rsWK2!8 z@5YaFaN0STbPguOK@fbDDMGVAC~dG4fAD?Fxw?(H-Dc~Y$K75L@O0X^JH_+X_)K>e zut@t%YwCnMfjXf7WD`Ir*s9%Ha%72-kRrZWy2Ee>7J)Lofb_@V^`JC|rdwf;;L?6ix1^D>HCPhjl6CI ze0acpe!snH&3+*D(pQWZ7~E7Fjf*P#k7nC-hAhSjtpNWOUySxk@re8~IR{<*9ipri zw5E=I4eJxk*ZNHTxucqQ4Z*KL@%@VTDiV&SX|_4ZHfKcb-m>zrwVlOXMVxUKWjG}6 qIb2CcQ%0aHGc&&=W1*zTSPL_=CK%KH#WAK9RA{0?RF%P@>-ayl?daD4 delta 1890 zcmah}O>7%Q6!v<5{FB5@ZLgiicKjb_)BN%qQYQhS6k0?|p$IUv)+ReioO-j->>8** zL6@69H0NE@+AKD~MG&71Fi z^Tt=N2!Gj;>peYTAAHW6|Ex;dR-{jeZdF#M1fStE0?nuytHrn-Y{pHsrkaUbg0Dl( zq}f;N<94`t%&J|oCh3ne>|Rn8BP7Od`?G@jp;(rCNo;L^EeK^f3kf+) zkRv1rDbxOOOeuzBBSG>;lH}PPVN@>crS%`4mP)2B%h#ZR&#(*r)rz|t#dL>2MaZ)u zF(a2CSmx~Z2LpK{3;YJz7r?XvDMOgT?uv0_hI>b(jI8YzW=j$el-Wm8S{~jl$$s_R z6)0DRa>rRhE(b;o^(CKHVK?PvL1M?1Qv1A;6H8?v>&hFemSa&BZH3zp(Qa7K973Lb z5*k+1Xl4)w5DExIb~`jDOtf=hO;k$g(b$=uv4uy#bVa?{)B^NjbfbeR2%QR#;W7ze z2LN*3N5{c-yC~6(dc(F`#HMrXr=A~#$@W&{Q@;|!O;fCT^x9?|&BqZm1Q~(Xu~l5iCbdt z^SE^ZVTVPd|HNhm*Zii2&?*AB;kPV$vA$}xs7?LoMUk}RLFu@rXE4r%-Q(*@Et^nI z*p-aNlH=7+U?$EFKg1KhhwmI_L#ctO5e$t2Xko9*7t!(GR^6`FhM_y84xsN2*n6pb zoXo5Xv9 zol)km=Fk_(rGFJU)DZZ@ypHuk^KUPa4X0tPyCOUi6kddhVcX+rjX#TvnBUQZ{~W!6 zzViqd5G;0QJdx$olH5NnbyHv0SBOd09eSx