Browse Source

Add delete_user; refactor delete_item (#594)

pull/13907/head
Alejandra 1 year ago
committed by GitHub
parent
commit
a88f637ed8
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      src/backend/app/app/api/api_v1/endpoints/items.py
  2. 22
      src/backend/app/app/api/api_v1/endpoints/users.py
  3. 5
      src/new-frontend/src/client/services/ItemsService.ts
  4. 24
      src/new-frontend/src/client/services/UsersService.ts
  5. 6
      src/new-frontend/src/store/users-store.tsx

8
src/backend/app/app/api/api_v1/endpoints/items.py

@ -4,7 +4,7 @@ from fastapi import APIRouter, HTTPException
from sqlmodel import select from sqlmodel import select
from app.api.deps import CurrentUser, SessionDep from app.api.deps import CurrentUser, SessionDep
from app.models import Item, ItemCreate, ItemOut, ItemUpdate from app.models import Item, ItemCreate, ItemOut, ItemUpdate, Message
router = APIRouter() router = APIRouter()
@ -78,8 +78,8 @@ def update_item(
return item return item
@router.delete("/{id}", response_model=ItemOut) @router.delete("/{id}")
def delete_item(session: SessionDep, current_user: CurrentUser, id: int) -> Any: def delete_item(session: SessionDep, current_user: CurrentUser, id: int) -> Message:
""" """
Delete an item. Delete an item.
""" """
@ -90,4 +90,4 @@ def delete_item(session: SessionDep, current_user: CurrentUser, id: int) -> Any:
raise HTTPException(status_code=400, detail="Not enough permissions") raise HTTPException(status_code=400, detail="Not enough permissions")
session.delete(item) session.delete(item)
session.commit() session.commit()
return item return Message(message="Item deleted successfully")

22
src/backend/app/app/api/api_v1/endpoints/users.py

@ -11,6 +11,7 @@ from app.api.deps import (
) )
from app.core.config import settings from app.core.config import settings
from app.models import ( from app.models import (
Message,
User, User,
UserCreate, UserCreate,
UserCreateOpen, UserCreateOpen,
@ -151,3 +152,24 @@ def update_user(
# ) # )
# user = crud.user.update(session, db_obj=user, obj_in=user_in) # user = crud.user.update(session, db_obj=user, obj_in=user_in)
# return user # return user
@router.delete("/{user_id}")
def delete_user(
session: SessionDep, current_user: CurrentUser, user_id: int
) -> Message:
"""
Delete a user.
"""
user = session.get(User, user_id)
if not user:
raise HTTPException(status_code=404, detail="User not found")
if not current_user.is_superuser:
raise HTTPException(status_code=400, detail="Not enough permissions")
if user == current_user:
raise HTTPException(
status_code=400, detail="Users are not allowed to delete themselves"
)
session.delete(user)
session.commit()
return Message(message="User deleted successfully")

5
src/new-frontend/src/client/services/ItemsService.ts

@ -5,6 +5,7 @@
import type { ItemCreate } from '../models/ItemCreate'; import type { ItemCreate } from '../models/ItemCreate';
import type { ItemOut } from '../models/ItemOut'; import type { ItemOut } from '../models/ItemOut';
import type { ItemUpdate } from '../models/ItemUpdate'; import type { ItemUpdate } from '../models/ItemUpdate';
import type { Message } from '../models/Message';
import type { CancelablePromise } from '../core/CancelablePromise'; import type { CancelablePromise } from '../core/CancelablePromise';
import { OpenAPI } from '../core/OpenAPI'; import { OpenAPI } from '../core/OpenAPI';
@ -113,14 +114,14 @@ requestBody: ItemUpdate,
/** /**
* Delete Item * Delete Item
* Delete an item. * Delete an item.
* @returns ItemOut Successful Response * @returns Message Successful Response
* @throws ApiError * @throws ApiError
*/ */
public static deleteItem({ public static deleteItem({
id, id,
}: { }: {
id: number, id: number,
}): CancelablePromise<ItemOut> { }): CancelablePromise<Message> {
return __request(OpenAPI, { return __request(OpenAPI, {
method: 'DELETE', method: 'DELETE',
url: '/api/v1/items/{id}', url: '/api/v1/items/{id}',

24
src/new-frontend/src/client/services/UsersService.ts

@ -2,6 +2,7 @@
/* istanbul ignore file */ /* istanbul ignore file */
/* tslint:disable */ /* tslint:disable */
/* eslint-disable */ /* eslint-disable */
import type { Message } from '../models/Message';
import type { UserCreate } from '../models/UserCreate'; import type { UserCreate } from '../models/UserCreate';
import type { UserCreateOpen } from '../models/UserCreateOpen'; import type { UserCreateOpen } from '../models/UserCreateOpen';
import type { UserOut } from '../models/UserOut'; import type { UserOut } from '../models/UserOut';
@ -169,4 +170,27 @@ requestBody: UserUpdate,
}); });
} }
/**
* Delete User
* Delete a user.
* @returns Message Successful Response
* @throws ApiError
*/
public static deleteUser({
userId,
}: {
userId: number,
}): CancelablePromise<Message> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/api/v1/users/{user_id}',
path: {
'user_id': userId,
},
errors: {
422: `Validation Error`,
},
});
}
} }

6
src/new-frontend/src/store/users-store.tsx

@ -5,6 +5,7 @@ interface UsersStore {
users: UserOut[]; users: UserOut[];
getUsers: () => Promise<void>; getUsers: () => Promise<void>;
addUser: (user: UserCreate) => Promise<void>; addUser: (user: UserCreate) => Promise<void>;
deleteUser: (id: number) => Promise<void>;
} }
export const useUsersStore = create<UsersStore>((set) => ({ export const useUsersStore = create<UsersStore>((set) => ({
@ -17,5 +18,8 @@ export const useUsersStore = create<UsersStore>((set) => ({
const userResponse = await UsersService.createUser({ requestBody: user }); const userResponse = await UsersService.createUser({ requestBody: user });
set((state) => ({ users: [...state.users, userResponse] })); set((state) => ({ users: [...state.users, userResponse] }));
}, },
// TODO: Add delete user deleteUser: async (id: number) => {
await UsersService.deleteUser({ userId: id });
set((state) => ({ users: state.users.filter((user) => user.id !== id) }));
}
})) }))
Loading…
Cancel
Save