From 2d0e602ba15c62075e7fd15593385a522a14cdb1 Mon Sep 17 00:00:00 2001 From: Keannu Bernasol Date: Thu, 9 Nov 2023 19:52:03 +0800 Subject: [PATCH] Added schema documentation --- .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 198 bytes .../__pycache__/admin.cpython-311.pyc | Bin 0 -> 790 bytes .../accounts/__pycache__/apps.cpython-311.pyc | Bin 0 -> 573 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 4479 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 0 -> 3397 bytes .../accounts/__pycache__/urls.cpython-311.pyc | Bin 0 -> 519 bytes .../api/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 193 bytes .../api/__pycache__/urls.cpython-311.pyc | Bin 0 -> 382 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 196 bytes .../__pycache__/settings.cpython-311.pyc | Bin 0 -> 5915 bytes .../config/__pycache__/urls.cpython-311.pyc | Bin 0 -> 1197 bytes equipment_tracker/config/settings.py | 15 + equipment_tracker/config/urls.py | 8 +- equipment_tracker/schema.yml | 710 ++++++++++++++++++ 14 files changed, 732 insertions(+), 1 deletion(-) create mode 100644 equipment_tracker/accounts/__pycache__/__init__.cpython-311.pyc create mode 100644 equipment_tracker/accounts/__pycache__/admin.cpython-311.pyc create mode 100644 equipment_tracker/accounts/__pycache__/apps.cpython-311.pyc create mode 100644 equipment_tracker/accounts/__pycache__/models.cpython-311.pyc create mode 100644 equipment_tracker/accounts/__pycache__/serializers.cpython-311.pyc create mode 100644 equipment_tracker/accounts/__pycache__/urls.cpython-311.pyc create mode 100644 equipment_tracker/api/__pycache__/__init__.cpython-311.pyc create mode 100644 equipment_tracker/api/__pycache__/urls.cpython-311.pyc create mode 100644 equipment_tracker/config/__pycache__/__init__.cpython-311.pyc create mode 100644 equipment_tracker/config/__pycache__/settings.cpython-311.pyc create mode 100644 equipment_tracker/config/__pycache__/urls.cpython-311.pyc create mode 100644 equipment_tracker/schema.yml diff --git a/equipment_tracker/accounts/__pycache__/__init__.cpython-311.pyc b/equipment_tracker/accounts/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d605aa040b6d84b9950525d37981c597610518a GIT binary patch literal 198 zcmZ3^%ge<81P2cKq=M+jAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnuSi#`n1G`E ztkmR^;uy~m1=k!PE3+(B!6e4Dur#wEH#M&$q$n{tJGDsH2}I?k#H7L`;!7YhF^S2^ z`K5V46XN4D^D;}~V%&|s7^dTKY#B%`+a^+KCZ9#LCJ?NPnbafexlQf{TD3X zD=-HNl%&9kPY7ZoHMr@U8k?!bZQoYdqIT+V*LMjR@DQkT1k`2rsR{5|%~pJmnX_K! zo#-2MUbixrd8dXtrDiLty7vsmy)$&jMB1-%!3zWtSM?|H$*J#@}gFSw`wpeo9o zV?1uFv=-AS%PY#vfq_pb_y#k5ixNd*$ic-)U2$h@OD_zwh_f)1{V?P?ty08mVR%qQ zX`2zQDkyE0Wa%eZBFFiQ>2~l`t%(` zy*uqo-4&b4#fLBE$}CJmNCVgERc&BYuWAFg>Q!yvM!l*Fhmg$${BMqvUl{#;k@A2z ZNBti#{0770$0viYu=O3b>Q42={{U=T$1DH< literal 0 HcmV?d00001 diff --git a/equipment_tracker/accounts/__pycache__/apps.cpython-311.pyc b/equipment_tracker/accounts/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a01fe93c51d155a4fe85e6f779822d49d2e7ebc GIT binary patch literal 573 zcmZut%SyvQ6upzAQu`1QEOa5%Wfo@TLPUgCtB6tr>%tHiVrE)W(*V|I;H5f_v;vkC(vpr9fG z>?~46BB&A(nTHfD)eXZ5?Z8hQZr4apx4Vu)E|tDRsO2jSvs(`X=fI>EiSl|XZ^^kR zkFl-yDaKI&W2O!*j!PI1LfuN46+%0DXa!hj9=H>mNSu3y8NcBCyt%ENdQOiTfv+94 zYfXzG^P1K+wdNo+-9EL0wx=6c)Z1wAViS#K1P&5L%dVyAuInrAjmIY&Cy4>S%F^&> zO{!aCsWK_94)^);%9*w$i%~Hh05|gZ%oD2;N3n2;p?Q8M`QKe{nYDb>{xM5a5g{~z Z_3`g#x*(v+6#l0Bi%mMrq*f)}TmLUKD literal 0 HcmV?d00001 diff --git a/equipment_tracker/accounts/__pycache__/models.cpython-311.pyc b/equipment_tracker/accounts/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1db7fafbe0b334dfdb41a89ddb1a15f15415701 GIT binary patch literal 4479 zcmcH-TWk~A_0G$lG2__52{<7O&VvO9>hMS?tq^KR!me4!u1L0Yt*E1kXOcMhk)0Vs zHrQ3vMyiY0C0bE|x?9PWC{0DA_LJXARn^aNG*zsTB1NiJDt|`VkBFc4+?jZs3DDAy zy`DL9?z!jQIrrT28vnuX_aSHlf4eFV@Cf}Acj}GVLAHJa$U`I{iAbXikst_+lW8(T zB`6EuO{dayhDk6Molbi)-h|h}nKYYVVV)<=Wqb)Afk^ZolDtbuVrA+Hh0s&D?UvX_ zBH1f5PY9sGZ8wQqLQepFS|^|cFEL{%>U)kUQNr|Oa*~`@0pkZJRZS6-+Q+J_;Qm}r z)r3rHS`jrF`m7=+<!@v!OQ;F zD5$A~=7~fAE6MZ?zhKsaBmFs$Us2I_loufSl(9nE=cI%@^Xo1Ee1vJandv1w~ zOo90dNpyj*AoUgcEmQQoK?lwm)z`vLi79y8?*?sqMqd)K=l_Pbz}zXu?i5WzFumd} zQ4O4Hrc6ETF#0Y+4N6}sw_C&CX5O27CEb?a#@qYFZ4B* zH2JK2+hJGnyCZgcd1K^<6CWwLSvjex6Y=rLNE$G3ok;)0$fx<#Tn2<12Uoi(E8n|> zA6aQat`7*<31MVHOeS;rEUaL=Xl(8?vq_kiH6cHj&WVzsR$ zA71?O;_r|C?%3mFk58m`6+6Auyh|G5*Ib=+ok zkE?)FQL~PFfI&O>O>2&FX!m%z9=kz~Mw7@@%5DAx%6hvIfj&W5YM%N8-6lw+`5QBK zJ3;}u&3qPHiPZ{33Khu5#1~d(0Q0ADSS3@^Wq8o4cuS753U(gTo13%@$)w=ym2OP( z*j{0JAau)`3~rF0lNF^0#-a?&meW%vEh^Kh>A88^deYiVN;Nq_NTx+q6$BM;7F+A0 zas)7I>Ox?bHDL)3!if5F0NabGMtZpBZ$j@Fp`+`e=vpYcGQN644@E1X0V6a}8mS+GTdw0PwwqmG%&Ualq4V5Y-6iJ4Ooeje-LrAwET5S>IGj zfy8Kq3=XtuqftWXh3P7u6|r<`a#Qe9i*KQ2mu4NR#orG6i)eHIfd_p$cu1hXJp6dn z#=u>aP8f~`O;)hh5d_mG2oMhP5Sav%7lcpqVj4>#2ucK4t#efHzD#atMpQ1RMK`&WDnP!6z-0R38F5;+*^gmPc23EGO=+Jg=W*A+V>w9~wj{u2 zV?ebw`y<c1MzG6OZ_fCDUZ4tHMxEogt&@&Ti{b7f3#K3!=( zZ8V==yiyHDmOVx=vNEIxPgR1ajNqxoc+H2Jdoa0sWke62sRYj$!842Ts{e55$A*INA3-J^uMACsN*#+Mad8njuyoxf)`>R1j|LdgS?(s;Oo$X}wsmvMOFkxoF8cr=+r)6=KbOJ1lqab1U}^&26%T$ z9D^$uG(s@vtZLGDwu-GBXJWhA(eyf=gTX1d)g?$OkR!bQr8~>BYu-r38`%i7mFSI7 z>w_QY@AU8FV0I(8{{g4B$11@-BiL7B_KsIuJD_B1IaJ~{AzK&L16^x@u9f%oKvyL& zU<3x%0~gi;7b<~^M&KfZXYQTNaL3pDdU#+hJWy@xTxoq4{`;&hWoi^^JNE(+Z8_pw z3zp(F7Ihyh#SQ+*2H&jjk5>3zgYVV(-YVaEfAsEXh3_!<4xR7V3>_}Lg`kJ9pzUuf zXm~Sp@WF-k(22Fsi9Le0oCHBzEI|R5hC$H7U8UiBqn4bp3g2h&eLCL<1)uF*P-v71OGMgQFR!52sZ4zDdp~I27A$}D_UThP8M0T#ih1*N^ zf?W<=RDKFwTz#nj08pa{f~cYn-F;QjS>1iTj_0(FTvrwK=bH%dtMG@0Z!ugtSs@M@#K9WbNr0jOK!PU2E{a9Aw*4Og%L^m` literal 0 HcmV?d00001 diff --git a/equipment_tracker/accounts/__pycache__/serializers.cpython-311.pyc b/equipment_tracker/accounts/__pycache__/serializers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5a7eacf9db3f646da193391be2d90116adaa6cc GIT binary patch literal 3397 zcma)8O>7&-6`o!0QvB6Yq7*q&Wy(Lb!?t2$z-bXTNNYQEfwF+nLxI9M6on3j>cq)CKu_(VD2g6d1%VO+_|#Kx6r=)%PknEeD{5&a z=y3SD{n3-6-fZnykJY%7?6`t=w%= z9QzNdixQuB&!y}#qozl1Q)Ziv{Sjp#A4PdYlA`x2wCUN6x(oU=sQcFVn!4O_y+#cO z!CS^`+J;L#&#teacI+t7VYM6z ze8w>Dv`h!>4TAxs30FZ$!K2t#_fxWm%YD97zOZzYHLA4Yxl30U=gJOn_FX!6eyMz? zWjAZI?kzI2@*!pOm+(=ymT0Ijyg;*LRw|8F9XuQYM5(#X75pwX1{3As?;ZoPdGPDz zrrT{>gHKXx3HY!1jmafG2IL-ev~Bv~XAK=?QweiW8s5Sv94;iG_@7Lpt=t`6kT z#MxOtJG+xDbh3rbD?LS4uS-30H1)L;9qr7n(C&YQO)xFa7{Nn`sJ#cE`Q;%*AQr0% z2t~7`&*g2v&XW*7L|27HI35y?6|)pe{hj=Id|L)f_y%-7UIeL&TXF#se%bLTDuzo-LymPlQ3r6F0+fm3hjpH(Q?JK_v2Y z(=jV_wc%J0?x0#@HpF(L?yPgw_0|DL;VSVNe%#jwN8ziN7lcThje|3WXky<)f}miN zNHFRa*c7ruSeQfEcYvVWML-?G0)nt7OXKsyFsvNxG7P}8h{1nPhY$I!^axV$2C0G| zXw~rZAeY!=L;8dCYw5ncA#EM@5gNmJM$h|xEJ-|!(SF;AZOGBnlt}&EQ^ZSz7KBv8 zJV#Cw_QU&%hau8$)dOD}%Fs+|#O}a{C2go4MoQ=*8FB{|gxEu?{srXK`^wLhHEE69 zi+w=WBoEJ_-?rg7$hBMPP=5HiG2{{R<3ez(cv8ho5ZN=p^VkaY7_N$sSyi*X(l7>< zh->c$r3LU@W~{*&9v9D>F4Ui}Kp9kMa0~gw!i@#v%GL6 zDdUN-P8CPE;!PZ~xAQnPCqE*`*~Xq!x=qw^s6=+xJs zJDl_+7`k5qdA3Qq+VQscaQ)%WeeEptt;yioR=W9Pk6!=H>!0X5`BysmSK5i598Zou z&CGtX`dHb?%y%;LzUa@MYI7a!)gDojqXY7^@U2ea%`fll6fSlO7yZmPo{rCU#^<|Z zGyd%S7fz>iqceNc&%L`Flk=mH^ztxP&W=8V)>FX~JpY>^xyfIxJzV>jR`{n@*iv`2 zGmt0!#2FVs@LBE$e-Tt_vo$ltR9#{W1?H3lI_hM4+eQB2<-4}H8?Or^l&iBZRWEW-o14SyW zp6!wUj|7zi7raoM;p0}d0jMeskmWK=I{bK8^p4Kl3~LEHftKkYI7*cUqYT5FeHX=} zjKY;+nZb1cE?yr7@u7uPyCiM~Zg5SQikiY=f*TwYk#qLIf8AsDPfKRYTP=m9!svq- z!Y~Nc$-Z^VvmLiY>y?HDmqCViZ9ZwSWy5X4ZNsdz9FvuV5yM3Bq7Dm=%QC2&!f|j> zWc>@GTM8~T!5smMFxRf*P3QJO=nF&)6@}-CH-gL3o9rhr1~KHm1{987lDgzQKia$G zvLEeT@_j$ryX1@??MF#o^+}|6N!gF~F8Q_}?OpPkAMIUI@}s>=&im2cOQ{lGY>uY> f%>1rU?H@MCO-caX7s=L4=foSksMtS3D`5OT_QGN- literal 0 HcmV?d00001 diff --git a/equipment_tracker/accounts/__pycache__/urls.cpython-311.pyc b/equipment_tracker/accounts/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a1c87ab62757c1e4bd3f3718438ae96b6c68898 GIT binary patch literal 519 zcmaJ-Jxjwt7`{s`ZM8%}a4)plW-ybJh=bTc5D}~tLPTQjsEPTgm!x8+jvd|n2NiMh zKR7uxkfCICaw~M}$}fDw8Ho6A6e3~Vk-bJBlvEkToL?i?xkuWV7lsbo;s z@)RK@Z6mx%^Ok2i5oIar7OCwAjH?lMg6{fKqT2W2sgg_AsBL&HUp0L%&@~f+kQx(~J6^e#U*9nPH$GH%fH}kkw(OUA=x6S#6hjVS^jy zE#o_fS@5XN7LBWL-q8)y^dk>0WQ=P2VOrRCeHuCJfXl#=eOTaw8;cm@5h@LT>j-TP z|I%>|Nh`gh{zkvqZ$4heaygO9F{vb^G9raVW4O5;%hg1##-x^z+E^0Tgh=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09tE5y|*CZH%k zD>b>KIL0$X!8HfS$}CG&Fo|(3EX^#)P0cF_DN0PvPA$@P0#SJ>F{v<#_!5XrOkzQ1 xOniK1US>&ryk0@&FAkgB{FKt1RJ$Tppd}z@6!Qa#56p~=j2{?aL=iJk3;+&6F=PM$ literal 0 HcmV?d00001 diff --git a/equipment_tracker/api/__pycache__/urls.cpython-311.pyc b/equipment_tracker/api/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0544ad250c009d00b9ba63f4b1f0581b9c1d9ba0 GIT binary patch literal 382 zcmZ3^%ge<81m}r0S;CetmJg2a-HTkM&6$vLGdsa2eb z$;tVpc_qdARlG2!UTINIv7aW(E$)=8#Ju!;Fu#ZysK1B>NZjHE$^%U)NiE7NUdiwo zWbm&5SF4zSqWrAXF*!T6NY@EO<)y@= z!X)BLATlwD1(`7*%k>H>e{tC4=BJeAq}mmMLJ8!*VrL-nftit!@dktH1#IX88v`q6 ogG-0>g!BpNGx9Hr>0J@iyU3z{g+>1ZGZQ~k12+g3aRAK$07&&{-2eap literal 0 HcmV?d00001 diff --git a/equipment_tracker/config/__pycache__/__init__.cpython-311.pyc b/equipment_tracker/config/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a880ab5f36e573a1d70c25311aceb5282017a571 GIT binary patch literal 196 zcmZ3^%ge<81R~jHsUZ3>h=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09tE8Nv8CZH%k zD>b>KIL0$X!8HfS$}CG&Fo|(3EX^#)P0cF_DN0PvPA$@P0#SJ>F{v<#_!5XrOmco+ zT4s7oe0*kJW=VX!UP0wA4x8Nkl+v73yCPPgJs_79^8<+w%#4hT9~fXn5i?K>0L0HS AqW}N^ literal 0 HcmV?d00001 diff --git a/equipment_tracker/config/__pycache__/settings.cpython-311.pyc b/equipment_tracker/config/__pycache__/settings.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06dbdcb670abec13036737b7ecfddb41b5d2c021 GIT binary patch literal 5915 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 literal 0 HcmV?d00001 diff --git a/equipment_tracker/config/settings.py b/equipment_tracker/config/settings.py index 0ba6849..86a6e26 100644 --- a/equipment_tracker/config/settings.py +++ b/equipment_tracker/config/settings.py @@ -66,6 +66,8 @@ INSTALLED_APPS = [ 'rest_framework_simplejwt', 'djoser', 'corsheaders', + 'drf_spectacular', + 'drf_spectacular_sidecar', 'accounts' ] @@ -125,6 +127,19 @@ REST_FRAMEWORK = { 'user': '1440/min' }, + 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', +} + +# DRF-Spectacular +SPECTACULAR_SETTINGS = { + 'TITLE': 'CITC Equipment Tracker Backend', + 'DESCRIPTION': 'An IT Elective 4 Project', + 'VERSION': '1.0.0', + 'SERVE_INCLUDE_SCHEMA': False, + 'SWAGGER_UI_DIST': 'SIDECAR', + 'SWAGGER_UI_FAVICON_HREF': 'SIDECAR', + 'REDOC_DIST': 'SIDECAR', + # OTHER SETTINGS } WSGI_APPLICATION = 'config.wsgi.application' diff --git a/equipment_tracker/config/urls.py b/equipment_tracker/config/urls.py index cad3e39..8c0ff9e 100644 --- a/equipment_tracker/config/urls.py +++ b/equipment_tracker/config/urls.py @@ -16,8 +16,14 @@ Including another URLconf """ from django.contrib import admin from django.urls import path, include +from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView urlpatterns = [ path('admin/', admin.site.urls), - path('api/v1/', include('api.urls')) + path('api/v1/', include('api.urls')), + path('schema/', SpectacularAPIView.as_view(), name='schema'), + path('swagger/', + SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'), + path('redoc/', + SpectacularRedocView.as_view(url_name='schema'), name='redoc'), ] diff --git a/equipment_tracker/schema.yml b/equipment_tracker/schema.yml new file mode 100644 index 0000000..01a35d8 --- /dev/null +++ b/equipment_tracker/schema.yml @@ -0,0 +1,710 @@ +openapi: 3.0.3 +info: + title: CITC Equipment Tracker Backend + version: 1.0.0 + description: An IT Elective 4 Project +paths: + /api/v1/accounts/jwt/create/: + post: + operationId: api_v1_accounts_jwt_create_create + description: |- + Takes a set of user credentials and returns an access and refresh JSON web + token pair to prove the authentication of those credentials. + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TokenObtainPair' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TokenObtainPair' + multipart/form-data: + schema: + $ref: '#/components/schemas/TokenObtainPair' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TokenObtainPair' + description: '' + /api/v1/accounts/jwt/refresh/: + post: + operationId: api_v1_accounts_jwt_refresh_create + description: |- + Takes a refresh type JSON web token and returns an access type JSON web + token if the refresh token is valid. + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TokenRefresh' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TokenRefresh' + multipart/form-data: + schema: + $ref: '#/components/schemas/TokenRefresh' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TokenRefresh' + description: '' + /api/v1/accounts/jwt/verify/: + post: + operationId: api_v1_accounts_jwt_verify_create + description: |- + Takes a token and indicates if it is valid. This view provides no + information about a token's fitness for a particular use. + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TokenVerify' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TokenVerify' + multipart/form-data: + schema: + $ref: '#/components/schemas/TokenVerify' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TokenVerify' + description: '' + /api/v1/accounts/users/: + get: + operationId: api_v1_accounts_users_list + tags: + - api + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CustomUser' + description: '' + post: + operationId: api_v1_accounts_users_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserRegistration' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UserRegistration' + multipart/form-data: + schema: + $ref: '#/components/schemas/UserRegistration' + required: true + security: + - jwtAuth: [] + - {} + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/UserRegistration' + description: '' + /api/v1/accounts/users/{id}/: + get: + operationId: api_v1_accounts_users_retrieve + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this user. + required: true + tags: + - api + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomUser' + description: '' + put: + operationId: api_v1_accounts_users_update + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this user. + required: true + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomUser' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/CustomUser' + multipart/form-data: + schema: + $ref: '#/components/schemas/CustomUser' + required: true + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomUser' + description: '' + patch: + operationId: api_v1_accounts_users_partial_update + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this user. + required: true + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedCustomUser' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedCustomUser' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedCustomUser' + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomUser' + description: '' + delete: + operationId: api_v1_accounts_users_destroy + parameters: + - in: path + name: id + schema: + type: integer + description: A unique integer value identifying this user. + required: true + tags: + - api + security: + - jwtAuth: [] + responses: + '204': + description: No response body + /api/v1/accounts/users/activation/: + post: + operationId: api_v1_accounts_users_activation_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Activation' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Activation' + multipart/form-data: + schema: + $ref: '#/components/schemas/Activation' + required: true + security: + - jwtAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Activation' + description: '' + /api/v1/accounts/users/me/: + get: + operationId: api_v1_accounts_users_me_retrieve + tags: + - api + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomUser' + description: '' + put: + operationId: api_v1_accounts_users_me_update + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomUser' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/CustomUser' + multipart/form-data: + schema: + $ref: '#/components/schemas/CustomUser' + required: true + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomUser' + description: '' + patch: + operationId: api_v1_accounts_users_me_partial_update + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedCustomUser' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedCustomUser' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedCustomUser' + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CustomUser' + description: '' + delete: + operationId: api_v1_accounts_users_me_destroy + tags: + - api + security: + - jwtAuth: [] + responses: + '204': + description: No response body + /api/v1/accounts/users/resend_activation/: + post: + operationId: api_v1_accounts_users_resend_activation_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SendEmailReset' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SendEmailReset' + multipart/form-data: + schema: + $ref: '#/components/schemas/SendEmailReset' + required: true + security: + - jwtAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SendEmailReset' + description: '' + /api/v1/accounts/users/reset_password/: + post: + operationId: api_v1_accounts_users_reset_password_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SendEmailReset' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SendEmailReset' + multipart/form-data: + schema: + $ref: '#/components/schemas/SendEmailReset' + required: true + security: + - jwtAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SendEmailReset' + description: '' + /api/v1/accounts/users/reset_password_confirm/: + post: + operationId: api_v1_accounts_users_reset_password_confirm_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordResetConfirm' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PasswordResetConfirm' + multipart/form-data: + schema: + $ref: '#/components/schemas/PasswordResetConfirm' + required: true + security: + - jwtAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PasswordResetConfirm' + description: '' + /api/v1/accounts/users/reset_username/: + post: + operationId: api_v1_accounts_users_reset_username_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SendEmailReset' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SendEmailReset' + multipart/form-data: + schema: + $ref: '#/components/schemas/SendEmailReset' + required: true + security: + - jwtAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SendEmailReset' + description: '' + /api/v1/accounts/users/reset_username_confirm/: + post: + operationId: api_v1_accounts_users_reset_username_confirm_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UsernameResetConfirm' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UsernameResetConfirm' + multipart/form-data: + schema: + $ref: '#/components/schemas/UsernameResetConfirm' + required: true + security: + - jwtAuth: [] + - {} + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UsernameResetConfirm' + description: '' + /api/v1/accounts/users/set_password/: + post: + operationId: api_v1_accounts_users_set_password_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SetPassword' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetPassword' + multipart/form-data: + schema: + $ref: '#/components/schemas/SetPassword' + required: true + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SetPassword' + description: '' + /api/v1/accounts/users/set_username/: + post: + operationId: api_v1_accounts_users_set_username_create + tags: + - api + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SetUsername' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetUsername' + multipart/form-data: + schema: + $ref: '#/components/schemas/SetUsername' + required: true + security: + - jwtAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/SetUsername' + description: '' +components: + schemas: + Activation: + type: object + properties: + uid: + type: string + token: + type: string + required: + - token + - uid + CustomUser: + type: object + properties: + username: + type: string + readOnly: true + description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ + only. + email: + type: string + format: email + title: Email address + maxLength: 254 + avatar: + type: string + format: uri + first_name: + type: string + maxLength: 100 + last_name: + type: string + maxLength: 100 + required: + - avatar + - first_name + - last_name + - username + PasswordResetConfirm: + type: object + properties: + uid: + type: string + token: + type: string + new_password: + type: string + required: + - new_password + - token + - uid + PatchedCustomUser: + type: object + properties: + username: + type: string + readOnly: true + description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ + only. + email: + type: string + format: email + title: Email address + maxLength: 254 + avatar: + type: string + format: uri + first_name: + type: string + maxLength: 100 + last_name: + type: string + maxLength: 100 + SendEmailReset: + type: object + properties: + email: + type: string + format: email + required: + - email + SetPassword: + type: object + properties: + new_password: + type: string + current_password: + type: string + required: + - current_password + - new_password + SetUsername: + type: object + properties: + current_password: + type: string + new_username: + type: string + title: Username + description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ + only. + pattern: ^[\w.@+-]+$ + maxLength: 150 + required: + - current_password + - new_username + TokenObtainPair: + type: object + properties: + username: + type: string + writeOnly: true + password: + type: string + writeOnly: true + access: + type: string + readOnly: true + refresh: + type: string + readOnly: true + required: + - access + - password + - refresh + - username + TokenRefresh: + type: object + properties: + access: + type: string + readOnly: true + refresh: + type: string + writeOnly: true + required: + - access + - refresh + TokenVerify: + type: object + properties: + token: + type: string + writeOnly: true + required: + - token + UserRegistration: + type: object + properties: + username: + type: string + description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ + only. + pattern: ^[\w.@+-]+$ + maxLength: 150 + email: + type: string + format: email + password: + type: string + writeOnly: true + avatar: + type: string + format: uri + nullable: true + first_name: + type: string + maxLength: 100 + last_name: + type: string + maxLength: 100 + required: + - email + - first_name + - last_name + - password + - username + UsernameResetConfirm: + type: object + properties: + new_username: + type: string + title: Username + description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ + only. + pattern: ^[\w.@+-]+$ + maxLength: 150 + required: + - new_username + securitySchemes: + jwtAuth: + type: http + scheme: bearer + bearerFormat: JWT