✨ 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 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")
|
||||||
|
@@ -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,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}',
|
||||||
|
@@ -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`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -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) }));
|
||||||
|
}
|
||||||
}))
|
}))
|
Reference in New Issue
Block a user