From 94e235c0a50c31fb412640af3b0dc2762ebbf167 Mon Sep 17 00:00:00 2001 From: Paul Calot Date: Sat, 28 Oct 2023 22:05:34 +0200 Subject: [PATCH] First version backend --- Makefile | 9 ++ backend/backend/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 199 bytes .../__pycache__/settings.cpython-311.pyc | Bin 0 -> 2765 bytes .../backend/__pycache__/urls.cpython-311.pyc | Bin 0 -> 508 bytes .../backend/__pycache__/wsgi.cpython-311.pyc | Bin 0 -> 713 bytes backend/backend/asgi.py | 16 +++ backend/backend/settings.py | 127 ++++++++++++++++++ backend/backend/urls.py | 7 + backend/backend/wsgi.py | 16 +++ backend/db.sqlite3 | Bin 0 -> 131072 bytes backend/drag/__init__.py | 0 .../drag/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 188 bytes .../drag/__pycache__/admin.cpython-311.pyc | Bin 0 -> 243 bytes backend/drag/__pycache__/apps.cpython-311.pyc | Bin 0 -> 555 bytes .../drag/__pycache__/models.cpython-311.pyc | Bin 0 -> 240 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 0 -> 1202 bytes backend/drag/__pycache__/urls.cpython-311.pyc | Bin 0 -> 815 bytes .../drag/__pycache__/views.cpython-311.pyc | Bin 0 -> 2683 bytes backend/drag/admin.py | 3 + backend/drag/apps.py | 6 + backend/drag/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 199 bytes backend/drag/models.py | 3 + backend/drag/serializers.py | 11 ++ backend/drag/tests.py | 3 + backend/drag/urls.py | 11 ++ backend/drag/views.py | 41 ++++++ backend/manage.py | 22 +++ 29 files changed, 275 insertions(+) create mode 100644 Makefile create mode 100644 backend/backend/__init__.py create mode 100644 backend/backend/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/backend/__pycache__/settings.cpython-311.pyc create mode 100644 backend/backend/__pycache__/urls.cpython-311.pyc create mode 100644 backend/backend/__pycache__/wsgi.cpython-311.pyc create mode 100644 backend/backend/asgi.py create mode 100644 backend/backend/settings.py create mode 100644 backend/backend/urls.py create mode 100644 backend/backend/wsgi.py create mode 100644 backend/db.sqlite3 create mode 100644 backend/drag/__init__.py create mode 100644 backend/drag/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/drag/__pycache__/admin.cpython-311.pyc create mode 100644 backend/drag/__pycache__/apps.cpython-311.pyc create mode 100644 backend/drag/__pycache__/models.cpython-311.pyc create mode 100644 backend/drag/__pycache__/serializers.cpython-311.pyc create mode 100644 backend/drag/__pycache__/urls.cpython-311.pyc create mode 100644 backend/drag/__pycache__/views.cpython-311.pyc create mode 100644 backend/drag/admin.py create mode 100644 backend/drag/apps.py create mode 100644 backend/drag/migrations/__init__.py create mode 100644 backend/drag/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/drag/models.py create mode 100644 backend/drag/serializers.py create mode 100644 backend/drag/tests.py create mode 100644 backend/drag/urls.py create mode 100644 backend/drag/views.py create mode 100755 backend/manage.py diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..66afe81 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +SHELL := /bin/bash +CONDA := /home/paul/anaconda3/bin/conda + +run_server: + source $$(/home/paul/miniconda/bin/conda info --base)/etc/profile.d/conda.sh ; \ + conda activate appenv ; \ + python backend/manage.py makemigrations ; \ + python backend/manage.py migrate ; \ + python backend/manage.py runserver diff --git a/backend/backend/__init__.py b/backend/backend/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/backend/__pycache__/__init__.cpython-311.pyc b/backend/backend/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..684bc450188f9c63626a8f4c8fbf37a1a3e6c512 GIT binary patch literal 199 zcmZ3^%ge<81P7yRQ$h4&5CH>>P{wCAAY(d13PUi1CZpdMv>NwI!WYC&pINq%NgYO#J&VpVF6Zbo8qw!T+pUV2WdQ)*5QP&7F^ zH7^B&j*rjG%PfhH*DI*}#bJ}1pHiBWYFESxvyVtyd;ftit!@dE>lC}IYR0RY`L BGra%+ literal 0 HcmV?d00001 diff --git a/backend/backend/__pycache__/settings.cpython-311.pyc b/backend/backend/__pycache__/settings.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69b07b5c673f8084dd94f2b62f1d812e8a512940 GIT binary patch literal 2765 zcmb6bU2oe|^g7?)O|x{(#z3B?F;Z5CjZzTW25#bZVQEt0bOXOwuJ3K?)gPJdtjte& z1c?XU;DHCk0|@bF3PPf~Pm_4!En;tb;@C-AE1SfyoO93jIrp4;_nW>|Rr35Z`$84u$# z^bC^{I4UJ^OiJN+pOMmlW%@|U_7P6}$VfR@ld$G-N-E$qP%#X0oc)o}7@Ye)1~v;g zFBNeCFOUQ-dRc_<;`b4akrr_Yp98HDE(dTafaf))ACpRWSvrR+QW@ec!S6i2AT8sI zQU$*zqUt5(I&3V{c&M0ti*<C#4~gn>namb3iLJNkga`Yc*`C4mXK0%Rse^8Zm3&u;y9=O?7IsgliM`?g3%4 zkFLs|dil0{w0?7Kb!AOiAFinD@7=I0^L<-BeEXd@4cqBaW~G|;$`enVYMHLB?Qua} zy>s*2Aq0JGj_I2a({-N=h~q8K2_51%Q0W&11_+csSX`X9aG^J<-w}rvY~r}`zO5MK z$g&S<4BJYdW>w2}4v2z@?Nn3V)ey-U8pb*~Qf$K2L2LVz^j4>FLK;EQH1`Q7`qcv@ zq`o$v)^sD`2;zhnvZ}rq1dfeinUIaY{D-Pz?{jqk_cd}9Qhk3e7X{i7&VvUUI-se+ zsSX*=Z(>&Tu<`b!5h1Jfmuy1U)We4`k}z4^XPbUQIs<=%!WGUF7e>p3>3$KVZt(8MH&vmak~z&dDkEOp-V)~&~(Kghx-!^%l7WPs;6zu)Qq9g zB4*z`IJ5ugRqZEZvNO%`%)!U6>YzO|h^?tFdWaKqb?DIOZm;eo;e!F=QuAJ)x`j#_ z7ACsGZD@TMCu>t9I&N1l(4;KGw?LL@asW53uI<@TC@oFNvVTSSe7K`5{V}150o*#K zOH&)XDEOVG8BwTrg`Rv*_?*TY!p80v&GW5R=Yi0W?{>tVNSErJt|)i9O=z7QhPc$f;F5ak!H4=jYdm&z;^|j>vlRldAHlDciNjY-4nKVT6|9sY4L%$ z)%5jS%{uQNJDP6rJ>Jhzq!oU*cURuwMe#wW+mP?`ttJQ|C7N&X?X6vYOOWfGh5!zm z+kz~0;C!WaVRy|NAGB%0$9fWMvj?8*eso%D2%G$Ft0#l!j=b3vT8&@OGykLYyjwf4 z3{o4wxvn)V75ZelPR%9*V!M_GRjlnP9?@41;F_s@0vC-=Hi)hRH~1%Ty3W43+~CRc z)GcV+P$zfn>kz{KljMj1$5Do1#*qvY8zUc75Od)eRl@H$fpWz!*S<-8b?56le`YWL zp1u5A_R1gryYff&#wax|phA}!Wk4~VAH`1=%iqLD`IE|}W3+U#4DQO~RHhVx08=n3 zj4SB^FlGR3&!gfSque-!$^vszES;1qPjl=T#jg}XAet;^#_3!u1MXt6TNKg}(U(oeGsqtsK_YGRy2g=I)SgU-Kqj7pQ&UV-BN3m9^jG5`Po literal 0 HcmV?d00001 diff --git a/backend/backend/__pycache__/urls.cpython-311.pyc b/backend/backend/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71de28bd72b3c4b4b487ac9f876a47a1b01ce7d0 GIT binary patch literal 508 zcmZutJ8!};5VjMCM^Rd-Q^x}8kfCJiQuQHKOdVJ{Akm=;u^R$Tf}BKZnHU)vkop5E zQC0mjATc1Xow^~hG4;%&5>h{(?>>KbzO(#cngJD!taV$WUY-iatE7U*H7h3%Y1;|CsNzOpBK)S% zp^YqTMO7pSC_=qhlGsm}BubS9@Gv1^B8)%L64Gc@vs+QX?5>k?yBfJ^z``W91?w`A zM806L-E?}4pSK*hW8eFs$Jrg@98|Z%Li!igfJ*mumAeWensRm{j-b8zg17~4p<|5a z=ybAgb96TO&lVYEoyqs*?fUt2*B@bvatN^ z;JRl9Ux7mtIN_EcO=5gbSYfW2BY>p8*a_cO7Rk$==lRN+1#oWK+z42Jxid34Uxc8! z%B=>JR!3L%`$n}!eHnFvF73#KwmttNMx4fp?4z$8+pcMfpJJ&{QQbp2Pw<5B+5)Mk zs7FJ|2Lg8m4pGpdmjtt=$P1CvR?CZH5%``CWYlUIyw`>$lnK%xGKAr5fy&5$2a0wA zfe)!dw0l~|>KS8P`pV&bFY3yLCSQgOBlgsJ!g}&pOU5x4@+8Davt!i_nEfX^YQ03# z2VK-|7IT+mq+6APSM}#~TQpt}QYCfa^@rP2C6%k;P^Mt4M#4NmeYu z7!xgn1Qlz0BNV$m^9t<1C=j@ZLYV06RsQ*m+KEqY?mVC0{mZ0i;LWcB^}%%093fuSzfQpVY+u3VFW4M!Iparr7f`;0@)*jK;`X?>eNo)GEbg4H KWhJ?1!2be0H`6Hq literal 0 HcmV?d00001 diff --git a/backend/backend/asgi.py b/backend/backend/asgi.py new file mode 100644 index 0000000..15b2aa4 --- /dev/null +++ b/backend/backend/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for backend project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') + +application = get_asgi_application() diff --git a/backend/backend/settings.py b/backend/backend/settings.py new file mode 100644 index 0000000..479d8c0 --- /dev/null +++ b/backend/backend/settings.py @@ -0,0 +1,127 @@ +""" +Django settings for backend project. + +Generated by 'django-admin startproject' using Django 4.2.4. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-c6k@o#a!)p0=l1q%_zc!=tw624-*4a6u*c651oon7r_k+0&mrs' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True +ALLOWED_HOSTS = ["*"] +CORS_ORIGIN_ALLOW_ALL = True +CORS_ALLOWED_ORIGINS = [] + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'rest_framework', + 'drag', + 'corsheaders', +] + +MIDDLEWARE = [ + 'corsheaders.middleware.CorsMiddleware', + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'backend.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'backend.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/backend/backend/urls.py b/backend/backend/urls.py new file mode 100644 index 0000000..234b500 --- /dev/null +++ b/backend/backend/urls.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('drag.urls')), +] diff --git a/backend/backend/wsgi.py b/backend/backend/wsgi.py new file mode 100644 index 0000000..ac58012 --- /dev/null +++ b/backend/backend/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for backend project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') + +application = get_wsgi_application() diff --git a/backend/db.sqlite3 b/backend/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..7bffb976fd87157f0f111e8add94302e4dd6429f GIT binary patch literal 131072 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 Q{+fr@yE^^&C$+fj3j`31&j0`b literal 0 HcmV?d00001 diff --git a/backend/drag/__pycache__/models.cpython-311.pyc b/backend/drag/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a5c77ea41e7b604404ed2e9cc19edd494154bd5 GIT binary patch literal 240 zcmZ3^%ge<81f4Oqsg^+cF^B^LOi;#WAs}NqLkdF*V-7n+a literal 0 HcmV?d00001 diff --git a/backend/drag/__pycache__/serializers.cpython-311.pyc b/backend/drag/__pycache__/serializers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05af6da59b50d5a5cd5132fe84d9636385aa0130 GIT binary patch literal 1202 zcmb7COK;Oa5Z<+&cU@N%N`&B4g-B7`_zwV5o6tfK2{hqADzHp;+qiM!bRC0eFFA1N z3H4Ua9D-0e@KYMehiI>yxD}#j zN+d8QZn2w)u`;UhpIhC4!dVJHG{%pPAFq8BBxsK}Hk2}NrlAN$2G z9Zg>|tUzgG}BltTHLH;}O810TE~j0>I*q6b25NaU32%BQn(+MUYh%===)@ z+kM08)-Fm{@-Z6Mw65O4nnshF*0GRda(hP8b{*aHJ%s-(O%z)?Su?PSXnZ$FMWYV; zktgUInDBPaH`JEZ!D>%;OtoY+oeu8yZI$32CVk5w*jC@_d)QoV>CLuUHoDs;Ud5)# zzBb#qi&RAPZS~4%3cU}6BGLEqlxWGK1Fz!B*qo* z$b*n1m__G$1iv#Z#}4^G6Xja9;v=hs&JAokX5Xf%qL(tjeJkjSqaft`tR6#Ivoc+V=P4o}RZ5f*Y literal 0 HcmV?d00001 diff --git a/backend/drag/__pycache__/urls.cpython-311.pyc b/backend/drag/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e83e1496eec80f33bab6a35f1c0215c05a8b27cd GIT binary patch literal 815 zcmZ`#&1(};5Pxs8+1+%r1}fH*)D%2KNVbS4Q9%hFG#E6{!ivf!Z}QRXM|`_$F&Bdu zBY5aR@aicd?H|xTV*@#a#e?9fw?J<_Ij>2oVx4_6J0HLKy_xsbFjff4_2+kBKneLN zf~6=6=lDB1p9v$3I>e9$$#-0s4Vj@9`B@V1+4_y&goWyX@pztqt0a{VT3xD7PWMy z*GM6IBoYNFk$ZO7PSlRqa3Tf;niyqh+L04J^`j8@ksw0Y>b;=*B!VF9_}*3rc54tO z7i-|L2LP;YH@eHDZvO`MvltX#E!vPsQ@p)%THsim~l-!EXJ3lgO z!z&-wKdujyDN)|%-sSc##8+<|z8K`jq%t9um{gX9T%5mo_*N9E6H<*yb*7MXW>6lk i4!4Kfdt0BLjg9=o$dBcXiM%mONjYhti;rKzfqwy|&D`Ap literal 0 HcmV?d00001 diff --git a/backend/drag/__pycache__/views.cpython-311.pyc b/backend/drag/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..244cbf6352cfb8c3e05b173fa1f13ae8f0c72c7e GIT binary patch literal 2683 zcmcIl&2JM&6rWwM?RC}x8pq|!L@uEu<|9T3(GpQAXiQsLQiy>fi)yuaC$W?D2Q%x? zL_vyF4ydQz;Lt-)X`*o8g491_Q>|2MDx^wP58Pa(Cr*8DH@iu|swh>*yFbsHnfK<+ zy!U(iV{dN{fu>bHpa)`v{EkAtK)i$e!}Ti*i!CznhaPiRKXm>K^*Iwe&l@IxIJF-CdIvgi9Mw%r`f=jqo* zt!dGba-$~V1z!*eqrw{ouQUu1xiWSUChAjGl~;065os|?XeQ-lR&An_BFg9Zr>0Qs zxh55=Wz?ry#uQy4c(gkkC*kO8_QmJeO`~Py#~S5Ujn-|RXS7L~-Kc_R`P;@k zwT@Tdp!rKx*pyzNmIb5b8Co~W$nABpsVFL_5&jT!yPK+ep zYWEMf2Zq{v2HU$c?fr*3iD>VR4nc^-Q$3wXA{pzDL^QSzDx@5S76chy?>dvv@vpNg zP2m+r#+d?RLS?i}tFzQ({UGKdLY>@*kl58^bhg@P@gR<3XD|YxhRf$1ZD+Gt_BNW@ zSuyISMfJb{8-URiynGkHBKfU1{oTBiJm_eHjxxwF!ew~F7UaP?dh(D^Qj$zkl1&M6 zIbzD_wCFp}X99O_Kn@nEUB*KO4bS8q7-#}E?7$`rFG$m&^jKPg{%R=SlNaP4w%Q5o zktOJ@h7x;kL7qnYUb`2u6G0#BgO7Vd@g@6;t%Xx$L9sC&8*LhM-fNE|OW?z5=tq%k z(~_svVC6Rb(1%y`bISONBox!I4VDJw70HWwu7}~KY!E=GRj$thJx#I0`!j56>YfJX zBEw|#Q$_pa+O;eC$rC5^FFq47%27NL(9r?$sK-wEpx`roOy8hS!(~I z%TEuxC&!#rVJ%f~Qw1kk_ya~SxtZfnC*9Lmoz%oyYQjxTILQewbH`T{q3U|ws8L-P zJv!321<9|Aq^{p-8J0i8kj5UhJS~qXEQ@0Zc){z#0E^+TBgdmfsYAM>Zv<8UHFHu$ zs60XS?M5B=2>H|*09yPH)G53!b%02bO(KD$Y)acdUiV&)R?+`Rt5@`Mv2k_~u8ZwQ z$RHd*I0OLPLYjJ6&fdk|VFav&n_OZ;C}QMU4&eyEOC0brXMSIosBJI+9pK*pya5A_ zE{{Fg=N>!zlj(eP-92~1xp~X^s_x!wtYw;Rrul}HU?=b_SiQF-`)L#r-oehPa1w{c zbG>2*6arhHWI&|54K~BDy888I_x72QpkjE}D74Lr!u@LIUAtGa@UlgGBguWbd2VcX z?S*>QC+#_Q78LMfz<&kkL?lUSlcP?zr%jGI+n+Z1(CPMc6itHfatIk&I@BQ{sH%iK j?~af5xO;PddXs-`UDDruxo_stu)FU_7o{x*ytw=gESXt5 literal 0 HcmV?d00001 diff --git a/backend/drag/admin.py b/backend/drag/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/backend/drag/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/backend/drag/apps.py b/backend/drag/apps.py new file mode 100644 index 0000000..608ba09 --- /dev/null +++ b/backend/drag/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class DragConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'drag' diff --git a/backend/drag/migrations/__init__.py b/backend/drag/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/drag/migrations/__pycache__/__init__.cpython-311.pyc b/backend/drag/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b7684e1a961af24cfed860500a8599f31b112ef GIT binary patch literal 199 zcmZ3^%ge<81f4OqsUZ3>h=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09tD@s2jKQ~ps zAh9$@-z7h}G&eP`q*%WwwIH>qBtNq#wOBtXu_`r3HzP4QTi+`)FFhyKDK#etD4Lv| znwO%VQk0mkpPQLplvt9PpI59OAD@|*SrQ+wS5Wzj!zMRBr8Fniu80+A705Bg{6OLZ QGb1D82L>2X#0(Sz0LG6q(f|Me literal 0 HcmV?d00001 diff --git a/backend/drag/models.py b/backend/drag/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/backend/drag/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/backend/drag/serializers.py b/backend/drag/serializers.py new file mode 100644 index 0000000..2bcbdf0 --- /dev/null +++ b/backend/drag/serializers.py @@ -0,0 +1,11 @@ +from rest_framework import serializers + +class QuestionSerializer(serializers.Serializer): + question = serializers.CharField() + userId = serializers.CharField() + +class FeedbackSerializer(serializers.Serializer): + previousQuestion = serializers.CharField() + previousResults = serializers.JSONField() + feedback = serializers.ChoiceField(choices=['OKAY', 'BAD_GPT', 'BAD_DOCUMENTS']) + userId = serializers.CharField() diff --git a/backend/drag/tests.py b/backend/drag/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/backend/drag/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/backend/drag/urls.py b/backend/drag/urls.py new file mode 100644 index 0000000..7707637 --- /dev/null +++ b/backend/drag/urls.py @@ -0,0 +1,11 @@ +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from .views import AskQuestionViewSet, SendFeedbackViewSet + +router = DefaultRouter() +router.register(r'askQuestion', AskQuestionViewSet, basename='ask-question') +router.register(r'sendFeedback', SendFeedbackViewSet, basename='send-feedback') + +urlpatterns = [ + path('', include(router.urls)), +] diff --git a/backend/drag/views.py b/backend/drag/views.py new file mode 100644 index 0000000..eb6c8f8 --- /dev/null +++ b/backend/drag/views.py @@ -0,0 +1,41 @@ +from rest_framework import viewsets, status +from rest_framework.response import Response +from .serializers import QuestionSerializer, FeedbackSerializer + +def query_model(question): + # Replace this with the actual implementation + return { + "result": [ + {'url': 'http://example.com' + , 'description': 'Example' + , 'sysId': 'ahsoashoa' + , 'type': 'PDF' + , 'language': 'English' + } + ] + } + + +def handle_feedback(feedback, previousQuestion, previousResults): + # Replace this with the actual implementation + return [{'status': 'received'}] + +class AskQuestionViewSet(viewsets.ViewSet): + def create(self, request): + serializer = QuestionSerializer(data=request.data) + if serializer.is_valid(): + data = serializer.validated_data + response_data = query_model(data['question']) + return Response(response_data, status=status.HTTP_200_OK) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + +class SendFeedbackViewSet(viewsets.ViewSet): + def create(self, request): + serializer = FeedbackSerializer(data=request.data) + if serializer.is_valid(): + data = serializer.validated_data + response_data = handle_feedback(data['feedback'], data['previousQuestion'], data['previousResults']) + return Response(response_data, status=status.HTTP_200_OK) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) diff --git a/backend/manage.py b/backend/manage.py new file mode 100755 index 0000000..eb6431e --- /dev/null +++ b/backend/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main()