✨ Add delete_user; refactor delete_item (#594)
This commit is contained in:
@@ -4,7 +4,7 @@ from fastapi import APIRouter, HTTPException
|
||||
from sqlmodel import select
|
||||
|
||||
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()
|
||||
|
||||
@@ -78,8 +78,8 @@ def update_item(
|
||||
return item
|
||||
|
||||
|
||||
@router.delete("/{id}", response_model=ItemOut)
|
||||
def delete_item(session: SessionDep, current_user: CurrentUser, id: int) -> Any:
|
||||
@router.delete("/{id}")
|
||||
def delete_item(session: SessionDep, current_user: CurrentUser, id: int) -> Message:
|
||||
"""
|
||||
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")
|
||||
session.delete(item)
|
||||
session.commit()
|
||||
return item
|
||||
return Message(message="Item deleted successfully")
|
||||
|
@@ -11,6 +11,7 @@ from app.api.deps import (
|
||||
)
|
||||
from app.core.config import settings
|
||||
from app.models import (
|
||||
Message,
|
||||
User,
|
||||
UserCreate,
|
||||
UserCreateOpen,
|
||||
@@ -151,3 +152,24 @@ def update_user(
|
||||
# )
|
||||
# user = crud.user.update(session, db_obj=user, obj_in=user_in)
|
||||
# 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,6 +5,7 @@
|
||||
import type { ItemCreate } from '../models/ItemCreate';
|
||||
import type { ItemOut } from '../models/ItemOut';
|
||||
import type { ItemUpdate } from '../models/ItemUpdate';
|
||||
import type { Message } from '../models/Message';
|
||||
|
||||
import type { CancelablePromise } from '../core/CancelablePromise';
|
||||
import { OpenAPI } from '../core/OpenAPI';
|
||||
@@ -113,14 +114,14 @@ requestBody: ItemUpdate,
|
||||
/**
|
||||
* Delete Item
|
||||
* Delete an item.
|
||||
* @returns ItemOut Successful Response
|
||||
* @returns Message Successful Response
|
||||
* @throws ApiError
|
||||
*/
|
||||
public static deleteItem({
|
||||
id,
|
||||
}: {
|
||||
id: number,
|
||||
}): CancelablePromise<ItemOut> {
|
||||
}): CancelablePromise<Message> {
|
||||
return __request(OpenAPI, {
|
||||
method: 'DELETE',
|
||||
url: '/api/v1/items/{id}',
|
||||
|
@@ -2,6 +2,7 @@
|
||||
/* istanbul ignore file */
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
import type { Message } from '../models/Message';
|
||||
import type { UserCreate } from '../models/UserCreate';
|
||||
import type { UserCreateOpen } from '../models/UserCreateOpen';
|
||||
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`,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@ interface UsersStore {
|
||||
users: UserOut[];
|
||||
getUsers: () => Promise<void>;
|
||||
addUser: (user: UserCreate) => Promise<void>;
|
||||
deleteUser: (id: number) => Promise<void>;
|
||||
}
|
||||
|
||||
export const useUsersStore = create<UsersStore>((set) => ({
|
||||
@@ -17,5 +18,8 @@ export const useUsersStore = create<UsersStore>((set) => ({
|
||||
const userResponse = await UsersService.createUser({ requestBody: user });
|
||||
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) }));
|
||||
}
|
||||
}))
|
Reference in New Issue
Block a user