Add delete_user; refactor delete_item (#594)

This commit is contained in:
Alejandra
2024-02-13 09:25:58 -05:00
committed by GitHub
parent b4a1da918d
commit a88f637ed8
5 changed files with 58 additions and 7 deletions

View File

@@ -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")

View File

@@ -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")

View File

@@ -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}',

View File

@@ -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`,
},
});
}
}

View File

@@ -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) }));
}
}))