|
@@ -1,3 +1,4 @@
|
|
|
|
|
+import mongoose from "mongoose";
|
|
|
import {
|
|
import {
|
|
|
Menu
|
|
Menu
|
|
|
} from "../../../models";
|
|
} from "../../../models";
|
|
@@ -12,33 +13,48 @@ const deleteMenu = async (userID: string, input: DeleteMenuInput): Promise<Delet
|
|
|
menuIDs
|
|
menuIDs
|
|
|
} = input;
|
|
} = input;
|
|
|
|
|
|
|
|
- const menu = await Menu.findOne({
|
|
|
|
|
|
|
+ // Erken Çıkış
|
|
|
|
|
+ if (menuIDs.length === 0) {
|
|
|
|
|
+ return {
|
|
|
|
|
+ message: "menuIDs-cannot-be-empty",
|
|
|
|
|
+ code: 400
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // KESİNLİKLE YAPILMASI GEREKEN TİP DÖNÜŞÜMÜ
|
|
|
|
|
+ const objectIdArray = menuIDs.map(id => new mongoose.Types.ObjectId(id));
|
|
|
|
|
+
|
|
|
|
|
+ // KULLANICININ İSTEDİĞİ MENÜLER GERÇEKTEN VAR MI
|
|
|
|
|
+ // findOne yerine gönderilen ID sayısıyla, bulunan ID sayısını karşılaştırıyoruz
|
|
|
|
|
+ const existingMenusCount = await Menu.countDocuments({
|
|
|
_id: {
|
|
_id: {
|
|
|
- $in: menuIDs
|
|
|
|
|
|
|
+ $in: objectIdArray
|
|
|
},
|
|
},
|
|
|
- userID
|
|
|
|
|
|
|
+ userID: userID
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- if (!menu) {
|
|
|
|
|
|
|
+ // Kullanıcı 3 ID yolladı ama DB'de 2 tane bulduysak, biri uydurma veya başkasının menüsüdür.
|
|
|
|
|
+ if (existingMenusCount !== objectIdArray.length) {
|
|
|
return {
|
|
return {
|
|
|
- message: "menu-not-found",
|
|
|
|
|
|
|
+ message: "one-or-more-menus-not-found-or-unauthorized",
|
|
|
code: 404
|
|
code: 404
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const activeMenuCount = await Menu.countDocuments({ // kullanıcının toplam aktif menü sayısı
|
|
|
|
|
- userID,
|
|
|
|
|
|
|
+ const activeMenuCount = await Menu.countDocuments({
|
|
|
|
|
+ userID: userID,
|
|
|
isActive: true
|
|
isActive: true
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- const deletingActiveCount = await Menu.countDocuments({ //silinmek istenen menüler arasında kaç tane aktif var
|
|
|
|
|
|
|
+ const deletingActiveCount = await Menu.countDocuments({
|
|
|
_id: {
|
|
_id: {
|
|
|
- $in: menuIDs
|
|
|
|
|
|
|
+ $in: objectIdArray
|
|
|
},
|
|
},
|
|
|
- userID,
|
|
|
|
|
|
|
+ userID: userID,
|
|
|
isActive: true
|
|
isActive: true
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ // Kullanıcının en az 1 tane aktif menüsü kalmak zorundadır
|
|
|
if (activeMenuCount - deletingActiveCount < 1) {
|
|
if (activeMenuCount - deletingActiveCount < 1) {
|
|
|
return {
|
|
return {
|
|
|
message: "cannot-delete-last-active-menu",
|
|
message: "cannot-delete-last-active-menu",
|
|
@@ -48,9 +64,9 @@ const deleteMenu = async (userID: string, input: DeleteMenuInput): Promise<Delet
|
|
|
|
|
|
|
|
await Menu.deleteMany({
|
|
await Menu.deleteMany({
|
|
|
_id: {
|
|
_id: {
|
|
|
- $in: menuIDs
|
|
|
|
|
|
|
+ $in: objectIdArray
|
|
|
},
|
|
},
|
|
|
- userID
|
|
|
|
|
|
|
+ userID: userID
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
return {
|
|
return {
|