diff --git a/pairent_backend/pairent_app/urls.py b/pairent_backend/pairent_app/urls.py index d19ec7f..a834842 100644 --- a/pairent_backend/pairent_app/urls.py +++ b/pairent_backend/pairent_app/urls.py @@ -10,8 +10,12 @@ urlpatterns = format_suffix_patterns([ path("apartaments/comparison/", views.ApartamentGetManyViewSet.as_view({'get': 'retrieve'})), # пример: apartaments/comparison/?user_id=1 user_id - id пользователя path("apartaments/favorite/", views.ApartamentGetManyViewSet.as_view({'get': 'list'})), # пример: apartaments/favorite/?user_id=1 user_id - id пользователя path("apartaments/filters/", views.ApartmentFilter.as_view({'post': 'list'})), - path("psych_test/add_result/", views.PsychTestAddResultViewSet.as_view({'post': 'create'})), # пример: psych_test/add_result/1/?result=50 result - результат псих теста пользователя - path("users/get_compatible", views.CompatibleUsersView.as_view({'post': 'list'})), + + # user + path("user/get_compatible", views.CompatibleUsersView.as_view({'post': 'list'})), + # пример: psych_test/add_result/1/?result=50 result - результат псих теста пользователя + path("psych_test/add_result/", views.PsychTestAddResultViewSet.as_view({'post': 'create'})), + path('user/get', views.UserGet.as_view()), # auth re_path(r'^auth/vvsu/', views.VVSUAuthProxy), diff --git a/pairent_backend/pairent_app/views.py b/pairent_backend/pairent_app/views.py index d03c8db..227f118 100644 --- a/pairent_backend/pairent_app/views.py +++ b/pairent_backend/pairent_app/views.py @@ -210,4 +210,29 @@ class UserLogin(APIView): resp = HttpResponse(cb.content); resp.headers['Content-Type'] = cb.headers['Content-Type']; - return resp; \ No newline at end of file + return resp; + +class UserGet(APIView): + def get(self, req: HttpRequest): + if not ('id' in req.GET.keys() or 'login' in req.GET.keys()): + res = JsonResponse({'error': 'no id or login'}); + res.status_code = 400; + return res; + + id_type = 'id' if 'id' in req.GET.keys() else 'login'; + id = req.GET.get(id_type); + + if (id_type == 'login'): + if not id.endswith('@vvsu.ru'): + id += '@vvsu.ru'; + id_type = 'openid_addr'; + + user = None; + try: + user = User.objects.get(**{id_type: id}); + except User.DoesNotExist: + res = JsonResponse({'error': 'not found'}); + res.status_code = 404; + return res; + + return JsonResponse(PublicUserSerializer(user).data); \ No newline at end of file diff --git a/pairent_backend/requirements.txt b/pairent_backend/requirements.txt index a367ef2..fb3ac95 100644 --- a/pairent_backend/requirements.txt +++ b/pairent_backend/requirements.txt @@ -3,5 +3,4 @@ django djangorestframework django-cors-headers Pillow -requests -oic \ No newline at end of file +requests \ No newline at end of file diff --git a/pairent_frontend_react/src/API/User.js b/pairent_frontend_react/src/API/User.js index 472585f..4be7f14 100644 --- a/pairent_frontend_react/src/API/User.js +++ b/pairent_frontend_react/src/API/User.js @@ -25,9 +25,12 @@ class User { } - /** @param {string} id */ + /** + * @param {string} id + * @returns {User} + */ static async getById(id) { - const data = await axios.post(API_ROOT + '/users/get', { id }); + const data = await axios.get(API_ROOT + '/api/user/get', { params: { id } }); if (data.data['error']) throw new Error(data.data['error']); return new User(data.data);