diff --git a/client/src/actions/cities.ts b/client/src/actions/cities.ts index 59f8be983260eec6f4e46e39d8218e2b5c8243eb..17fb90854cb61b6a0a76861d8b427721eea1230d 100644 --- a/client/src/actions/cities.ts +++ b/client/src/actions/cities.ts @@ -13,15 +13,17 @@ export const getCities = () => async (dispatch: AppDispatch) => { .then((res) => { dispatch({ type: Types.SET_CITIES, - payload: res.data.items, + payload: res.data, }) + + const pagination = JSON.parse(res.headers.pagination) dispatch({ - type: Types.SET_CITIES_COUNT, - payload: res.data.total_count, + type: Types.SET_CITIES_TOTAL, + payload: pagination.total, }) dispatch({ - type: Types.SET_CITIES_TOTAL, - payload: res.data.count, + type: Types.SET_CITIES_COUNT, + payload: pagination.total <= pagination.page_size ? pagination.total : pagination.page_size, }) }) .catch((err) => console.log(err)) diff --git a/client/src/actions/competitionLogin.ts b/client/src/actions/competitionLogin.ts index 42a050532ef5ebe571eeb6ab67a3d8eaf1fa0129..b2198f74698f8fb7b40acd10f7a2b2c64ebb66d7 100644 --- a/client/src/actions/competitionLogin.ts +++ b/client/src/actions/competitionLogin.ts @@ -15,7 +15,7 @@ export const loginCompetition = (code: string, history: History, redirect: boole ) => { dispatch({ type: Types.LOADING_COMPETITION_LOGIN }) await axios - .post('/api/auth/login/code', { code }) + .post('/api/auth/code', { code }) .then((res) => { const token = `Bearer ${res.data.access_token}` localStorage.setItem(`${res.data.view}Token`, token) //setting token to local storage diff --git a/client/src/actions/competitions.ts b/client/src/actions/competitions.ts index 64fd11e1a61614e30296f685bf85eac8700e7a96..04ac133c38b53513f7f19bb0d2e290d5430aad94 100644 --- a/client/src/actions/competitions.ts +++ b/client/src/actions/competitions.ts @@ -24,15 +24,16 @@ export const getCompetitions = () => async (dispatch: AppDispatch, getState: () .then((res) => { dispatch({ type: Types.SET_COMPETITIONS, - payload: res.data.items, + payload: res.data, }) + const pagination = JSON.parse(res.headers.pagination) dispatch({ type: Types.SET_COMPETITIONS_TOTAL, - payload: res.data.total_count, + payload: pagination.total, }) dispatch({ type: Types.SET_COMPETITIONS_COUNT, - payload: res.data.count, + payload: pagination.total <= pagination.page_size ? pagination.total : pagination.page_size, }) }) .catch((err) => { diff --git a/client/src/actions/roles.ts b/client/src/actions/roles.ts index 68b86b30e415daa1c5b00470fb5e86b1cb10bd74..810e13b1437ef0465039a89ea0b65dbbac3c3cb6 100644 --- a/client/src/actions/roles.ts +++ b/client/src/actions/roles.ts @@ -13,7 +13,7 @@ export const getRoles = () => async (dispatch: AppDispatch) => { .then((res) => { dispatch({ type: Types.SET_ROLES, - payload: res.data.items, + payload: res.data, }) }) .catch((err) => console.log(err)) diff --git a/client/src/actions/searchUser.ts b/client/src/actions/searchUser.ts index d47d4dd0903f57e1e298418bb72f43122b90407f..00f88c046c4c4d92afe400b063b4b8bed40cd87a 100644 --- a/client/src/actions/searchUser.ts +++ b/client/src/actions/searchUser.ts @@ -24,15 +24,17 @@ export const getSearchUsers = () => async (dispatch: AppDispatch, getState: () = .then((res) => { dispatch({ type: Types.SET_SEARCH_USERS, - payload: res.data.items, + payload: res.data, }) + + const pagination = JSON.parse(res.headers.pagination) dispatch({ type: Types.SET_SEARCH_USERS_TOTAL_COUNT, - payload: res.data.total_count, + payload: pagination.total, }) dispatch({ type: Types.SET_SEARCH_USERS_COUNT, - payload: res.data.count, + payload: pagination.total <= pagination.page_size ? pagination.total : pagination.page_size, }) }) .catch((err) => { diff --git a/client/src/pages/admin/competitions/CompetitionManager.tsx b/client/src/pages/admin/competitions/CompetitionManager.tsx index 0545102893ce342878602972d63c1dbe879ac59a..7d4266cd9790ca54652b2cd4c5072ee39dcae7ec 100644 --- a/client/src/pages/admin/competitions/CompetitionManager.tsx +++ b/client/src/pages/admin/competitions/CompetitionManager.tsx @@ -344,8 +344,8 @@ const CompetitionManager: React.FC = (props: any) => { rowsPerPageOptions={[]} rowsPerPage={filterParams.pageSize} count={competitionTotal} - page={filterParams.page} - onChangePage={(event, newPage) => handleFilterChange({ ...filterParams, page: newPage })} + page={filterParams.page - 1} + onChangePage={(event, newPage) => handleFilterChange({ ...filterParams, page: newPage + 1 })} /> <Menu id="simple-menu" anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}> <MenuItem onClick={handleStartCompetition}>Starta</MenuItem> diff --git a/client/src/pages/admin/users/AddUser.tsx b/client/src/pages/admin/users/AddUser.tsx index 05f5745c94dc58d6f851556b9571f4aeff7c45ac..cde3fa322dd236edbac13b664dfdafe3985bc56f 100644 --- a/client/src/pages/admin/users/AddUser.tsx +++ b/client/src/pages/admin/users/AddUser.tsx @@ -59,7 +59,7 @@ const AddUser: React.FC = (props: any) => { role_id: selectedRole?.id as number, } await axios - .post('/api/auth/signup', params) + .post('/api/users', params) .then(() => { actions.resetForm() setAnchorEl(null) diff --git a/client/src/pages/admin/users/EditUser.tsx b/client/src/pages/admin/users/EditUser.tsx index 44375e4a8b5382996ecf20720865bdf1ac161fde..9e9d5d2a1d61d235abf715f6c4075bd5f4439ffa 100644 --- a/client/src/pages/admin/users/EditUser.tsx +++ b/client/src/pages/admin/users/EditUser.tsx @@ -14,7 +14,7 @@ import { TextField, Theme, useMediaQuery, - useTheme, + useTheme } from '@material-ui/core' import MoreHorizIcon from '@material-ui/icons/MoreHoriz' import { Alert, AlertTitle } from '@material-ui/lab' @@ -110,7 +110,7 @@ const EditUser = ({ user }: UserIdProps) => { const handleDeleteUsers = async () => { setOpen(false) await axios - .delete(`/api/auth/delete/${user.id}`) + .delete(`/api/users/${user.id}`) .then(() => { setAnchorEl(null) dispatch(getSearchUsers()) diff --git a/client/src/pages/admin/users/UserManager.tsx b/client/src/pages/admin/users/UserManager.tsx index 9713e90f3159ee1d8cc91b2cc9916438a2537ab0..ed500dc27f3504d7707ba6b8e831dba4a4e52989 100644 --- a/client/src/pages/admin/users/UserManager.tsx +++ b/client/src/pages/admin/users/UserManager.tsx @@ -171,8 +171,8 @@ const UserManager: React.FC = (props: any) => { rowsPerPageOptions={[]} rowsPerPage={filterParams.pageSize} count={usersTotal} - page={filterParams.page} - onChangePage={(event, newPage) => handleFilterChange({ ...filterParams, page: newPage })} + page={filterParams.page - 1} + onChangePage={(event, newPage) => handleFilterChange({ ...filterParams, page: newPage + 1 })} /> </div> ) diff --git a/client/src/reducers/competitionsReducer.ts b/client/src/reducers/competitionsReducer.ts index 62b7006ebe0e379ab58774b6e317a1fdbe592d22..e7cab2058b2b903eb7c8f4e02904050701deff95 100644 --- a/client/src/reducers/competitionsReducer.ts +++ b/client/src/reducers/competitionsReducer.ts @@ -16,7 +16,7 @@ const initialState: CompetitionState = { competitions: [], total: 0, count: 0, - filterParams: { pageSize: 10, page: 0 }, + filterParams: { pageSize: 10, page: 1 }, } /** Intercept actions for competitions state and update the state */ diff --git a/client/src/reducers/searchUserReducer.ts b/client/src/reducers/searchUserReducer.ts index 1e78f8961e014714dd6f1a8b762902298a2287a2..4fea6ef9c12cdcce2d05c5a197ff046a25fc904d 100644 --- a/client/src/reducers/searchUserReducer.ts +++ b/client/src/reducers/searchUserReducer.ts @@ -16,7 +16,7 @@ const initialState: SearchUserState = { users: [], total: 0, count: 0, - filterParams: { pageSize: 10, page: 0 }, + filterParams: { pageSize: 10, page: 1 }, } /** Intercept actions for searchUser state and update the state */ diff --git a/server/app/__init__.py b/server/app/__init__.py index d6958c1921a68beed1b43aba3a85b998442aeae3..e1512dd590b55127e9aa54f2d9925aaa816a09f3 100644 --- a/server/app/__init__.py +++ b/server/app/__init__.py @@ -1,5 +1,7 @@ from flask import Flask, redirect, request from flask_uploads import configure_uploads +from flask_uploads.extensions import IMAGES +from flask_uploads.flask_uploads import UploadSet import app.database.models as models from app.apis import init_api @@ -25,8 +27,7 @@ def create_app(config_name="configmodule.DevelopmentConfig"): db.init_app(app) db.create_all() ma.init_app(app) - pass - # configure_uploads(app, (MediaDTO.image_set,)) + configure_uploads(app, (UploadSet("photos", IMAGES),)) # Init socket from app.core.sockets import sio diff --git a/server/app/apis/__init__.py b/server/app/apis/__init__.py index 316dc1521a4ee8e6be2bb99f9bd3abfebcef8d60..d33c768649d85edfdde1555ec389adb4e53fc51f 100644 --- a/server/app/apis/__init__.py +++ b/server/app/apis/__init__.py @@ -2,7 +2,9 @@ from functools import wraps from flask_jwt_extended import verify_jwt_in_request from flask_jwt_extended.utils import get_jwt -from flask_smorest import abort +from flask_smorest import Blueprint, abort + +Blueprint.PAGINATION_HEADER_FIELD_NAME = "pagination" class http_codes: