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

View File

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

View File

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

View File

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

View File

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