remove unused modules

This commit is contained in:
2026-01-07 12:24:55 +03:30
parent f2284c103d
commit 560b2983f3
150 changed files with 1853 additions and 96521 deletions
+52 -52
View File
@@ -1742,8 +1742,8 @@
"default": "true",
"mappedType": "boolean"
},
"food_categories": {
"name": "food_categories",
"product_categories": {
"name": "product_categories",
"type": "jsonb",
"unsigned": false,
"autoincrement": false,
@@ -1751,8 +1751,8 @@
"nullable": true,
"mappedType": "json"
},
"foods": {
"name": "foods",
"products": {
"name": "products",
"type": "jsonb",
"unsigned": false,
"autoincrement": false,
@@ -2404,11 +2404,11 @@
"mappedType": "boolean"
}
},
"name": "foods",
"name": "products",
"schema": "public",
"indexes": [
{
"keyName": "foods_created_at_index",
"keyName": "products_created_at_index",
"columnNames": [
"created_at"
],
@@ -2418,7 +2418,7 @@
"unique": false
},
{
"keyName": "foods_deleted_at_index",
"keyName": "products_deleted_at_index",
"columnNames": [
"deleted_at"
],
@@ -2428,7 +2428,7 @@
"unique": false
},
{
"keyName": "foods_is_active_index",
"keyName": "products_is_active_index",
"columnNames": [
"is_active"
],
@@ -2438,7 +2438,7 @@
"unique": false
},
{
"keyName": "foods_category_id_is_active_index",
"keyName": "products_category_id_is_active_index",
"columnNames": [
"category_id",
"is_active"
@@ -2449,7 +2449,7 @@
"unique": false
},
{
"keyName": "foods_restaurant_id_is_active_index",
"keyName": "products_restaurant_id_is_active_index",
"columnNames": [
"restaurant_id",
"is_active"
@@ -2460,7 +2460,7 @@
"unique": false
},
{
"keyName": "foods_pkey",
"keyName": "products_pkey",
"columnNames": [
"id"
],
@@ -2472,24 +2472,24 @@
],
"checks": [],
"foreignKeys": {
"foods_restaurant_id_foreign": {
"constraintName": "foods_restaurant_id_foreign",
"products_restaurant_id_foreign": {
"constraintName": "products_restaurant_id_foreign",
"columnNames": [
"restaurant_id"
],
"localTableName": "public.foods",
"localTableName": "public.products",
"referencedColumnNames": [
"id"
],
"referencedTableName": "public.restaurants",
"updateRule": "cascade"
},
"foods_category_id_foreign": {
"constraintName": "foods_category_id_foreign",
"products_category_id_foreign": {
"constraintName": "products_category_id_foreign",
"columnNames": [
"category_id"
],
"localTableName": "public.foods",
"localTableName": "public.products",
"referencedColumnNames": [
"id"
],
@@ -2543,8 +2543,8 @@
"length": 6,
"mappedType": "datetime"
},
"food_id": {
"name": "food_id",
"product_id": {
"name": "product_id",
"type": "char(26)",
"unsigned": false,
"autoincrement": false,
@@ -2577,10 +2577,10 @@
"indexes": [
{
"columnNames": [
"food_id"
"product_id"
],
"composite": false,
"keyName": "inventory_food_id_unique",
"keyName": "inventory_product_id_unique",
"constraint": true,
"primary": false,
"unique": true
@@ -2618,16 +2618,16 @@
],
"checks": [],
"foreignKeys": {
"inventory_food_id_foreign": {
"constraintName": "inventory_food_id_foreign",
"inventory_product_id_foreign": {
"constraintName": "inventory_product_id_foreign",
"columnNames": [
"food_id"
"product_id"
],
"localTableName": "public.inventory",
"referencedColumnNames": [
"id"
],
"referencedTableName": "public.foods",
"referencedTableName": "public.products",
"deleteRule": "cascade",
"updateRule": "cascade"
}
@@ -4288,8 +4288,8 @@
"length": 26,
"mappedType": "character"
},
"food_id": {
"name": "food_id",
"product_id": {
"name": "product_id",
"type": "char(26)",
"unsigned": false,
"autoincrement": false,
@@ -4405,9 +4405,9 @@
"unique": false
},
{
"keyName": "reviews_food_id_status_index",
"keyName": "reviews_product_id_status_index",
"columnNames": [
"food_id",
"product_id",
"status"
],
"composite": true,
@@ -4416,10 +4416,10 @@
"unique": false
},
{
"keyName": "reviews_order_id_food_id_user_id_unique",
"keyName": "reviews_order_id_product_id_user_id_unique",
"columnNames": [
"order_id",
"food_id",
"product_id",
"user_id"
],
"composite": true,
@@ -4452,16 +4452,16 @@
"referencedTableName": "public.orders",
"updateRule": "cascade"
},
"reviews_food_id_foreign": {
"constraintName": "reviews_food_id_foreign",
"reviews_product_id_foreign": {
"constraintName": "reviews_product_id_foreign",
"columnNames": [
"food_id"
"product_id"
],
"localTableName": "public.reviews",
"referencedColumnNames": [
"id"
],
"referencedTableName": "public.foods",
"referencedTableName": "public.products",
"updateRule": "cascade"
},
"reviews_user_id_foreign": {
@@ -4780,8 +4780,8 @@
"length": 26,
"mappedType": "character"
},
"food_id": {
"name": "food_id",
"product_id": {
"name": "product_id",
"type": "char(26)",
"unsigned": false,
"autoincrement": false,
@@ -4858,9 +4858,9 @@
"unique": false
},
{
"keyName": "order_items_food_id_index",
"keyName": "order_items_product_id_index",
"columnNames": [
"food_id"
"product_id"
],
"composite": false,
"constraint": false,
@@ -4902,16 +4902,16 @@
"referencedTableName": "public.orders",
"updateRule": "cascade"
},
"order_items_food_id_foreign": {
"constraintName": "order_items_food_id_foreign",
"order_items_product_id_foreign": {
"constraintName": "order_items_product_id_foreign",
"columnNames": [
"food_id"
"product_id"
],
"localTableName": "public.order_items",
"referencedColumnNames": [
"id"
],
"referencedTableName": "public.foods",
"referencedTableName": "public.products",
"updateRule": "cascade"
}
},
@@ -5159,8 +5159,8 @@
"length": 26,
"mappedType": "character"
},
"food_id": {
"name": "food_id",
"product_id": {
"name": "product_id",
"type": "char(26)",
"unsigned": false,
"autoincrement": false,
@@ -5194,10 +5194,10 @@
"unique": false
},
{
"keyName": "favorites_user_id_food_id_unique",
"keyName": "favorites_user_id_product_id_unique",
"columnNames": [
"user_id",
"food_id"
"product_id"
],
"composite": true,
"constraint": true,
@@ -5229,16 +5229,16 @@
"referencedTableName": "public.users",
"updateRule": "cascade"
},
"favorites_food_id_foreign": {
"constraintName": "favorites_food_id_foreign",
"favorites_product_id_foreign": {
"constraintName": "favorites_product_id_foreign",
"columnNames": [
"food_id"
"product_id"
],
"localTableName": "public.favorites",
"referencedColumnNames": [
"id"
],
"referencedTableName": "public.foods",
"referencedTableName": "public.products",
"updateRule": "cascade"
}
},
@@ -5650,4 +5650,4 @@
}
],
"nativeEnums": {}
}
}
-41
View File
@@ -1,41 +0,0 @@
# Icon Naming Process
## Files Created:
- `icons.csv` - Updated with "icon_name" column
- `icon_viewer.html` - Web interface to view and name icons
- `populate_icon_names.js` - Script to add names to CSV
## Step-by-Step Process:
### 1. View the Icons
- Open `icon_viewer.html` in your web browser
- You'll see all 138 icons in a grid layout
- Each icon shows its number and has an input field for naming
### 2. Name the Icons
- Look at each icon and enter appropriate names in the input fields
- The progress counter shows how many you've named
- Names should be descriptive (e.g., "hamburger", "pizza", "coffee", "delivery")
### 3. Export Named Icons (Optional)
- Click "Export Named Icons" to download a CSV of only the named icons
- This helps you review your naming before finalizing
### 4. Update the Main CSV
- Edit `populate_icon_names.js`
- Replace the placeholder names in the `iconNames` array with your actual names
- Run the script: `node populate_icon_names.js`
## Example Icon Names:
- Food items: "pizza", "burger", "pasta", "salad"
- Drinks: "coffee", "soda", "juice", "beer"
- Categories: "fast_food", "italian", "asian", "desserts"
- Actions: "delivery", "pickup", "favorite", "cart"
## Tips:
- Use consistent naming conventions (snake_case or camelCase)
- Keep names short but descriptive
- Group similar icons with consistent prefixes if applicable
- Review all names before running the populate script
The final CSV will have all original columns plus the new "icon_name" column with your custom names.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-80
View File
@@ -1,80 +0,0 @@
#!/bin/bash
# Script to dump icon and icon_groups tables from PostgreSQL database
# Usage: ./dump-icons.sh [output_file]
set -e
# Load environment variables if .env file exists
if [ -f .env ]; then
set -a
# Source .env file, handling comments and empty lines
while IFS= read -r line || [ -n "$line" ]; do
# Remove leading/trailing whitespace
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
# Skip empty lines and lines starting with #
[[ -z "$line" ]] && continue
[[ "$line" =~ ^# ]] && continue
# Remove inline comments (everything after # that's not in quotes)
line=$(echo "$line" | sed 's/#.*$//' | sed 's/[[:space:]]*$//')
# Skip if line is empty after removing comments
[[ -z "$line" ]] && continue
# Export the variable (only if it looks like KEY=VALUE)
if [[ "$line" =~ ^[[:alpha:]_][[:alnum:]_]*= ]]; then
export "$line" 2>/dev/null || true
fi
done < .env
set +a
fi
# Get database connection details from environment variables
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
DB_NAME="${DB_NAME:-dmenu}"
DB_USER="${DB_USER:-postgres}"
# Output file name (default: icons_dump_YYYYMMDD_HHMMSS.sql)
if [ -z "$1" ]; then
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
OUTPUT_FILE="icons_dump_${TIMESTAMP}.sql"
else
OUTPUT_FILE="$1"
fi
echo "Dumping icon_groups and icons tables..."
echo "Database: ${DB_NAME}@${DB_HOST}:${DB_PORT}"
echo "Output file: ${OUTPUT_FILE}"
# Dump icon_groups table first (parent table)
echo "Dumping icon_groups table..."
PGPASSWORD="${DB_PASS}" pg_dump \
-h "${DB_HOST}" \
-p "${DB_PORT}" \
-U "${DB_USER}" \
-d "${DB_NAME}" \
-t icon_groups \
--data-only \
--column-inserts \
--no-owner \
--no-privileges \
> "${OUTPUT_FILE}"
# Append icons table to the dump file
echo "Dumping icons table..."
PGPASSWORD="${DB_PASS}" pg_dump \
-h "${DB_HOST}" \
-p "${DB_PORT}" \
-U "${DB_USER}" \
-d "${DB_NAME}" \
-t icons \
--data-only \
--column-inserts \
--no-owner \
--no-privileges \
>> "${OUTPUT_FILE}"
echo "Dump completed successfully!"
echo "File saved to: ${OUTPUT_FILE}"
echo ""
echo "To restore, run: ./restore-icons.sh ${OUTPUT_FILE}"
-312
View File
@@ -1,312 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Icon Viewer - Name the Icons</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f5f5f5;
}
.header {
background-color: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
margin-bottom: 20px;
}
.icon-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
gap: 20px;
padding: 20px;
}
.icon-item {
background: white;
border-radius: 8px;
padding: 15px;
text-align: center;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
transition: transform 0.2s;
}
.icon-item:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.15);
}
.icon-img {
width: 48px;
height: 48px;
margin-bottom: 10px;
}
.icon-id {
font-size: 12px;
color: #666;
margin-bottom: 5px;
}
.icon-name {
font-weight: bold;
color: #333;
min-height: 40px;
display: flex;
align-items: center;
justify-content: center;
}
.input-field {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
margin-top: 5px;
}
.save-btn {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
margin-top: 20px;
}
.save-btn:hover {
background-color: #0056b3;
}
.progress {
margin-bottom: 20px;
font-size: 14px;
color: #666;
}
</style>
</head>
<body>
<div class="header">
<h1>Icon Name Editor</h1>
<p>Review each icon below and enter appropriate names. Names will be saved back to the CSV file.</p>
<div class="progress">
<span id="completed-count">0</span> of <span id="total-count">138</span> icons named
</div>
<button class="save-btn" onclick="saveToCSV()">Save Names to CSV</button>
<button class="save-btn" onclick="exportNamedIcons()" style="margin-left: 10px; background-color: #28a745;">Export Named Icons</button>
</div>
<div class="icon-grid" id="iconGrid">
<!-- Icons will be loaded here -->
</div>
<script>
const icons = [
"https://storage.danakcorp.com/images/1766554365832-411750172.svg",
"https://storage.danakcorp.com/images/1766554379149-104970938.svg",
"https://storage.danakcorp.com/images/1766554389090-593863597.svg",
"https://storage.danakcorp.com/images/1766554404968-905984091.svg",
"https://storage.danakcorp.com/images/1766554415325-873800591.svg",
"https://storage.danakcorp.com/images/1766554428814-77027818.svg",
"https://storage.danakcorp.com/images/1766554438632-45072052.svg",
"https://storage.danakcorp.com/images/1766554446340-463157109.svg",
"https://storage.danakcorp.com/images/1766554456605-280166176.svg",
"https://storage.danakcorp.com/images/1766554471887-315640495.svg",
"https://storage.danakcorp.com/images/1766554485634-242317100.svg",
"https://storage.danakcorp.com/images/1766554504553-157481346.svg",
"https://storage.danakcorp.com/images/1766554528198-919877647.svg",
"https://storage.danakcorp.com/images/1766554544140-886744157.svg",
"https://storage.danakcorp.com/images/1766554565614-684869010.svg",
"https://storage.danakcorp.com/images/1766554578855-318583145.svg",
"https://storage.danakcorp.com/images/1766554593272-362758712.svg",
"https://storage.danakcorp.com/images/1766554606166-877198688.svg",
"https://storage.danakcorp.com/images/1766554624133-21439996.svg",
"https://storage.danakcorp.com/images/1766554641691-535696200.svg",
"https://storage.danakcorp.com/images/1766554658481-114730426.svg",
"https://storage.danakcorp.com/images/1766554671760-634916570.svg",
"https://storage.danakcorp.com/images/1766554967381-660612838.svg",
"https://storage.danakcorp.com/images/1766555106925-267924006.svg",
"https://storage.danakcorp.com/images/1766555231674-387319393.svg",
"https://storage.danakcorp.com/images/1766555290519-155637622.svg",
"https://storage.danakcorp.com/images/1766555308301-230359494.svg",
"https://storage.danakcorp.com/images/1766555420851-186440015.svg",
"https://storage.danakcorp.com/images/1766555590828-644527730.svg",
"https://storage.danakcorp.com/images/1766555606997-571682462.svg",
"https://storage.danakcorp.com/images/1766555663659-433052581.svg",
"https://storage.danakcorp.com/images/1766555713098-988242030.svg",
"https://storage.danakcorp.com/images/1766555726158-680948882.svg",
"https://storage.danakcorp.com/images/1766555746650-426516324.svg",
"https://storage.danakcorp.com/images/1766555765798-127083646.svg",
"https://storage.danakcorp.com/images/1766555784837-243715698.svg",
"https://storage.danakcorp.com/images/1766555799191-594035927.svg",
"https://storage.danakcorp.com/images/1766555894624-524350777.svg",
"https://storage.danakcorp.com/images/1766555932114-485954688.svg",
"https://storage.danakcorp.com/images/1766555949650-909996041.svg",
"https://storage.danakcorp.com/images/1766555966861-75517122.svg",
"https://storage.danakcorp.com/images/1766556006875-239689681.svg",
"https://storage.danakcorp.com/images/1766556257163-459958715.svg",
"https://storage.danakcorp.com/images/1766556293812-665835248.svg",
"https://storage.danakcorp.com/images/1766556307082-162280793.svg",
"https://storage.danakcorp.com/images/1766556340402-744632392.svg",
"https://storage.danakcorp.com/images/1766556458335-857124841.svg",
"https://storage.danakcorp.com/images/1766556479530-161860621.svg",
"https://storage.danakcorp.com/images/1766556498215-91175544.svg",
"https://storage.danakcorp.com/images/1766556677355-108854669.svg",
"https://storage.danakcorp.com/images/1766556736283-691587656.svg",
"https://storage.danakcorp.com/images/1766556759367-58066921.svg",
"https://storage.danakcorp.com/images/1766556777353-490756125.svg",
"https://storage.danakcorp.com/images/1766556870740-118553581.svg",
"https://storage.danakcorp.com/images/1766556890334-962678132.svg",
"https://storage.danakcorp.com/images/1766556921029-865260745.svg",
"https://storage.danakcorp.com/images/1766556946363-320833501.svg",
"https://storage.danakcorp.com/images/1766556973771-832565827.svg",
"https://storage.danakcorp.com/images/1766557056358-727862983.svg",
"https://storage.danakcorp.com/images/1766557199259-72955190.svg",
"https://storage.danakcorp.com/images/1766557252452-988016525.svg",
"https://storage.danakcorp.com/images/1766557274778-439028456.svg",
"https://storage.danakcorp.com/images/1766557289094-415104854.svg",
"https://storage.danakcorp.com/images/1766557300923-302277606.svg",
"https://storage.danakcorp.com/images/1766557317091-602116315.svg",
"https://storage.danakcorp.com/images/1766557647999-47333939.svg",
"https://storage.danakcorp.com/images/1766557669282-172512141.svg",
"https://storage.danakcorp.com/images/1766557705283-692546793.svg",
"https://storage.danakcorp.com/images/1766557729175-762576743.svg",
"https://storage.danakcorp.com/images/1766557756487-665300947.svg",
"https://storage.danakcorp.com/images/1766557776067-804149228.svg",
"https://storage.danakcorp.com/images/1766557797509-101726352.svg",
"https://storage.danakcorp.com/images/1766557816484-357699340.svg",
"https://storage.danakcorp.com/images/1766557837292-326521286.svg",
"https://storage.danakcorp.com/images/1766559083575-564721059.svg",
"https://storage.danakcorp.com/images/1766559099561-720966516.svg",
"https://storage.danakcorp.com/images/1766559116496-834964990.svg",
"https://storage.danakcorp.com/images/1766563021426-600579018.svg",
"https://storage.danakcorp.com/images/1766563038525-727531190.svg",
"https://storage.danakcorp.com/images/1766563051485-824602001.svg",
"https://storage.danakcorp.com/images/1766563066017-372210647.svg",
"https://storage.danakcorp.com/images/1766563124296-331607800.svg",
"https://storage.danakcorp.com/images/1766563142133-359920423.svg",
"https://storage.danakcorp.com/images/1766563164270-350101986.svg",
"https://storage.danakcorp.com/images/1766563181587-86630830.svg",
"https://storage.danakcorp.com/images/1766563204966-651499380.svg",
"https://storage.danakcorp.com/images/1766563220596-103699525.svg",
"https://storage.danakcorp.com/images/1766563265634-373953449.svg",
"https://storage.danakcorp.com/images/1766563275517-958045207.svg",
"https://storage.danakcorp.com/images/1766563286526-622849562.svg",
"https://storage.danakcorp.com/images/1766564695339-504553420.svg",
"https://storage.danakcorp.com/images/1766564706032-159367016.svg",
"https://storage.danakcorp.com/images/1766564720683-887818252.svg",
"https://storage.danakcorp.com/images/1766564734432-483528219.svg",
"https://storage.danakcorp.com/images/1766564750099-854146988.svg",
"https://storage.danakcorp.com/images/1766564758573-696060786.svg",
"https://storage.danakcorp.com/images/1766564805823-829938380.svg",
"https://storage.danakcorp.com/images/1766564891137-468827500.svg",
"https://storage.danakcorp.com/images/1766564907215-921380792.svg",
"https://storage.danakcorp.com/images/1766564926872-672612697.svg",
"https://storage.danakcorp.com/images/1766565459604-638026702.svg",
"https://storage.danakcorp.com/images/1766565476771-42527917.svg",
"https://storage.danakcorp.com/images/1766565491264-946731491.svg",
"https://storage.danakcorp.com/images/1766565502475-288189136.svg",
"https://storage.danakcorp.com/images/1766565530628-800474580.svg",
"https://storage.danakcorp.com/images/1766565547983-878658938.svg",
"https://storage.danakcorp.com/images/1766565563263-891688321.svg",
"https://storage.danakcorp.com/images/1766565600547-704332792.svg",
"https://storage.danakcorp.com/images/1766565625437-528383713.svg",
"https://storage.danakcorp.com/images/1766565641620-53176909.svg",
"https://storage.danakcorp.com/images/1766565664427-433669317.svg",
"https://storage.danakcorp.com/images/1766565971515-159903323.svg",
"https://storage.danakcorp.com/images/1766565995424-288101561.svg",
"https://storage.danakcorp.com/images/1766566026942-868807643.svg",
"https://storage.danakcorp.com/images/1766566041525-973019175.svg",
"https://storage.danakcorp.com/images/1766566064741-271844433.svg",
"https://storage.danakcorp.com/images/1766566084368-438871956.svg",
"https://storage.danakcorp.com/images/1766566106954-47179607.svg",
"https://storage.danakcorp.com/images/1766566122836-486871124.svg",
"https://storage.danakcorp.com/images/1766566143171-668309076.svg",
"https://storage.danakcorp.com/images/1766566161551-844376214.svg",
"https://storage.danakcorp.com/images/1766566176755-30806596.svg",
"https://storage.danakcorp.com/images/1766566193720-339416210.svg",
"https://storage.danakcorp.com/images/1766566293736-981836756.svg",
"https://storage.danakcorp.com/images/1766566304318-193301989.svg",
"https://storage.danakcorp.com/images/1766566327768-2675508.svg",
"https://storage.danakcorp.com/images/1766566341717-462491426.svg",
"https://storage.danakcorp.com/images/1766566357028-432111036.svg",
"https://storage.danakcorp.com/images/1766566371354-279596850.svg",
"https://storage.danakcorp.com/images/1766566385674-569493499.svg",
"https://storage.danakcorp.com/images/1766566413058-975642584.svg",
"https://storage.danakcorp.com/images/1766566427440-982841441.svg",
"https://storage.danakcorp.com/images/1766566442808-761588425.svg",
"https://storage.danakcorp.com/images/1766566468108-519151895.svg",
"https://storage.danakcorp.com/images/1766566482278-661272876.svg",
"https://storage.danakcorp.com/images/1766566494050-408184442.svg",
"https://storage.danakcorp.com/images/1766566504760-709260995.svg"
];
const iconNames = new Array(icons.length).fill('');
function loadIcons() {
const grid = document.getElementById('iconGrid');
icons.forEach((url, index) => {
const item = document.createElement('div');
item.className = 'icon-item';
item.innerHTML = `
<div class="icon-id">Icon ${index + 1}</div>
<img src="${url}" alt="Icon ${index + 1}" class="icon-img" onerror="this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiBmaWxsPSIjZGRkIi8+Cjx0ZXh0IHg9IjI0IiB5PSIyNCIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEyIiBmaWxsPSIjOTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBkeT0iMC4zNWVtIj5ObyBJY29uPC90ZXh0Pgo8L3N2Zz4='">
<input type="text" class="input-field" placeholder="Enter icon name..." oninput="updateName(${index}, this.value)">
`;
grid.appendChild(item);
});
}
function updateName(index, name) {
iconNames[index] = name.trim();
updateProgress();
}
function updateProgress() {
const completed = iconNames.filter(name => name.length > 0).length;
document.getElementById('completed-count').textContent = completed;
}
function saveToCSV() {
// This will create a downloadable CSV with the names
let csvContent = '"id","created_at","updated_at","deleted_at","url","group_id","icon_name"\n';
// You'll need to load the original CSV data here and add the names
// For now, this is a placeholder - you'd need to combine with original data
const blob = new Blob([csvContent], { type: 'text/csv' });
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'icons_with_names.csv';
a.click();
window.URL.revokeObjectURL(url);
alert('CSV template downloaded. You\'ll need to manually add the icon names to the original CSV file.');
}
function exportNamedIcons() {
const namedIcons = [];
iconNames.forEach((name, index) => {
if (name.trim()) {
namedIcons.push({
index: index + 1,
name: name.trim(),
url: icons[index]
});
}
});
const csvContent = 'Index,Name,URL\n' +
namedIcons.map(icon => `${icon.index},"${icon.name}","${icon.url}"`).join('\n');
const blob = new Blob([csvContent], { type: 'text/csv' });
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'named_icons.csv';
a.click();
window.URL.revokeObjectURL(url);
}
// Load icons when page loads
window.onload = loadIcons;
</script>
</body>
</html>
-138
View File
@@ -1,138 +0,0 @@
"id","created_at","updated_at","deleted_at","url","group_id","icon_name"
"01KD7DGWH6TDB47V4710FDT7SR","2025-12-24 05:32:46.503+00","2025-12-24 05:32:46.503+00",NULL,"https://storage.danakcorp.com/images/1766554365832-411750172.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DH9F6BN4TEM96TA2QT4GJ","2025-12-24 05:32:59.751+00","2025-12-24 05:32:59.751+00",NULL,"https://storage.danakcorp.com/images/1766554379149-104970938.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DHK6ZTEGPRBNXJPV49TE6","2025-12-24 05:33:09.727+00","2025-12-24 05:33:09.727+00",NULL,"https://storage.danakcorp.com/images/1766554389090-593863597.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DJ2NVEHVQMDCAM31VKKGK","2025-12-24 05:33:25.564+00","2025-12-24 05:33:25.564+00",NULL,"https://storage.danakcorp.com/images/1766554404968-905984091.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DJCQY1V84DAVXPV097HE6","2025-12-24 05:33:35.871+00","2025-12-24 05:33:35.871+00",NULL,"https://storage.danakcorp.com/images/1766554415325-873800591.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DJSZ2XVX971FGNFRRDQV6","2025-12-24 05:33:49.411+00","2025-12-24 05:33:49.411+00",NULL,"https://storage.danakcorp.com/images/1766554428814-77027818.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DK3HJAD9SMDD8CM1RPNQS","2025-12-24 05:33:59.218+00","2025-12-24 05:33:59.218+00",NULL,"https://storage.danakcorp.com/images/1766554438632-45072052.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DKB23B6XWJ8CMAKQ5R8HS","2025-12-24 05:34:06.915+00","2025-12-24 05:34:06.915+00",NULL,"https://storage.danakcorp.com/images/1766554446340-463157109.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DKN32VCDQDF2D407MGKF0","2025-12-24 05:34:17.186+00","2025-12-24 05:34:17.186+00",NULL,"https://storage.danakcorp.com/images/1766554456605-280166176.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DM4AEQ2FCJGZM390N7YVJ","2025-12-24 05:34:32.782+00","2025-12-24 05:34:32.782+00",NULL,"https://storage.danakcorp.com/images/1766554471887-315640495.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DMHKWJSHX6BR41FTDYVHE","2025-12-24 05:34:46.396+00","2025-12-24 05:34:46.396+00",NULL,"https://storage.danakcorp.com/images/1766554485634-242317100.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DN3XNDW2JQ0RGM711R9Q5","2025-12-24 05:35:05.141+00","2025-12-24 05:35:05.141+00",NULL,"https://storage.danakcorp.com/images/1766554504553-157481346.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DNV0F9CPMKQ4R482MTVKJ","2025-12-24 05:35:28.783+00","2025-12-24 05:35:28.783+00",NULL,"https://storage.danakcorp.com/images/1766554528198-919877647.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DPAKCPXD2GK0FCZ7N3XXP","2025-12-24 05:35:44.749+00","2025-12-24 05:35:44.749+00",NULL,"https://storage.danakcorp.com/images/1766554544140-886744157.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DPZGZFZPS5AJ8RNM3W16F","2025-12-24 05:36:06.175+00","2025-12-24 05:36:06.175+00",NULL,"https://storage.danakcorp.com/images/1766554565614-684869010.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DQCMAD39T5QB5728M6PFP","2025-12-24 05:36:19.594+00","2025-12-24 05:36:19.594+00",NULL,"https://storage.danakcorp.com/images/1766554578855-318583145.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DQTQHGWP5J77V327Y4GHZ","2025-12-24 05:36:34.034+00","2025-12-24 05:36:34.034+00",NULL,"https://storage.danakcorp.com/images/1766554593272-362758712.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DR75VSDY0B28AFTB6QP9M","2025-12-24 05:36:46.779+00","2025-12-24 05:36:46.779+00",NULL,"https://storage.danakcorp.com/images/1766554606166-877198688.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DRRT3B7BAA714MMYVVHN4","2025-12-24 05:37:04.835+00","2025-12-24 05:37:04.835+00",NULL,"https://storage.danakcorp.com/images/1766554624133-21439996.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DS9TQY1KWPM2HY7VC7THR","2025-12-24 05:37:22.263+00","2025-12-24 05:37:22.263+00",NULL,"https://storage.danakcorp.com/images/1766554641691-535696200.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DST85ZZ0SKSVDYJWN67VQ","2025-12-24 05:37:39.078+00","2025-12-24 05:37:39.078+00",NULL,"https://storage.danakcorp.com/images/1766554658481-114730426.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7DT75Y84N1ECNV2WW6VQ37","2025-12-24 05:37:52.318+00","2025-12-24 05:37:52.318+00",NULL,"https://storage.danakcorp.com/images/1766554671760-634916570.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7E3837FJ9TDDKPF8S6PHK6","2025-12-24 05:42:48.167+00","2025-12-24 05:42:48.167+00",NULL,"https://storage.danakcorp.com/images/1766554967381-660612838.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7E7G89J5KH2ZT45F0MT5X3","2025-12-24 05:45:07.593+00","2025-12-24 05:45:07.593+00",NULL,"https://storage.danakcorp.com/images/1766555106925-267924006.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EBA6ATBBFVMGWQHACZ1G7","2025-12-24 05:47:12.459+00","2025-12-24 05:47:12.459+00",NULL,"https://storage.danakcorp.com/images/1766555231674-387319393.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7ED3NRKEX3Z8G6CTHK5QAB","2025-12-24 05:48:11.32+00","2025-12-24 05:48:11.32+00",NULL,"https://storage.danakcorp.com/images/1766555290519-155637622.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EDN07W94SGG04BRNRNRWT","2025-12-24 05:48:29.063+00","2025-12-24 05:48:29.063+00",NULL,"https://storage.danakcorp.com/images/1766555308301-230359494.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EH2W75B2H8JGMHR9P76ZE","2025-12-24 05:50:21.576+00","2025-12-24 05:50:21.576+00",NULL,"https://storage.danakcorp.com/images/1766555420851-186440015.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EP8V3KQYMDCDMXYP1QKPK","2025-12-24 05:53:11.523+00","2025-12-24 05:53:11.523+00",NULL,"https://storage.danakcorp.com/images/1766555590828-644527730.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EPRJWQAQX00F0J02FV05J","2025-12-24 05:53:27.644+00","2025-12-24 05:53:27.644+00",NULL,"https://storage.danakcorp.com/images/1766555606997-571682462.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7ERGH1ABTPGSJN1WFTESP6","2025-12-24 05:54:24.929+00","2025-12-24 05:54:24.929+00",NULL,"https://storage.danakcorp.com/images/1766555663659-433052581.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7ET0394XN31KFT3340R04H","2025-12-24 05:55:13.641+00","2025-12-24 05:55:13.641+00",NULL,"https://storage.danakcorp.com/images/1766555713098-988242030.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7ETCZBFV8ZZF1GFDKP7DXA","2025-12-24 05:55:26.827+00","2025-12-24 05:55:26.827+00",NULL,"https://storage.danakcorp.com/images/1766555726158-680948882.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EV0VW1M18RGBB54C4YDAC","2025-12-24 05:55:47.196+00","2025-12-24 05:55:47.196+00",NULL,"https://storage.danakcorp.com/images/1766555746650-426516324.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EVMP392QF71V6QFGK9XQA","2025-12-24 05:56:07.491+00","2025-12-24 05:56:07.491+00",NULL,"https://storage.danakcorp.com/images/1766555765798-127083646.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EW6MQX0VFPS21TJPSEBAH","2025-12-24 05:56:25.879+00","2025-12-24 05:56:25.879+00",NULL,"https://storage.danakcorp.com/images/1766555784837-243715698.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EWMGEHYQRKBM6XBS9EKTF","2025-12-24 05:56:40.078+00","2025-12-24 05:56:40.078+00",NULL,"https://storage.danakcorp.com/images/1766555799191-594035927.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7EZHSEJ4G27VT3HS7JZ8YN","2025-12-24 05:58:15.599+00","2025-12-24 05:58:15.599+00",NULL,"https://storage.danakcorp.com/images/1766555894624-524350777.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7F0PCEADF1HWJ47V8RP1ZP","2025-12-24 05:58:53.07+00","2025-12-24 05:58:53.07+00",NULL,"https://storage.danakcorp.com/images/1766555932114-485954688.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7F184CHB129A900K2V6N94","2025-12-24 05:59:11.244+00","2025-12-24 05:59:11.244+00",NULL,"https://storage.danakcorp.com/images/1766555949650-909996041.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7F1R0JNNRP8QW8NHANZB01","2025-12-24 05:59:27.506+00","2025-12-24 05:59:27.506+00",NULL,"https://storage.danakcorp.com/images/1766555966861-75517122.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7F2Z1V0T1S47R7VWBEPY66","2025-12-24 06:00:07.483+00","2025-12-24 06:00:07.483+00",NULL,"https://storage.danakcorp.com/images/1766556006875-239689681.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FAP3S04D5CW51W98YZRHE","2025-12-24 06:04:20.473+00","2025-12-24 06:04:20.473+00",NULL,"https://storage.danakcorp.com/images/1766556257163-459958715.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FBQJAV9HJMG4EVRKPSAC5","2025-12-24 06:04:54.73+00","2025-12-24 06:04:54.73+00",NULL,"https://storage.danakcorp.com/images/1766556293812-665835248.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FC48FRARBP7ZXN7SPGP8K","2025-12-24 06:05:07.727+00","2025-12-24 06:05:07.727+00",NULL,"https://storage.danakcorp.com/images/1766556307082-162280793.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FD4SW2G73QX0YY6KNK7V4","2025-12-24 06:05:41.052+00","2025-12-24 06:05:41.052+00",NULL,"https://storage.danakcorp.com/images/1766556340402-744632392.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FGRC85J6JXEYNBGCPY0S4","2025-12-24 06:07:39.4+00","2025-12-24 06:07:39.4+00",NULL,"https://storage.danakcorp.com/images/1766556458335-857124841.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FHCW86SPVBSC8N62YEY5R","2025-12-24 06:08:00.393+00","2025-12-24 06:08:00.393+00",NULL,"https://storage.danakcorp.com/images/1766556479530-161860621.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FHYWZ73T36XKTDQ5FEN7G","2025-12-24 06:08:18.847+00","2025-12-24 06:08:18.847+00",NULL,"https://storage.danakcorp.com/images/1766556498215-91175544.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FQDYPGWD05HHATWBC499Z","2025-12-24 06:11:18.103+00","2025-12-24 06:11:18.103+00",NULL,"https://storage.danakcorp.com/images/1766556677355-108854669.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FS7QGJJ3YRSM10Y5YWD6C","2025-12-24 06:12:17.264+00","2025-12-24 06:12:17.264+00",NULL,"https://storage.danakcorp.com/images/1766556736283-691587656.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FSY2XKBREKJ9HCNJN924C","2025-12-24 06:12:40.157+00","2025-12-24 06:12:40.157+00",NULL,"https://storage.danakcorp.com/images/1766556759367-58066921.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FTFZ25MHQATRC41Y3EPQS","2025-12-24 06:12:58.468+00","2025-12-24 06:12:58.468+00",NULL,"https://storage.danakcorp.com/images/1766556777353-490756125.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FXARH84SJYESXVAG0AH3Q","2025-12-24 06:14:31.441+00","2025-12-24 06:14:31.441+00",NULL,"https://storage.danakcorp.com/images/1766556870740-118553581.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FXXV4DP74NGWJC0J43MDP","2025-12-24 06:14:50.98+00","2025-12-24 06:14:50.98+00",NULL,"https://storage.danakcorp.com/images/1766556890334-962678132.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FYVRNQAAA0DQZ8NZ02F2R","2025-12-24 06:15:21.621+00","2025-12-24 06:15:21.621+00",NULL,"https://storage.danakcorp.com/images/1766556921029-865260745.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7FZMJ4QGTG6NZEDKWP7V0W","2025-12-24 06:15:47.013+00","2025-12-24 06:15:47.013+00",NULL,"https://storage.danakcorp.com/images/1766556946363-320833501.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7G0F8GTY7KZ530Y9XF8YXF","2025-12-24 06:16:14.352+00","2025-12-24 06:16:14.352+00",NULL,"https://storage.danakcorp.com/images/1766556973771-832565827.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7G300731YZQDT3FVAP0KHH","2025-12-24 06:17:37.031+00","2025-12-24 06:17:37.031+00",NULL,"https://storage.danakcorp.com/images/1766557056358-727862983.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7G7BHM8WEXFHHKD09MG10J","2025-12-24 06:19:59.925+00","2025-12-24 06:19:59.925+00",NULL,"https://storage.danakcorp.com/images/1766557199259-72955190.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7G8ZM2FPZ9H5BVGD983CTS","2025-12-24 06:20:53.25+00","2025-12-24 06:20:53.25+00",NULL,"https://storage.danakcorp.com/images/1766557252452-988016525.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7G9N7J647RH94K5WQB1Q3B","2025-12-24 06:21:15.378+00","2025-12-24 06:21:15.378+00",NULL,"https://storage.danakcorp.com/images/1766557274778-439028456.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GA36DDJBQJ15XT4D0E2D6","2025-12-24 06:21:29.678+00","2025-12-24 06:21:29.678+00",NULL,"https://storage.danakcorp.com/images/1766557289094-415104854.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GAEZKQKRC80EP7F03K22K","2025-12-24 06:21:41.747+00","2025-12-24 06:21:41.747+00",NULL,"https://storage.danakcorp.com/images/1766557300923-302277606.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GAYJAHXAZV84PN3X2N4FY","2025-12-24 06:21:57.707+00","2025-12-24 06:21:57.707+00",NULL,"https://storage.danakcorp.com/images/1766557317091-602116315.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GN1W5Q0WZWCJR8V62AD88","2025-12-24 06:27:28.774+00","2025-12-24 06:27:28.774+00",NULL,"https://storage.danakcorp.com/images/1766557647999-47333939.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GNPEX4CMZHRVYB4AZYSK3","2025-12-24 06:27:49.853+00","2025-12-24 06:27:49.853+00",NULL,"https://storage.danakcorp.com/images/1766557669282-172512141.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GPSY27QGH5XSPXWHD8VJ5","2025-12-24 06:28:26.179+00","2025-12-24 06:28:26.179+00",NULL,"https://storage.danakcorp.com/images/1766557705283-692546793.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GQGZK52YM87E283013JS4","2025-12-24 06:28:49.779+00","2025-12-24 06:28:49.779+00",NULL,"https://storage.danakcorp.com/images/1766557729175-762576743.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GRBRZTFFHDS1A6MH2CMJ4","2025-12-24 06:29:17.215+00","2025-12-24 06:29:17.215+00",NULL,"https://storage.danakcorp.com/images/1766557756487-665300947.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GRYXHE220H9C3VH4VAC8E","2025-12-24 06:29:36.817+00","2025-12-24 06:29:36.817+00",NULL,"https://storage.danakcorp.com/images/1766557776067-804149228.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GSKMZH8WAH5VYAS4GH02C","2025-12-24 06:29:58.048+00","2025-12-24 06:29:58.048+00",NULL,"https://storage.danakcorp.com/images/1766557797509-101726352.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GT6A83SX8NKPVHYXAKJ3H","2025-12-24 06:30:17.16+00","2025-12-24 06:30:17.16+00",NULL,"https://storage.danakcorp.com/images/1766557816484-357699340.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7GTTKT3H3EDFTRCY8P2AE9","2025-12-24 06:30:37.946+00","2025-12-24 06:30:37.946+00",NULL,"https://storage.danakcorp.com/images/1766557837292-326521286.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7J0VP01FCP0TEHYG0MD191","2025-12-24 06:51:24.224+00","2025-12-24 06:51:24.224+00",NULL,"https://storage.danakcorp.com/images/1766559083575-564721059.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7J1BMTMBMV009EYC7N4G7D","2025-12-24 06:51:40.57+00","2025-12-24 06:51:40.57+00",NULL,"https://storage.danakcorp.com/images/1766559099561-720966516.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7J1W90CASGWZKBFMN75STB","2025-12-24 06:51:57.601+00","2025-12-24 06:51:57.601+00",NULL,"https://storage.danakcorp.com/images/1766559116496-834964990.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NS1HJ2C707G3KXRRZCN7Y","2025-12-24 07:57:02.387+00","2025-12-24 07:57:02.387+00",NULL,"https://storage.danakcorp.com/images/1766563021426-600579018.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NSHYZ6XESEJR7MCKS7CY0","2025-12-24 07:57:19.199+00","2025-12-24 07:57:19.199+00",NULL,"https://storage.danakcorp.com/images/1766563038525-727531190.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NSYX5W066SDN0RYBKXHQ3","2025-12-24 07:57:32.454+00","2025-12-24 07:57:32.454+00",NULL,"https://storage.danakcorp.com/images/1766563051485-824602001.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NTCZK4NYE3KCYDM1247GP","2025-12-24 07:57:46.867+00","2025-12-24 07:57:46.867+00",NULL,"https://storage.danakcorp.com/images/1766563066017-372210647.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NW5KZEW4M2ZJX93T53G41","2025-12-24 07:58:44.863+00","2025-12-24 07:58:44.863+00",NULL,"https://storage.danakcorp.com/images/1766563124296-331607800.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NWQ7YFJ7HDNWRB5F1V47Q","2025-12-24 07:59:02.91+00","2025-12-24 07:59:02.91+00",NULL,"https://storage.danakcorp.com/images/1766563142133-359920423.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NXCZSEN7M2TN0DT0XVVR9","2025-12-24 07:59:25.177+00","2025-12-24 07:59:25.177+00",NULL,"https://storage.danakcorp.com/images/1766563164270-350101986.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NXXMYZFMAWMRS23GRZSKP","2025-12-24 07:59:42.238+00","2025-12-24 07:59:42.238+00",NULL,"https://storage.danakcorp.com/images/1766563181587-86630830.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NYP6M0HNC3A4XCXHK4W4M","2025-12-24 08:00:07.38+00","2025-12-24 08:00:07.38+00",NULL,"https://storage.danakcorp.com/images/1766563204966-651499380.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7NZ3PDZX4WTVV3KC5MTD8K","2025-12-24 08:00:21.198+00","2025-12-24 08:00:21.198+00",NULL,"https://storage.danakcorp.com/images/1766563220596-103699525.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7P0FWPK3HTYVX14XMGCHTC","2025-12-24 08:01:06.455+00","2025-12-24 08:01:06.455+00",NULL,"https://storage.danakcorp.com/images/1766563265634-373953449.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7P0SAN0PA6KAGE3ABAXSWF","2025-12-24 08:01:16.117+00","2025-12-24 08:01:16.117+00",NULL,"https://storage.danakcorp.com/images/1766563275517-958045207.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7P1429PQT8NFDFRZEDNH1P","2025-12-24 08:01:27.113+00","2025-12-24 08:01:27.113+00",NULL,"https://storage.danakcorp.com/images/1766563286526-622849562.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7QC4M3D2SF26ZH0S0SDWBD","2025-12-24 08:24:56.708+00","2025-12-24 08:24:56.708+00",NULL,"https://storage.danakcorp.com/images/1766564695339-504553420.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QCEDA0T3CGZ01NGBKWZ9S","2025-12-24 08:25:06.73+00","2025-12-24 08:25:06.73+00",NULL,"https://storage.danakcorp.com/images/1766564706032-159367016.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QCWQ00TVCK7BAAHSWA09H","2025-12-24 08:25:21.376+00","2025-12-24 08:25:21.376+00",NULL,"https://storage.danakcorp.com/images/1766564720683-887818252.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QDA1R9WTTV2JWQ2Y3WGST","2025-12-24 08:25:35.032+00","2025-12-24 08:25:35.032+00",NULL,"https://storage.danakcorp.com/images/1766564734432-483528219.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QDSCQNW2JC4SAQCK0QBNW","2025-12-24 08:25:50.743+00","2025-12-24 08:25:50.743+00",NULL,"https://storage.danakcorp.com/images/1766564750099-854146988.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QE1NXGG08JQ5F2BC35NFC","2025-12-24 08:25:59.23+00","2025-12-24 08:25:59.23+00",NULL,"https://storage.danakcorp.com/images/1766564758573-696060786.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QFFXDVTSB5VAXB640HR7N","2025-12-24 08:26:46.574+00","2025-12-24 08:26:46.574+00",NULL,"https://storage.danakcorp.com/images/1766564805823-829938380.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QJ37DT4NCD6QY9MNGCZXZ","2025-12-24 08:28:11.885+00","2025-12-24 08:28:11.885+00",NULL,"https://storage.danakcorp.com/images/1766564891137-468827500.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QJJZX6Y7CR8R60W3TNKRS","2025-12-24 08:28:28.029+00","2025-12-24 08:28:28.029+00",NULL,"https://storage.danakcorp.com/images/1766564907215-921380792.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7QK69ZH6B4S602YKZCBVMB","2025-12-24 08:28:47.807+00","2025-12-24 08:28:47.807+00",NULL,"https://storage.danakcorp.com/images/1766564926872-672612697.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R3EM739KW6PV431V6P19S","2025-12-24 08:37:40.616+00","2025-12-24 08:37:40.616+00",NULL,"https://storage.danakcorp.com/images/1766565459604-638026702.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R3YZ6SAQWZ4CMC4GCJ1V4","2025-12-24 08:37:57.351+00","2025-12-24 08:37:57.351+00",NULL,"https://storage.danakcorp.com/images/1766565476771-42527917.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R4D5BVGPWKXE6A7FNVNRA","2025-12-24 08:38:11.883+00","2025-12-24 08:38:11.883+00",NULL,"https://storage.danakcorp.com/images/1766565491264-946731491.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R4RFYFFQ4GV5TQ3DH6BW6","2025-12-24 08:38:23.486+00","2025-12-24 08:38:23.486+00",NULL,"https://storage.danakcorp.com/images/1766565502475-288189136.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R5KMSAGCXZCTQPTVYDTA7","2025-12-24 08:38:51.289+00","2025-12-24 08:38:51.289+00",NULL,"https://storage.danakcorp.com/images/1766565530628-800474580.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R64HYQD37W8ASB2Q817MW","2025-12-24 08:39:08.606+00","2025-12-24 08:39:08.606+00",NULL,"https://storage.danakcorp.com/images/1766565547983-878658938.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R6KF9YWZBZ3WPAKXQS2CH","2025-12-24 08:39:23.881+00","2025-12-24 08:39:23.881+00",NULL,"https://storage.danakcorp.com/images/1766565563263-891688321.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R7RM02R8FZ4DN65WMJVE8","2025-12-24 08:40:01.92+00","2025-12-24 08:40:01.92+00",NULL,"https://storage.danakcorp.com/images/1766565600547-704332792.svg","01KD7DG4VCTWZRSA54M3PEJ6NW"
"01KD7R8G53XBC6AG6KAVSBW94G","2025-12-24 08:40:26.019+00","2025-12-24 08:40:26.019+00",NULL,"https://storage.danakcorp.com/images/1766565625437-528383713.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R901TPNAX9YYRG6W0GWHF","2025-12-24 08:40:42.298+00","2025-12-24 08:40:42.298+00",NULL,"https://storage.danakcorp.com/images/1766565641620-53176909.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7R9PKF9G1DD1HMS2QQQN9V","2025-12-24 08:41:05.391+00","2025-12-24 08:41:05.391+00",NULL,"https://storage.danakcorp.com/images/1766565664427-433669317.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RK2G6E5JKEDK9P95W79PR","2025-12-24 08:46:12.487+00","2025-12-24 08:46:12.487+00",NULL,"https://storage.danakcorp.com/images/1766565971515-159903323.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RKSM9QD6RA2H6WGE23KEC","2025-12-24 08:46:36.169+00","2025-12-24 08:46:36.169+00",NULL,"https://storage.danakcorp.com/images/1766565995424-288101561.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RMR9DRA1TG2BJ9Q8QAZ15","2025-12-24 08:47:07.565+00","2025-12-24 08:47:07.565+00",NULL,"https://storage.danakcorp.com/images/1766566026942-868807643.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RN6FH0TX69RZTKJKM6MEN","2025-12-24 08:47:22.097+00","2025-12-24 08:47:22.097+00",NULL,"https://storage.danakcorp.com/images/1766566041525-973019175.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RNX4EE92QR2C24577BJCW","2025-12-24 08:47:45.294+00","2025-12-24 08:47:45.294+00",NULL,"https://storage.danakcorp.com/images/1766566064741-271844433.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RPHHCKNXNQH29WSG84D2Z","2025-12-24 08:48:06.189+00","2025-12-24 08:48:06.189+00",NULL,"https://storage.danakcorp.com/images/1766566084368-438871956.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RQ6MFA5CDQ4J55NG3N7PX","2025-12-24 08:48:27.791+00","2025-12-24 08:48:27.791+00",NULL,"https://storage.danakcorp.com/images/1766566106954-47179607.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RQNXJNRXS8MXV57R50PKN","2025-12-24 08:48:43.443+00","2025-12-24 08:48:43.443+00",NULL,"https://storage.danakcorp.com/images/1766566122836-486871124.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RR9W6B9BTWJ0N2H11TWM1","2025-12-24 08:49:03.879+00","2025-12-24 08:49:03.879+00",NULL,"https://storage.danakcorp.com/images/1766566143171-668309076.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RRVQWYHSHN3M7R25GNGHS","2025-12-24 08:49:22.172+00","2025-12-24 08:49:22.172+00",NULL,"https://storage.danakcorp.com/images/1766566161551-844376214.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RSAKAP1TJ59GN11DEAXD9","2025-12-24 08:49:37.386+00","2025-12-24 08:49:37.386+00",NULL,"https://storage.danakcorp.com/images/1766566176755-30806596.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RSV35PY1A6193H4GDW1ZW","2025-12-24 08:49:54.277+00","2025-12-24 08:49:54.277+00",NULL,"https://storage.danakcorp.com/images/1766566193720-339416210.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RWX3D4ZZE35W345HDK35S","2025-12-24 08:51:34.638+00","2025-12-24 08:51:34.638+00",NULL,"https://storage.danakcorp.com/images/1766566293736-981836756.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RX79BVR30WGKXAZQ3D0CM","2025-12-24 08:51:45.068+00","2025-12-24 08:51:45.068+00",NULL,"https://storage.danakcorp.com/images/1766566304318-193301989.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RXY99C8PV6SAR0AJ00F16","2025-12-24 08:52:08.618+00","2025-12-24 08:52:08.618+00",NULL,"https://storage.danakcorp.com/images/1766566327768-2675508.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RYBPV273KCR350ESK2FN1","2025-12-24 08:52:22.364+00","2025-12-24 08:52:22.364+00",NULL,"https://storage.danakcorp.com/images/1766566341717-462491426.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RYTNTE20YS29X2XJT7GY3","2025-12-24 08:52:37.69+00","2025-12-24 08:52:37.69+00",NULL,"https://storage.danakcorp.com/images/1766566357028-432111036.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RZ8K86GCJSW1E0EC5T4B2","2025-12-24 08:52:51.944+00","2025-12-24 08:52:51.944+00",NULL,"https://storage.danakcorp.com/images/1766566371354-279596850.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7RZPNGASPYFP9XKMSY208B","2025-12-24 08:53:06.352+00","2025-12-24 08:53:06.352+00",NULL,"https://storage.danakcorp.com/images/1766566385674-569493499.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7S0HEQZ4AY5TTFKF36HS6F","2025-12-24 08:53:33.783+00","2025-12-24 08:53:33.783+00",NULL,"https://storage.danakcorp.com/images/1766566413058-975642584.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7S0ZEQ6BH163HCX0MQZHBJ","2025-12-24 08:53:48.119+00","2025-12-24 08:53:48.119+00",NULL,"https://storage.danakcorp.com/images/1766566427440-982841441.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7S1EF6R6J6AMMC6HP5J0AA","2025-12-24 08:54:03.494+00","2025-12-24 08:54:03.494+00",NULL,"https://storage.danakcorp.com/images/1766566442808-761588425.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7S27EFH2CDEK71GVQC839G","2025-12-24 08:54:29.074+00","2025-12-24 08:54:29.074+00",NULL,"https://storage.danakcorp.com/images/1766566468108-519151895.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7S2N705Z754YS3YFQW4AGQ","2025-12-24 08:54:43.169+00","2025-12-24 08:54:43.169+00",NULL,"https://storage.danakcorp.com/images/1766566482278-661272876.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7S31HNKPAAK58CX77BNJCA","2025-12-24 08:54:55.798+00","2025-12-24 08:54:55.798+00",NULL,"https://storage.danakcorp.com/images/1766566494050-408184442.svg","01KD7DGBDFX76VKXMKQKR51RJK"
"01KD7S3AX9VW5B830MYJYGXQ0B","2025-12-24 08:55:05.385+00","2025-12-24 08:55:05.385+00",NULL,"https://storage.danakcorp.com/images/1766566504760-709260995.svg","01KD7DGBDFX76VKXMKQKR51RJK"
1 id created_at updated_at deleted_at url group_id icon_name
2 01KD7DGWH6TDB47V4710FDT7SR 2025-12-24 05:32:46.503+00 2025-12-24 05:32:46.503+00 NULL https://storage.danakcorp.com/images/1766554365832-411750172.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
3 01KD7DH9F6BN4TEM96TA2QT4GJ 2025-12-24 05:32:59.751+00 2025-12-24 05:32:59.751+00 NULL https://storage.danakcorp.com/images/1766554379149-104970938.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
4 01KD7DHK6ZTEGPRBNXJPV49TE6 2025-12-24 05:33:09.727+00 2025-12-24 05:33:09.727+00 NULL https://storage.danakcorp.com/images/1766554389090-593863597.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
5 01KD7DJ2NVEHVQMDCAM31VKKGK 2025-12-24 05:33:25.564+00 2025-12-24 05:33:25.564+00 NULL https://storage.danakcorp.com/images/1766554404968-905984091.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
6 01KD7DJCQY1V84DAVXPV097HE6 2025-12-24 05:33:35.871+00 2025-12-24 05:33:35.871+00 NULL https://storage.danakcorp.com/images/1766554415325-873800591.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
7 01KD7DJSZ2XVX971FGNFRRDQV6 2025-12-24 05:33:49.411+00 2025-12-24 05:33:49.411+00 NULL https://storage.danakcorp.com/images/1766554428814-77027818.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
8 01KD7DK3HJAD9SMDD8CM1RPNQS 2025-12-24 05:33:59.218+00 2025-12-24 05:33:59.218+00 NULL https://storage.danakcorp.com/images/1766554438632-45072052.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
9 01KD7DKB23B6XWJ8CMAKQ5R8HS 2025-12-24 05:34:06.915+00 2025-12-24 05:34:06.915+00 NULL https://storage.danakcorp.com/images/1766554446340-463157109.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
10 01KD7DKN32VCDQDF2D407MGKF0 2025-12-24 05:34:17.186+00 2025-12-24 05:34:17.186+00 NULL https://storage.danakcorp.com/images/1766554456605-280166176.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
11 01KD7DM4AEQ2FCJGZM390N7YVJ 2025-12-24 05:34:32.782+00 2025-12-24 05:34:32.782+00 NULL https://storage.danakcorp.com/images/1766554471887-315640495.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
12 01KD7DMHKWJSHX6BR41FTDYVHE 2025-12-24 05:34:46.396+00 2025-12-24 05:34:46.396+00 NULL https://storage.danakcorp.com/images/1766554485634-242317100.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
13 01KD7DN3XNDW2JQ0RGM711R9Q5 2025-12-24 05:35:05.141+00 2025-12-24 05:35:05.141+00 NULL https://storage.danakcorp.com/images/1766554504553-157481346.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
14 01KD7DNV0F9CPMKQ4R482MTVKJ 2025-12-24 05:35:28.783+00 2025-12-24 05:35:28.783+00 NULL https://storage.danakcorp.com/images/1766554528198-919877647.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
15 01KD7DPAKCPXD2GK0FCZ7N3XXP 2025-12-24 05:35:44.749+00 2025-12-24 05:35:44.749+00 NULL https://storage.danakcorp.com/images/1766554544140-886744157.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
16 01KD7DPZGZFZPS5AJ8RNM3W16F 2025-12-24 05:36:06.175+00 2025-12-24 05:36:06.175+00 NULL https://storage.danakcorp.com/images/1766554565614-684869010.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
17 01KD7DQCMAD39T5QB5728M6PFP 2025-12-24 05:36:19.594+00 2025-12-24 05:36:19.594+00 NULL https://storage.danakcorp.com/images/1766554578855-318583145.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
18 01KD7DQTQHGWP5J77V327Y4GHZ 2025-12-24 05:36:34.034+00 2025-12-24 05:36:34.034+00 NULL https://storage.danakcorp.com/images/1766554593272-362758712.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
19 01KD7DR75VSDY0B28AFTB6QP9M 2025-12-24 05:36:46.779+00 2025-12-24 05:36:46.779+00 NULL https://storage.danakcorp.com/images/1766554606166-877198688.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
20 01KD7DRRT3B7BAA714MMYVVHN4 2025-12-24 05:37:04.835+00 2025-12-24 05:37:04.835+00 NULL https://storage.danakcorp.com/images/1766554624133-21439996.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
21 01KD7DS9TQY1KWPM2HY7VC7THR 2025-12-24 05:37:22.263+00 2025-12-24 05:37:22.263+00 NULL https://storage.danakcorp.com/images/1766554641691-535696200.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
22 01KD7DST85ZZ0SKSVDYJWN67VQ 2025-12-24 05:37:39.078+00 2025-12-24 05:37:39.078+00 NULL https://storage.danakcorp.com/images/1766554658481-114730426.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
23 01KD7DT75Y84N1ECNV2WW6VQ37 2025-12-24 05:37:52.318+00 2025-12-24 05:37:52.318+00 NULL https://storage.danakcorp.com/images/1766554671760-634916570.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
24 01KD7E3837FJ9TDDKPF8S6PHK6 2025-12-24 05:42:48.167+00 2025-12-24 05:42:48.167+00 NULL https://storage.danakcorp.com/images/1766554967381-660612838.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
25 01KD7E7G89J5KH2ZT45F0MT5X3 2025-12-24 05:45:07.593+00 2025-12-24 05:45:07.593+00 NULL https://storage.danakcorp.com/images/1766555106925-267924006.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
26 01KD7EBA6ATBBFVMGWQHACZ1G7 2025-12-24 05:47:12.459+00 2025-12-24 05:47:12.459+00 NULL https://storage.danakcorp.com/images/1766555231674-387319393.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
27 01KD7ED3NRKEX3Z8G6CTHK5QAB 2025-12-24 05:48:11.32+00 2025-12-24 05:48:11.32+00 NULL https://storage.danakcorp.com/images/1766555290519-155637622.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
28 01KD7EDN07W94SGG04BRNRNRWT 2025-12-24 05:48:29.063+00 2025-12-24 05:48:29.063+00 NULL https://storage.danakcorp.com/images/1766555308301-230359494.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
29 01KD7EH2W75B2H8JGMHR9P76ZE 2025-12-24 05:50:21.576+00 2025-12-24 05:50:21.576+00 NULL https://storage.danakcorp.com/images/1766555420851-186440015.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
30 01KD7EP8V3KQYMDCDMXYP1QKPK 2025-12-24 05:53:11.523+00 2025-12-24 05:53:11.523+00 NULL https://storage.danakcorp.com/images/1766555590828-644527730.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
31 01KD7EPRJWQAQX00F0J02FV05J 2025-12-24 05:53:27.644+00 2025-12-24 05:53:27.644+00 NULL https://storage.danakcorp.com/images/1766555606997-571682462.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
32 01KD7ERGH1ABTPGSJN1WFTESP6 2025-12-24 05:54:24.929+00 2025-12-24 05:54:24.929+00 NULL https://storage.danakcorp.com/images/1766555663659-433052581.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
33 01KD7ET0394XN31KFT3340R04H 2025-12-24 05:55:13.641+00 2025-12-24 05:55:13.641+00 NULL https://storage.danakcorp.com/images/1766555713098-988242030.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
34 01KD7ETCZBFV8ZZF1GFDKP7DXA 2025-12-24 05:55:26.827+00 2025-12-24 05:55:26.827+00 NULL https://storage.danakcorp.com/images/1766555726158-680948882.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
35 01KD7EV0VW1M18RGBB54C4YDAC 2025-12-24 05:55:47.196+00 2025-12-24 05:55:47.196+00 NULL https://storage.danakcorp.com/images/1766555746650-426516324.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
36 01KD7EVMP392QF71V6QFGK9XQA 2025-12-24 05:56:07.491+00 2025-12-24 05:56:07.491+00 NULL https://storage.danakcorp.com/images/1766555765798-127083646.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
37 01KD7EW6MQX0VFPS21TJPSEBAH 2025-12-24 05:56:25.879+00 2025-12-24 05:56:25.879+00 NULL https://storage.danakcorp.com/images/1766555784837-243715698.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
38 01KD7EWMGEHYQRKBM6XBS9EKTF 2025-12-24 05:56:40.078+00 2025-12-24 05:56:40.078+00 NULL https://storage.danakcorp.com/images/1766555799191-594035927.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
39 01KD7EZHSEJ4G27VT3HS7JZ8YN 2025-12-24 05:58:15.599+00 2025-12-24 05:58:15.599+00 NULL https://storage.danakcorp.com/images/1766555894624-524350777.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
40 01KD7F0PCEADF1HWJ47V8RP1ZP 2025-12-24 05:58:53.07+00 2025-12-24 05:58:53.07+00 NULL https://storage.danakcorp.com/images/1766555932114-485954688.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
41 01KD7F184CHB129A900K2V6N94 2025-12-24 05:59:11.244+00 2025-12-24 05:59:11.244+00 NULL https://storage.danakcorp.com/images/1766555949650-909996041.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
42 01KD7F1R0JNNRP8QW8NHANZB01 2025-12-24 05:59:27.506+00 2025-12-24 05:59:27.506+00 NULL https://storage.danakcorp.com/images/1766555966861-75517122.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
43 01KD7F2Z1V0T1S47R7VWBEPY66 2025-12-24 06:00:07.483+00 2025-12-24 06:00:07.483+00 NULL https://storage.danakcorp.com/images/1766556006875-239689681.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
44 01KD7FAP3S04D5CW51W98YZRHE 2025-12-24 06:04:20.473+00 2025-12-24 06:04:20.473+00 NULL https://storage.danakcorp.com/images/1766556257163-459958715.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
45 01KD7FBQJAV9HJMG4EVRKPSAC5 2025-12-24 06:04:54.73+00 2025-12-24 06:04:54.73+00 NULL https://storage.danakcorp.com/images/1766556293812-665835248.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
46 01KD7FC48FRARBP7ZXN7SPGP8K 2025-12-24 06:05:07.727+00 2025-12-24 06:05:07.727+00 NULL https://storage.danakcorp.com/images/1766556307082-162280793.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
47 01KD7FD4SW2G73QX0YY6KNK7V4 2025-12-24 06:05:41.052+00 2025-12-24 06:05:41.052+00 NULL https://storage.danakcorp.com/images/1766556340402-744632392.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
48 01KD7FGRC85J6JXEYNBGCPY0S4 2025-12-24 06:07:39.4+00 2025-12-24 06:07:39.4+00 NULL https://storage.danakcorp.com/images/1766556458335-857124841.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
49 01KD7FHCW86SPVBSC8N62YEY5R 2025-12-24 06:08:00.393+00 2025-12-24 06:08:00.393+00 NULL https://storage.danakcorp.com/images/1766556479530-161860621.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
50 01KD7FHYWZ73T36XKTDQ5FEN7G 2025-12-24 06:08:18.847+00 2025-12-24 06:08:18.847+00 NULL https://storage.danakcorp.com/images/1766556498215-91175544.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
51 01KD7FQDYPGWD05HHATWBC499Z 2025-12-24 06:11:18.103+00 2025-12-24 06:11:18.103+00 NULL https://storage.danakcorp.com/images/1766556677355-108854669.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
52 01KD7FS7QGJJ3YRSM10Y5YWD6C 2025-12-24 06:12:17.264+00 2025-12-24 06:12:17.264+00 NULL https://storage.danakcorp.com/images/1766556736283-691587656.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
53 01KD7FSY2XKBREKJ9HCNJN924C 2025-12-24 06:12:40.157+00 2025-12-24 06:12:40.157+00 NULL https://storage.danakcorp.com/images/1766556759367-58066921.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
54 01KD7FTFZ25MHQATRC41Y3EPQS 2025-12-24 06:12:58.468+00 2025-12-24 06:12:58.468+00 NULL https://storage.danakcorp.com/images/1766556777353-490756125.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
55 01KD7FXARH84SJYESXVAG0AH3Q 2025-12-24 06:14:31.441+00 2025-12-24 06:14:31.441+00 NULL https://storage.danakcorp.com/images/1766556870740-118553581.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
56 01KD7FXXV4DP74NGWJC0J43MDP 2025-12-24 06:14:50.98+00 2025-12-24 06:14:50.98+00 NULL https://storage.danakcorp.com/images/1766556890334-962678132.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
57 01KD7FYVRNQAAA0DQZ8NZ02F2R 2025-12-24 06:15:21.621+00 2025-12-24 06:15:21.621+00 NULL https://storage.danakcorp.com/images/1766556921029-865260745.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
58 01KD7FZMJ4QGTG6NZEDKWP7V0W 2025-12-24 06:15:47.013+00 2025-12-24 06:15:47.013+00 NULL https://storage.danakcorp.com/images/1766556946363-320833501.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
59 01KD7G0F8GTY7KZ530Y9XF8YXF 2025-12-24 06:16:14.352+00 2025-12-24 06:16:14.352+00 NULL https://storage.danakcorp.com/images/1766556973771-832565827.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
60 01KD7G300731YZQDT3FVAP0KHH 2025-12-24 06:17:37.031+00 2025-12-24 06:17:37.031+00 NULL https://storage.danakcorp.com/images/1766557056358-727862983.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
61 01KD7G7BHM8WEXFHHKD09MG10J 2025-12-24 06:19:59.925+00 2025-12-24 06:19:59.925+00 NULL https://storage.danakcorp.com/images/1766557199259-72955190.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
62 01KD7G8ZM2FPZ9H5BVGD983CTS 2025-12-24 06:20:53.25+00 2025-12-24 06:20:53.25+00 NULL https://storage.danakcorp.com/images/1766557252452-988016525.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
63 01KD7G9N7J647RH94K5WQB1Q3B 2025-12-24 06:21:15.378+00 2025-12-24 06:21:15.378+00 NULL https://storage.danakcorp.com/images/1766557274778-439028456.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
64 01KD7GA36DDJBQJ15XT4D0E2D6 2025-12-24 06:21:29.678+00 2025-12-24 06:21:29.678+00 NULL https://storage.danakcorp.com/images/1766557289094-415104854.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
65 01KD7GAEZKQKRC80EP7F03K22K 2025-12-24 06:21:41.747+00 2025-12-24 06:21:41.747+00 NULL https://storage.danakcorp.com/images/1766557300923-302277606.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
66 01KD7GAYJAHXAZV84PN3X2N4FY 2025-12-24 06:21:57.707+00 2025-12-24 06:21:57.707+00 NULL https://storage.danakcorp.com/images/1766557317091-602116315.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
67 01KD7GN1W5Q0WZWCJR8V62AD88 2025-12-24 06:27:28.774+00 2025-12-24 06:27:28.774+00 NULL https://storage.danakcorp.com/images/1766557647999-47333939.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
68 01KD7GNPEX4CMZHRVYB4AZYSK3 2025-12-24 06:27:49.853+00 2025-12-24 06:27:49.853+00 NULL https://storage.danakcorp.com/images/1766557669282-172512141.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
69 01KD7GPSY27QGH5XSPXWHD8VJ5 2025-12-24 06:28:26.179+00 2025-12-24 06:28:26.179+00 NULL https://storage.danakcorp.com/images/1766557705283-692546793.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
70 01KD7GQGZK52YM87E283013JS4 2025-12-24 06:28:49.779+00 2025-12-24 06:28:49.779+00 NULL https://storage.danakcorp.com/images/1766557729175-762576743.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
71 01KD7GRBRZTFFHDS1A6MH2CMJ4 2025-12-24 06:29:17.215+00 2025-12-24 06:29:17.215+00 NULL https://storage.danakcorp.com/images/1766557756487-665300947.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
72 01KD7GRYXHE220H9C3VH4VAC8E 2025-12-24 06:29:36.817+00 2025-12-24 06:29:36.817+00 NULL https://storage.danakcorp.com/images/1766557776067-804149228.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
73 01KD7GSKMZH8WAH5VYAS4GH02C 2025-12-24 06:29:58.048+00 2025-12-24 06:29:58.048+00 NULL https://storage.danakcorp.com/images/1766557797509-101726352.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
74 01KD7GT6A83SX8NKPVHYXAKJ3H 2025-12-24 06:30:17.16+00 2025-12-24 06:30:17.16+00 NULL https://storage.danakcorp.com/images/1766557816484-357699340.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
75 01KD7GTTKT3H3EDFTRCY8P2AE9 2025-12-24 06:30:37.946+00 2025-12-24 06:30:37.946+00 NULL https://storage.danakcorp.com/images/1766557837292-326521286.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
76 01KD7J0VP01FCP0TEHYG0MD191 2025-12-24 06:51:24.224+00 2025-12-24 06:51:24.224+00 NULL https://storage.danakcorp.com/images/1766559083575-564721059.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
77 01KD7J1BMTMBMV009EYC7N4G7D 2025-12-24 06:51:40.57+00 2025-12-24 06:51:40.57+00 NULL https://storage.danakcorp.com/images/1766559099561-720966516.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
78 01KD7J1W90CASGWZKBFMN75STB 2025-12-24 06:51:57.601+00 2025-12-24 06:51:57.601+00 NULL https://storage.danakcorp.com/images/1766559116496-834964990.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
79 01KD7NS1HJ2C707G3KXRRZCN7Y 2025-12-24 07:57:02.387+00 2025-12-24 07:57:02.387+00 NULL https://storage.danakcorp.com/images/1766563021426-600579018.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
80 01KD7NSHYZ6XESEJR7MCKS7CY0 2025-12-24 07:57:19.199+00 2025-12-24 07:57:19.199+00 NULL https://storage.danakcorp.com/images/1766563038525-727531190.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
81 01KD7NSYX5W066SDN0RYBKXHQ3 2025-12-24 07:57:32.454+00 2025-12-24 07:57:32.454+00 NULL https://storage.danakcorp.com/images/1766563051485-824602001.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
82 01KD7NTCZK4NYE3KCYDM1247GP 2025-12-24 07:57:46.867+00 2025-12-24 07:57:46.867+00 NULL https://storage.danakcorp.com/images/1766563066017-372210647.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
83 01KD7NW5KZEW4M2ZJX93T53G41 2025-12-24 07:58:44.863+00 2025-12-24 07:58:44.863+00 NULL https://storage.danakcorp.com/images/1766563124296-331607800.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
84 01KD7NWQ7YFJ7HDNWRB5F1V47Q 2025-12-24 07:59:02.91+00 2025-12-24 07:59:02.91+00 NULL https://storage.danakcorp.com/images/1766563142133-359920423.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
85 01KD7NXCZSEN7M2TN0DT0XVVR9 2025-12-24 07:59:25.177+00 2025-12-24 07:59:25.177+00 NULL https://storage.danakcorp.com/images/1766563164270-350101986.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
86 01KD7NXXMYZFMAWMRS23GRZSKP 2025-12-24 07:59:42.238+00 2025-12-24 07:59:42.238+00 NULL https://storage.danakcorp.com/images/1766563181587-86630830.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
87 01KD7NYP6M0HNC3A4XCXHK4W4M 2025-12-24 08:00:07.38+00 2025-12-24 08:00:07.38+00 NULL https://storage.danakcorp.com/images/1766563204966-651499380.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
88 01KD7NZ3PDZX4WTVV3KC5MTD8K 2025-12-24 08:00:21.198+00 2025-12-24 08:00:21.198+00 NULL https://storage.danakcorp.com/images/1766563220596-103699525.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
89 01KD7P0FWPK3HTYVX14XMGCHTC 2025-12-24 08:01:06.455+00 2025-12-24 08:01:06.455+00 NULL https://storage.danakcorp.com/images/1766563265634-373953449.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
90 01KD7P0SAN0PA6KAGE3ABAXSWF 2025-12-24 08:01:16.117+00 2025-12-24 08:01:16.117+00 NULL https://storage.danakcorp.com/images/1766563275517-958045207.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
91 01KD7P1429PQT8NFDFRZEDNH1P 2025-12-24 08:01:27.113+00 2025-12-24 08:01:27.113+00 NULL https://storage.danakcorp.com/images/1766563286526-622849562.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
92 01KD7QC4M3D2SF26ZH0S0SDWBD 2025-12-24 08:24:56.708+00 2025-12-24 08:24:56.708+00 NULL https://storage.danakcorp.com/images/1766564695339-504553420.svg 01KD7DGBDFX76VKXMKQKR51RJK
93 01KD7QCEDA0T3CGZ01NGBKWZ9S 2025-12-24 08:25:06.73+00 2025-12-24 08:25:06.73+00 NULL https://storage.danakcorp.com/images/1766564706032-159367016.svg 01KD7DGBDFX76VKXMKQKR51RJK
94 01KD7QCWQ00TVCK7BAAHSWA09H 2025-12-24 08:25:21.376+00 2025-12-24 08:25:21.376+00 NULL https://storage.danakcorp.com/images/1766564720683-887818252.svg 01KD7DGBDFX76VKXMKQKR51RJK
95 01KD7QDA1R9WTTV2JWQ2Y3WGST 2025-12-24 08:25:35.032+00 2025-12-24 08:25:35.032+00 NULL https://storage.danakcorp.com/images/1766564734432-483528219.svg 01KD7DGBDFX76VKXMKQKR51RJK
96 01KD7QDSCQNW2JC4SAQCK0QBNW 2025-12-24 08:25:50.743+00 2025-12-24 08:25:50.743+00 NULL https://storage.danakcorp.com/images/1766564750099-854146988.svg 01KD7DGBDFX76VKXMKQKR51RJK
97 01KD7QE1NXGG08JQ5F2BC35NFC 2025-12-24 08:25:59.23+00 2025-12-24 08:25:59.23+00 NULL https://storage.danakcorp.com/images/1766564758573-696060786.svg 01KD7DGBDFX76VKXMKQKR51RJK
98 01KD7QFFXDVTSB5VAXB640HR7N 2025-12-24 08:26:46.574+00 2025-12-24 08:26:46.574+00 NULL https://storage.danakcorp.com/images/1766564805823-829938380.svg 01KD7DGBDFX76VKXMKQKR51RJK
99 01KD7QJ37DT4NCD6QY9MNGCZXZ 2025-12-24 08:28:11.885+00 2025-12-24 08:28:11.885+00 NULL https://storage.danakcorp.com/images/1766564891137-468827500.svg 01KD7DGBDFX76VKXMKQKR51RJK
100 01KD7QJJZX6Y7CR8R60W3TNKRS 2025-12-24 08:28:28.029+00 2025-12-24 08:28:28.029+00 NULL https://storage.danakcorp.com/images/1766564907215-921380792.svg 01KD7DGBDFX76VKXMKQKR51RJK
101 01KD7QK69ZH6B4S602YKZCBVMB 2025-12-24 08:28:47.807+00 2025-12-24 08:28:47.807+00 NULL https://storage.danakcorp.com/images/1766564926872-672612697.svg 01KD7DGBDFX76VKXMKQKR51RJK
102 01KD7R3EM739KW6PV431V6P19S 2025-12-24 08:37:40.616+00 2025-12-24 08:37:40.616+00 NULL https://storage.danakcorp.com/images/1766565459604-638026702.svg 01KD7DGBDFX76VKXMKQKR51RJK
103 01KD7R3YZ6SAQWZ4CMC4GCJ1V4 2025-12-24 08:37:57.351+00 2025-12-24 08:37:57.351+00 NULL https://storage.danakcorp.com/images/1766565476771-42527917.svg 01KD7DGBDFX76VKXMKQKR51RJK
104 01KD7R4D5BVGPWKXE6A7FNVNRA 2025-12-24 08:38:11.883+00 2025-12-24 08:38:11.883+00 NULL https://storage.danakcorp.com/images/1766565491264-946731491.svg 01KD7DGBDFX76VKXMKQKR51RJK
105 01KD7R4RFYFFQ4GV5TQ3DH6BW6 2025-12-24 08:38:23.486+00 2025-12-24 08:38:23.486+00 NULL https://storage.danakcorp.com/images/1766565502475-288189136.svg 01KD7DGBDFX76VKXMKQKR51RJK
106 01KD7R5KMSAGCXZCTQPTVYDTA7 2025-12-24 08:38:51.289+00 2025-12-24 08:38:51.289+00 NULL https://storage.danakcorp.com/images/1766565530628-800474580.svg 01KD7DGBDFX76VKXMKQKR51RJK
107 01KD7R64HYQD37W8ASB2Q817MW 2025-12-24 08:39:08.606+00 2025-12-24 08:39:08.606+00 NULL https://storage.danakcorp.com/images/1766565547983-878658938.svg 01KD7DGBDFX76VKXMKQKR51RJK
108 01KD7R6KF9YWZBZ3WPAKXQS2CH 2025-12-24 08:39:23.881+00 2025-12-24 08:39:23.881+00 NULL https://storage.danakcorp.com/images/1766565563263-891688321.svg 01KD7DGBDFX76VKXMKQKR51RJK
109 01KD7R7RM02R8FZ4DN65WMJVE8 2025-12-24 08:40:01.92+00 2025-12-24 08:40:01.92+00 NULL https://storage.danakcorp.com/images/1766565600547-704332792.svg 01KD7DG4VCTWZRSA54M3PEJ6NW
110 01KD7R8G53XBC6AG6KAVSBW94G 2025-12-24 08:40:26.019+00 2025-12-24 08:40:26.019+00 NULL https://storage.danakcorp.com/images/1766565625437-528383713.svg 01KD7DGBDFX76VKXMKQKR51RJK
111 01KD7R901TPNAX9YYRG6W0GWHF 2025-12-24 08:40:42.298+00 2025-12-24 08:40:42.298+00 NULL https://storage.danakcorp.com/images/1766565641620-53176909.svg 01KD7DGBDFX76VKXMKQKR51RJK
112 01KD7R9PKF9G1DD1HMS2QQQN9V 2025-12-24 08:41:05.391+00 2025-12-24 08:41:05.391+00 NULL https://storage.danakcorp.com/images/1766565664427-433669317.svg 01KD7DGBDFX76VKXMKQKR51RJK
113 01KD7RK2G6E5JKEDK9P95W79PR 2025-12-24 08:46:12.487+00 2025-12-24 08:46:12.487+00 NULL https://storage.danakcorp.com/images/1766565971515-159903323.svg 01KD7DGBDFX76VKXMKQKR51RJK
114 01KD7RKSM9QD6RA2H6WGE23KEC 2025-12-24 08:46:36.169+00 2025-12-24 08:46:36.169+00 NULL https://storage.danakcorp.com/images/1766565995424-288101561.svg 01KD7DGBDFX76VKXMKQKR51RJK
115 01KD7RMR9DRA1TG2BJ9Q8QAZ15 2025-12-24 08:47:07.565+00 2025-12-24 08:47:07.565+00 NULL https://storage.danakcorp.com/images/1766566026942-868807643.svg 01KD7DGBDFX76VKXMKQKR51RJK
116 01KD7RN6FH0TX69RZTKJKM6MEN 2025-12-24 08:47:22.097+00 2025-12-24 08:47:22.097+00 NULL https://storage.danakcorp.com/images/1766566041525-973019175.svg 01KD7DGBDFX76VKXMKQKR51RJK
117 01KD7RNX4EE92QR2C24577BJCW 2025-12-24 08:47:45.294+00 2025-12-24 08:47:45.294+00 NULL https://storage.danakcorp.com/images/1766566064741-271844433.svg 01KD7DGBDFX76VKXMKQKR51RJK
118 01KD7RPHHCKNXNQH29WSG84D2Z 2025-12-24 08:48:06.189+00 2025-12-24 08:48:06.189+00 NULL https://storage.danakcorp.com/images/1766566084368-438871956.svg 01KD7DGBDFX76VKXMKQKR51RJK
119 01KD7RQ6MFA5CDQ4J55NG3N7PX 2025-12-24 08:48:27.791+00 2025-12-24 08:48:27.791+00 NULL https://storage.danakcorp.com/images/1766566106954-47179607.svg 01KD7DGBDFX76VKXMKQKR51RJK
120 01KD7RQNXJNRXS8MXV57R50PKN 2025-12-24 08:48:43.443+00 2025-12-24 08:48:43.443+00 NULL https://storage.danakcorp.com/images/1766566122836-486871124.svg 01KD7DGBDFX76VKXMKQKR51RJK
121 01KD7RR9W6B9BTWJ0N2H11TWM1 2025-12-24 08:49:03.879+00 2025-12-24 08:49:03.879+00 NULL https://storage.danakcorp.com/images/1766566143171-668309076.svg 01KD7DGBDFX76VKXMKQKR51RJK
122 01KD7RRVQWYHSHN3M7R25GNGHS 2025-12-24 08:49:22.172+00 2025-12-24 08:49:22.172+00 NULL https://storage.danakcorp.com/images/1766566161551-844376214.svg 01KD7DGBDFX76VKXMKQKR51RJK
123 01KD7RSAKAP1TJ59GN11DEAXD9 2025-12-24 08:49:37.386+00 2025-12-24 08:49:37.386+00 NULL https://storage.danakcorp.com/images/1766566176755-30806596.svg 01KD7DGBDFX76VKXMKQKR51RJK
124 01KD7RSV35PY1A6193H4GDW1ZW 2025-12-24 08:49:54.277+00 2025-12-24 08:49:54.277+00 NULL https://storage.danakcorp.com/images/1766566193720-339416210.svg 01KD7DGBDFX76VKXMKQKR51RJK
125 01KD7RWX3D4ZZE35W345HDK35S 2025-12-24 08:51:34.638+00 2025-12-24 08:51:34.638+00 NULL https://storage.danakcorp.com/images/1766566293736-981836756.svg 01KD7DGBDFX76VKXMKQKR51RJK
126 01KD7RX79BVR30WGKXAZQ3D0CM 2025-12-24 08:51:45.068+00 2025-12-24 08:51:45.068+00 NULL https://storage.danakcorp.com/images/1766566304318-193301989.svg 01KD7DGBDFX76VKXMKQKR51RJK
127 01KD7RXY99C8PV6SAR0AJ00F16 2025-12-24 08:52:08.618+00 2025-12-24 08:52:08.618+00 NULL https://storage.danakcorp.com/images/1766566327768-2675508.svg 01KD7DGBDFX76VKXMKQKR51RJK
128 01KD7RYBPV273KCR350ESK2FN1 2025-12-24 08:52:22.364+00 2025-12-24 08:52:22.364+00 NULL https://storage.danakcorp.com/images/1766566341717-462491426.svg 01KD7DGBDFX76VKXMKQKR51RJK
129 01KD7RYTNTE20YS29X2XJT7GY3 2025-12-24 08:52:37.69+00 2025-12-24 08:52:37.69+00 NULL https://storage.danakcorp.com/images/1766566357028-432111036.svg 01KD7DGBDFX76VKXMKQKR51RJK
130 01KD7RZ8K86GCJSW1E0EC5T4B2 2025-12-24 08:52:51.944+00 2025-12-24 08:52:51.944+00 NULL https://storage.danakcorp.com/images/1766566371354-279596850.svg 01KD7DGBDFX76VKXMKQKR51RJK
131 01KD7RZPNGASPYFP9XKMSY208B 2025-12-24 08:53:06.352+00 2025-12-24 08:53:06.352+00 NULL https://storage.danakcorp.com/images/1766566385674-569493499.svg 01KD7DGBDFX76VKXMKQKR51RJK
132 01KD7S0HEQZ4AY5TTFKF36HS6F 2025-12-24 08:53:33.783+00 2025-12-24 08:53:33.783+00 NULL https://storage.danakcorp.com/images/1766566413058-975642584.svg 01KD7DGBDFX76VKXMKQKR51RJK
133 01KD7S0ZEQ6BH163HCX0MQZHBJ 2025-12-24 08:53:48.119+00 2025-12-24 08:53:48.119+00 NULL https://storage.danakcorp.com/images/1766566427440-982841441.svg 01KD7DGBDFX76VKXMKQKR51RJK
134 01KD7S1EF6R6J6AMMC6HP5J0AA 2025-12-24 08:54:03.494+00 2025-12-24 08:54:03.494+00 NULL https://storage.danakcorp.com/images/1766566442808-761588425.svg 01KD7DGBDFX76VKXMKQKR51RJK
135 01KD7S27EFH2CDEK71GVQC839G 2025-12-24 08:54:29.074+00 2025-12-24 08:54:29.074+00 NULL https://storage.danakcorp.com/images/1766566468108-519151895.svg 01KD7DGBDFX76VKXMKQKR51RJK
136 01KD7S2N705Z754YS3YFQW4AGQ 2025-12-24 08:54:43.169+00 2025-12-24 08:54:43.169+00 NULL https://storage.danakcorp.com/images/1766566482278-661272876.svg 01KD7DGBDFX76VKXMKQKR51RJK
137 01KD7S31HNKPAAK58CX77BNJCA 2025-12-24 08:54:55.798+00 2025-12-24 08:54:55.798+00 NULL https://storage.danakcorp.com/images/1766566494050-408184442.svg 01KD7DGBDFX76VKXMKQKR51RJK
138 01KD7S3AX9VW5B830MYJYGXQ0B 2025-12-24 08:55:05.385+00 2025-12-24 08:55:05.385+00 NULL https://storage.danakcorp.com/images/1766566504760-709260995.svg 01KD7DGBDFX76VKXMKQKR51RJK
-205
View File
@@ -1,205 +0,0 @@
--
-- PostgreSQL database dump
--
\restrict acoqslHA6I152rhJbwpzhi5E4Cp5r1Bq6kFOAPp82JWutcjW9v0rh7ptBQwHz6l
-- Dumped from database version 17.6 (Debian 17.6-2.pgdg13+1)
-- Dumped by pg_dump version 17.7 (Ubuntu 17.7-3.pgdg24.04+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET transaction_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: icon_groups; Type: TABLE DATA; Schema: public; Owner: -
--
INSERT INTO public.icon_groups (id, created_at, updated_at, deleted_at, name) VALUES ('01KD7DG4VCTWZRSA54M3PEJ6NW', '2025-12-24 05:32:22.252+00', '2025-12-24 05:32:22.252+00', NULL, 'پک آیکون 1');
INSERT INTO public.icon_groups (id, created_at, updated_at, deleted_at, name) VALUES ('01KD7DGBDFX76VKXMKQKR51RJK', '2025-12-24 05:32:28.976+00', '2025-12-24 05:32:28.976+00', NULL, 'پک آیکون 2');
--
-- PostgreSQL database dump complete
--
\unrestrict acoqslHA6I152rhJbwpzhi5E4Cp5r1Bq6kFOAPp82JWutcjW9v0rh7ptBQwHz6l
--
-- PostgreSQL database dump
--
\restrict 4pvnNoptyhScdLjLBpsonU6ZnOH502ap2y2am0YHcRG7WkY1NxnW43VtUD3Gq85
-- Dumped from database version 17.6 (Debian 17.6-2.pgdg13+1)
-- Dumped by pg_dump version 17.7 (Ubuntu 17.7-3.pgdg24.04+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET transaction_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Data for Name: icons; Type: TABLE DATA; Schema: public; Owner: -
--
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DGWH6TDB47V4710FDT7SR', '2025-12-24 05:32:46.503+00', '2025-12-24 05:32:46.503+00', NULL, 'https://storage.danakcorp.com/images/1766554365832-411750172.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DH9F6BN4TEM96TA2QT4GJ', '2025-12-24 05:32:59.751+00', '2025-12-24 05:32:59.751+00', NULL, 'https://storage.danakcorp.com/images/1766554379149-104970938.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DHK6ZTEGPRBNXJPV49TE6', '2025-12-24 05:33:09.727+00', '2025-12-24 05:33:09.727+00', NULL, 'https://storage.danakcorp.com/images/1766554389090-593863597.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DJ2NVEHVQMDCAM31VKKGK', '2025-12-24 05:33:25.564+00', '2025-12-24 05:33:25.564+00', NULL, 'https://storage.danakcorp.com/images/1766554404968-905984091.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DJCQY1V84DAVXPV097HE6', '2025-12-24 05:33:35.871+00', '2025-12-24 05:33:35.871+00', NULL, 'https://storage.danakcorp.com/images/1766554415325-873800591.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DJSZ2XVX971FGNFRRDQV6', '2025-12-24 05:33:49.411+00', '2025-12-24 05:33:49.411+00', NULL, 'https://storage.danakcorp.com/images/1766554428814-77027818.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DK3HJAD9SMDD8CM1RPNQS', '2025-12-24 05:33:59.218+00', '2025-12-24 05:33:59.218+00', NULL, 'https://storage.danakcorp.com/images/1766554438632-45072052.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DKB23B6XWJ8CMAKQ5R8HS', '2025-12-24 05:34:06.915+00', '2025-12-24 05:34:06.915+00', NULL, 'https://storage.danakcorp.com/images/1766554446340-463157109.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DKN32VCDQDF2D407MGKF0', '2025-12-24 05:34:17.186+00', '2025-12-24 05:34:17.186+00', NULL, 'https://storage.danakcorp.com/images/1766554456605-280166176.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DM4AEQ2FCJGZM390N7YVJ', '2025-12-24 05:34:32.782+00', '2025-12-24 05:34:32.782+00', NULL, 'https://storage.danakcorp.com/images/1766554471887-315640495.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DMHKWJSHX6BR41FTDYVHE', '2025-12-24 05:34:46.396+00', '2025-12-24 05:34:46.396+00', NULL, 'https://storage.danakcorp.com/images/1766554485634-242317100.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DN3XNDW2JQ0RGM711R9Q5', '2025-12-24 05:35:05.141+00', '2025-12-24 05:35:05.141+00', NULL, 'https://storage.danakcorp.com/images/1766554504553-157481346.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DNV0F9CPMKQ4R482MTVKJ', '2025-12-24 05:35:28.783+00', '2025-12-24 05:35:28.783+00', NULL, 'https://storage.danakcorp.com/images/1766554528198-919877647.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DPAKCPXD2GK0FCZ7N3XXP', '2025-12-24 05:35:44.749+00', '2025-12-24 05:35:44.749+00', NULL, 'https://storage.danakcorp.com/images/1766554544140-886744157.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DPZGZFZPS5AJ8RNM3W16F', '2025-12-24 05:36:06.175+00', '2025-12-24 05:36:06.175+00', NULL, 'https://storage.danakcorp.com/images/1766554565614-684869010.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DQCMAD39T5QB5728M6PFP', '2025-12-24 05:36:19.594+00', '2025-12-24 05:36:19.594+00', NULL, 'https://storage.danakcorp.com/images/1766554578855-318583145.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DQTQHGWP5J77V327Y4GHZ', '2025-12-24 05:36:34.034+00', '2025-12-24 05:36:34.034+00', NULL, 'https://storage.danakcorp.com/images/1766554593272-362758712.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DR75VSDY0B28AFTB6QP9M', '2025-12-24 05:36:46.779+00', '2025-12-24 05:36:46.779+00', NULL, 'https://storage.danakcorp.com/images/1766554606166-877198688.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DRRT3B7BAA714MMYVVHN4', '2025-12-24 05:37:04.835+00', '2025-12-24 05:37:04.835+00', NULL, 'https://storage.danakcorp.com/images/1766554624133-21439996.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DS9TQY1KWPM2HY7VC7THR', '2025-12-24 05:37:22.263+00', '2025-12-24 05:37:22.263+00', NULL, 'https://storage.danakcorp.com/images/1766554641691-535696200.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DST85ZZ0SKSVDYJWN67VQ', '2025-12-24 05:37:39.078+00', '2025-12-24 05:37:39.078+00', NULL, 'https://storage.danakcorp.com/images/1766554658481-114730426.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7DT75Y84N1ECNV2WW6VQ37', '2025-12-24 05:37:52.318+00', '2025-12-24 05:37:52.318+00', NULL, 'https://storage.danakcorp.com/images/1766554671760-634916570.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7E3837FJ9TDDKPF8S6PHK6', '2025-12-24 05:42:48.167+00', '2025-12-24 05:42:48.167+00', NULL, 'https://storage.danakcorp.com/images/1766554967381-660612838.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7E7G89J5KH2ZT45F0MT5X3', '2025-12-24 05:45:07.593+00', '2025-12-24 05:45:07.593+00', NULL, 'https://storage.danakcorp.com/images/1766555106925-267924006.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EBA6ATBBFVMGWQHACZ1G7', '2025-12-24 05:47:12.459+00', '2025-12-24 05:47:12.459+00', NULL, 'https://storage.danakcorp.com/images/1766555231674-387319393.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7ED3NRKEX3Z8G6CTHK5QAB', '2025-12-24 05:48:11.32+00', '2025-12-24 05:48:11.32+00', NULL, 'https://storage.danakcorp.com/images/1766555290519-155637622.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EDN07W94SGG04BRNRNRWT', '2025-12-24 05:48:29.063+00', '2025-12-24 05:48:29.063+00', NULL, 'https://storage.danakcorp.com/images/1766555308301-230359494.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EH2W75B2H8JGMHR9P76ZE', '2025-12-24 05:50:21.576+00', '2025-12-24 05:50:21.576+00', NULL, 'https://storage.danakcorp.com/images/1766555420851-186440015.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EP8V3KQYMDCDMXYP1QKPK', '2025-12-24 05:53:11.523+00', '2025-12-24 05:53:11.523+00', NULL, 'https://storage.danakcorp.com/images/1766555590828-644527730.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EPRJWQAQX00F0J02FV05J', '2025-12-24 05:53:27.644+00', '2025-12-24 05:53:27.644+00', NULL, 'https://storage.danakcorp.com/images/1766555606997-571682462.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7ERGH1ABTPGSJN1WFTESP6', '2025-12-24 05:54:24.929+00', '2025-12-24 05:54:24.929+00', NULL, 'https://storage.danakcorp.com/images/1766555663659-433052581.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7ET0394XN31KFT3340R04H', '2025-12-24 05:55:13.641+00', '2025-12-24 05:55:13.641+00', NULL, 'https://storage.danakcorp.com/images/1766555713098-988242030.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7ETCZBFV8ZZF1GFDKP7DXA', '2025-12-24 05:55:26.827+00', '2025-12-24 05:55:26.827+00', NULL, 'https://storage.danakcorp.com/images/1766555726158-680948882.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EV0VW1M18RGBB54C4YDAC', '2025-12-24 05:55:47.196+00', '2025-12-24 05:55:47.196+00', NULL, 'https://storage.danakcorp.com/images/1766555746650-426516324.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EVMP392QF71V6QFGK9XQA', '2025-12-24 05:56:07.491+00', '2025-12-24 05:56:07.491+00', NULL, 'https://storage.danakcorp.com/images/1766555765798-127083646.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EW6MQX0VFPS21TJPSEBAH', '2025-12-24 05:56:25.879+00', '2025-12-24 05:56:25.879+00', NULL, 'https://storage.danakcorp.com/images/1766555784837-243715698.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EWMGEHYQRKBM6XBS9EKTF', '2025-12-24 05:56:40.078+00', '2025-12-24 05:56:40.078+00', NULL, 'https://storage.danakcorp.com/images/1766555799191-594035927.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7EZHSEJ4G27VT3HS7JZ8YN', '2025-12-24 05:58:15.599+00', '2025-12-24 05:58:15.599+00', NULL, 'https://storage.danakcorp.com/images/1766555894624-524350777.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7F0PCEADF1HWJ47V8RP1ZP', '2025-12-24 05:58:53.07+00', '2025-12-24 05:58:53.07+00', NULL, 'https://storage.danakcorp.com/images/1766555932114-485954688.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7F184CHB129A900K2V6N94', '2025-12-24 05:59:11.244+00', '2025-12-24 05:59:11.244+00', NULL, 'https://storage.danakcorp.com/images/1766555949650-909996041.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7F1R0JNNRP8QW8NHANZB01', '2025-12-24 05:59:27.506+00', '2025-12-24 05:59:27.506+00', NULL, 'https://storage.danakcorp.com/images/1766555966861-75517122.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7F2Z1V0T1S47R7VWBEPY66', '2025-12-24 06:00:07.483+00', '2025-12-24 06:00:07.483+00', NULL, 'https://storage.danakcorp.com/images/1766556006875-239689681.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FAP3S04D5CW51W98YZRHE', '2025-12-24 06:04:20.473+00', '2025-12-24 06:04:20.473+00', NULL, 'https://storage.danakcorp.com/images/1766556257163-459958715.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FBQJAV9HJMG4EVRKPSAC5', '2025-12-24 06:04:54.73+00', '2025-12-24 06:04:54.73+00', NULL, 'https://storage.danakcorp.com/images/1766556293812-665835248.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FC48FRARBP7ZXN7SPGP8K', '2025-12-24 06:05:07.727+00', '2025-12-24 06:05:07.727+00', NULL, 'https://storage.danakcorp.com/images/1766556307082-162280793.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FD4SW2G73QX0YY6KNK7V4', '2025-12-24 06:05:41.052+00', '2025-12-24 06:05:41.052+00', NULL, 'https://storage.danakcorp.com/images/1766556340402-744632392.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FGRC85J6JXEYNBGCPY0S4', '2025-12-24 06:07:39.4+00', '2025-12-24 06:07:39.4+00', NULL, 'https://storage.danakcorp.com/images/1766556458335-857124841.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FHCW86SPVBSC8N62YEY5R', '2025-12-24 06:08:00.393+00', '2025-12-24 06:08:00.393+00', NULL, 'https://storage.danakcorp.com/images/1766556479530-161860621.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FHYWZ73T36XKTDQ5FEN7G', '2025-12-24 06:08:18.847+00', '2025-12-24 06:08:18.847+00', NULL, 'https://storage.danakcorp.com/images/1766556498215-91175544.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FQDYPGWD05HHATWBC499Z', '2025-12-24 06:11:18.103+00', '2025-12-24 06:11:18.103+00', NULL, 'https://storage.danakcorp.com/images/1766556677355-108854669.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FS7QGJJ3YRSM10Y5YWD6C', '2025-12-24 06:12:17.264+00', '2025-12-24 06:12:17.264+00', NULL, 'https://storage.danakcorp.com/images/1766556736283-691587656.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FSY2XKBREKJ9HCNJN924C', '2025-12-24 06:12:40.157+00', '2025-12-24 06:12:40.157+00', NULL, 'https://storage.danakcorp.com/images/1766556759367-58066921.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FTFZ25MHQATRC41Y3EPQS', '2025-12-24 06:12:58.468+00', '2025-12-24 06:12:58.468+00', NULL, 'https://storage.danakcorp.com/images/1766556777353-490756125.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FXARH84SJYESXVAG0AH3Q', '2025-12-24 06:14:31.441+00', '2025-12-24 06:14:31.441+00', NULL, 'https://storage.danakcorp.com/images/1766556870740-118553581.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FXXV4DP74NGWJC0J43MDP', '2025-12-24 06:14:50.98+00', '2025-12-24 06:14:50.98+00', NULL, 'https://storage.danakcorp.com/images/1766556890334-962678132.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FYVRNQAAA0DQZ8NZ02F2R', '2025-12-24 06:15:21.621+00', '2025-12-24 06:15:21.621+00', NULL, 'https://storage.danakcorp.com/images/1766556921029-865260745.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7FZMJ4QGTG6NZEDKWP7V0W', '2025-12-24 06:15:47.013+00', '2025-12-24 06:15:47.013+00', NULL, 'https://storage.danakcorp.com/images/1766556946363-320833501.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7G0F8GTY7KZ530Y9XF8YXF', '2025-12-24 06:16:14.352+00', '2025-12-24 06:16:14.352+00', NULL, 'https://storage.danakcorp.com/images/1766556973771-832565827.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7G300731YZQDT3FVAP0KHH', '2025-12-24 06:17:37.031+00', '2025-12-24 06:17:37.031+00', NULL, 'https://storage.danakcorp.com/images/1766557056358-727862983.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7G7BHM8WEXFHHKD09MG10J', '2025-12-24 06:19:59.925+00', '2025-12-24 06:19:59.925+00', NULL, 'https://storage.danakcorp.com/images/1766557199259-72955190.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7G8ZM2FPZ9H5BVGD983CTS', '2025-12-24 06:20:53.25+00', '2025-12-24 06:20:53.25+00', NULL, 'https://storage.danakcorp.com/images/1766557252452-988016525.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7G9N7J647RH94K5WQB1Q3B', '2025-12-24 06:21:15.378+00', '2025-12-24 06:21:15.378+00', NULL, 'https://storage.danakcorp.com/images/1766557274778-439028456.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GA36DDJBQJ15XT4D0E2D6', '2025-12-24 06:21:29.678+00', '2025-12-24 06:21:29.678+00', NULL, 'https://storage.danakcorp.com/images/1766557289094-415104854.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GAEZKQKRC80EP7F03K22K', '2025-12-24 06:21:41.747+00', '2025-12-24 06:21:41.747+00', NULL, 'https://storage.danakcorp.com/images/1766557300923-302277606.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GAYJAHXAZV84PN3X2N4FY', '2025-12-24 06:21:57.707+00', '2025-12-24 06:21:57.707+00', NULL, 'https://storage.danakcorp.com/images/1766557317091-602116315.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GN1W5Q0WZWCJR8V62AD88', '2025-12-24 06:27:28.774+00', '2025-12-24 06:27:28.774+00', NULL, 'https://storage.danakcorp.com/images/1766557647999-47333939.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GNPEX4CMZHRVYB4AZYSK3', '2025-12-24 06:27:49.853+00', '2025-12-24 06:27:49.853+00', NULL, 'https://storage.danakcorp.com/images/1766557669282-172512141.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GPSY27QGH5XSPXWHD8VJ5', '2025-12-24 06:28:26.179+00', '2025-12-24 06:28:26.179+00', NULL, 'https://storage.danakcorp.com/images/1766557705283-692546793.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GQGZK52YM87E283013JS4', '2025-12-24 06:28:49.779+00', '2025-12-24 06:28:49.779+00', NULL, 'https://storage.danakcorp.com/images/1766557729175-762576743.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GRBRZTFFHDS1A6MH2CMJ4', '2025-12-24 06:29:17.215+00', '2025-12-24 06:29:17.215+00', NULL, 'https://storage.danakcorp.com/images/1766557756487-665300947.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GRYXHE220H9C3VH4VAC8E', '2025-12-24 06:29:36.817+00', '2025-12-24 06:29:36.817+00', NULL, 'https://storage.danakcorp.com/images/1766557776067-804149228.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GSKMZH8WAH5VYAS4GH02C', '2025-12-24 06:29:58.048+00', '2025-12-24 06:29:58.048+00', NULL, 'https://storage.danakcorp.com/images/1766557797509-101726352.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GT6A83SX8NKPVHYXAKJ3H', '2025-12-24 06:30:17.16+00', '2025-12-24 06:30:17.16+00', NULL, 'https://storage.danakcorp.com/images/1766557816484-357699340.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7GTTKT3H3EDFTRCY8P2AE9', '2025-12-24 06:30:37.946+00', '2025-12-24 06:30:37.946+00', NULL, 'https://storage.danakcorp.com/images/1766557837292-326521286.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7J0VP01FCP0TEHYG0MD191', '2025-12-24 06:51:24.224+00', '2025-12-24 06:51:24.224+00', NULL, 'https://storage.danakcorp.com/images/1766559083575-564721059.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7J1BMTMBMV009EYC7N4G7D', '2025-12-24 06:51:40.57+00', '2025-12-24 06:51:40.57+00', NULL, 'https://storage.danakcorp.com/images/1766559099561-720966516.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7J1W90CASGWZKBFMN75STB', '2025-12-24 06:51:57.601+00', '2025-12-24 06:51:57.601+00', NULL, 'https://storage.danakcorp.com/images/1766559116496-834964990.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NS1HJ2C707G3KXRRZCN7Y', '2025-12-24 07:57:02.387+00', '2025-12-24 07:57:02.387+00', NULL, 'https://storage.danakcorp.com/images/1766563021426-600579018.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NSHYZ6XESEJR7MCKS7CY0', '2025-12-24 07:57:19.199+00', '2025-12-24 07:57:19.199+00', NULL, 'https://storage.danakcorp.com/images/1766563038525-727531190.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NSYX5W066SDN0RYBKXHQ3', '2025-12-24 07:57:32.454+00', '2025-12-24 07:57:32.454+00', NULL, 'https://storage.danakcorp.com/images/1766563051485-824602001.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NTCZK4NYE3KCYDM1247GP', '2025-12-24 07:57:46.867+00', '2025-12-24 07:57:46.867+00', NULL, 'https://storage.danakcorp.com/images/1766563066017-372210647.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NW5KZEW4M2ZJX93T53G41', '2025-12-24 07:58:44.863+00', '2025-12-24 07:58:44.863+00', NULL, 'https://storage.danakcorp.com/images/1766563124296-331607800.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NWQ7YFJ7HDNWRB5F1V47Q', '2025-12-24 07:59:02.91+00', '2025-12-24 07:59:02.91+00', NULL, 'https://storage.danakcorp.com/images/1766563142133-359920423.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NXCZSEN7M2TN0DT0XVVR9', '2025-12-24 07:59:25.177+00', '2025-12-24 07:59:25.177+00', NULL, 'https://storage.danakcorp.com/images/1766563164270-350101986.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NXXMYZFMAWMRS23GRZSKP', '2025-12-24 07:59:42.238+00', '2025-12-24 07:59:42.238+00', NULL, 'https://storage.danakcorp.com/images/1766563181587-86630830.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NYP6M0HNC3A4XCXHK4W4M', '2025-12-24 08:00:07.38+00', '2025-12-24 08:00:07.38+00', NULL, 'https://storage.danakcorp.com/images/1766563204966-651499380.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7NZ3PDZX4WTVV3KC5MTD8K', '2025-12-24 08:00:21.198+00', '2025-12-24 08:00:21.198+00', NULL, 'https://storage.danakcorp.com/images/1766563220596-103699525.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7P0FWPK3HTYVX14XMGCHTC', '2025-12-24 08:01:06.455+00', '2025-12-24 08:01:06.455+00', NULL, 'https://storage.danakcorp.com/images/1766563265634-373953449.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7P0SAN0PA6KAGE3ABAXSWF', '2025-12-24 08:01:16.117+00', '2025-12-24 08:01:16.117+00', NULL, 'https://storage.danakcorp.com/images/1766563275517-958045207.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7P1429PQT8NFDFRZEDNH1P', '2025-12-24 08:01:27.113+00', '2025-12-24 08:01:27.113+00', NULL, 'https://storage.danakcorp.com/images/1766563286526-622849562.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QC4M3D2SF26ZH0S0SDWBD', '2025-12-24 08:24:56.708+00', '2025-12-24 08:24:56.708+00', NULL, 'https://storage.danakcorp.com/images/1766564695339-504553420.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QCEDA0T3CGZ01NGBKWZ9S', '2025-12-24 08:25:06.73+00', '2025-12-24 08:25:06.73+00', NULL, 'https://storage.danakcorp.com/images/1766564706032-159367016.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QCWQ00TVCK7BAAHSWA09H', '2025-12-24 08:25:21.376+00', '2025-12-24 08:25:21.376+00', NULL, 'https://storage.danakcorp.com/images/1766564720683-887818252.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QDA1R9WTTV2JWQ2Y3WGST', '2025-12-24 08:25:35.032+00', '2025-12-24 08:25:35.032+00', NULL, 'https://storage.danakcorp.com/images/1766564734432-483528219.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QDSCQNW2JC4SAQCK0QBNW', '2025-12-24 08:25:50.743+00', '2025-12-24 08:25:50.743+00', NULL, 'https://storage.danakcorp.com/images/1766564750099-854146988.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QE1NXGG08JQ5F2BC35NFC', '2025-12-24 08:25:59.23+00', '2025-12-24 08:25:59.23+00', NULL, 'https://storage.danakcorp.com/images/1766564758573-696060786.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QFFXDVTSB5VAXB640HR7N', '2025-12-24 08:26:46.574+00', '2025-12-24 08:26:46.574+00', NULL, 'https://storage.danakcorp.com/images/1766564805823-829938380.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QJ37DT4NCD6QY9MNGCZXZ', '2025-12-24 08:28:11.885+00', '2025-12-24 08:28:11.885+00', NULL, 'https://storage.danakcorp.com/images/1766564891137-468827500.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QJJZX6Y7CR8R60W3TNKRS', '2025-12-24 08:28:28.029+00', '2025-12-24 08:28:28.029+00', NULL, 'https://storage.danakcorp.com/images/1766564907215-921380792.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7QK69ZH6B4S602YKZCBVMB', '2025-12-24 08:28:47.807+00', '2025-12-24 08:28:47.807+00', NULL, 'https://storage.danakcorp.com/images/1766564926872-672612697.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R3EM739KW6PV431V6P19S', '2025-12-24 08:37:40.616+00', '2025-12-24 08:37:40.616+00', NULL, 'https://storage.danakcorp.com/images/1766565459604-638026702.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R3YZ6SAQWZ4CMC4GCJ1V4', '2025-12-24 08:37:57.351+00', '2025-12-24 08:37:57.351+00', NULL, 'https://storage.danakcorp.com/images/1766565476771-42527917.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R4D5BVGPWKXE6A7FNVNRA', '2025-12-24 08:38:11.883+00', '2025-12-24 08:38:11.883+00', NULL, 'https://storage.danakcorp.com/images/1766565491264-946731491.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R4RFYFFQ4GV5TQ3DH6BW6', '2025-12-24 08:38:23.486+00', '2025-12-24 08:38:23.486+00', NULL, 'https://storage.danakcorp.com/images/1766565502475-288189136.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R5KMSAGCXZCTQPTVYDTA7', '2025-12-24 08:38:51.289+00', '2025-12-24 08:38:51.289+00', NULL, 'https://storage.danakcorp.com/images/1766565530628-800474580.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R64HYQD37W8ASB2Q817MW', '2025-12-24 08:39:08.606+00', '2025-12-24 08:39:08.606+00', NULL, 'https://storage.danakcorp.com/images/1766565547983-878658938.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R6KF9YWZBZ3WPAKXQS2CH', '2025-12-24 08:39:23.881+00', '2025-12-24 08:39:23.881+00', NULL, 'https://storage.danakcorp.com/images/1766565563263-891688321.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R7RM02R8FZ4DN65WMJVE8', '2025-12-24 08:40:01.92+00', '2025-12-24 08:40:01.92+00', NULL, 'https://storage.danakcorp.com/images/1766565600547-704332792.svg', '01KD7DG4VCTWZRSA54M3PEJ6NW');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R8G53XBC6AG6KAVSBW94G', '2025-12-24 08:40:26.019+00', '2025-12-24 08:40:26.019+00', NULL, 'https://storage.danakcorp.com/images/1766565625437-528383713.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R901TPNAX9YYRG6W0GWHF', '2025-12-24 08:40:42.298+00', '2025-12-24 08:40:42.298+00', NULL, 'https://storage.danakcorp.com/images/1766565641620-53176909.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7R9PKF9G1DD1HMS2QQQN9V', '2025-12-24 08:41:05.391+00', '2025-12-24 08:41:05.391+00', NULL, 'https://storage.danakcorp.com/images/1766565664427-433669317.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RK2G6E5JKEDK9P95W79PR', '2025-12-24 08:46:12.487+00', '2025-12-24 08:46:12.487+00', NULL, 'https://storage.danakcorp.com/images/1766565971515-159903323.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RKSM9QD6RA2H6WGE23KEC', '2025-12-24 08:46:36.169+00', '2025-12-24 08:46:36.169+00', NULL, 'https://storage.danakcorp.com/images/1766565995424-288101561.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RMR9DRA1TG2BJ9Q8QAZ15', '2025-12-24 08:47:07.565+00', '2025-12-24 08:47:07.565+00', NULL, 'https://storage.danakcorp.com/images/1766566026942-868807643.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RN6FH0TX69RZTKJKM6MEN', '2025-12-24 08:47:22.097+00', '2025-12-24 08:47:22.097+00', NULL, 'https://storage.danakcorp.com/images/1766566041525-973019175.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RNX4EE92QR2C24577BJCW', '2025-12-24 08:47:45.294+00', '2025-12-24 08:47:45.294+00', NULL, 'https://storage.danakcorp.com/images/1766566064741-271844433.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RPHHCKNXNQH29WSG84D2Z', '2025-12-24 08:48:06.189+00', '2025-12-24 08:48:06.189+00', NULL, 'https://storage.danakcorp.com/images/1766566084368-438871956.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RQ6MFA5CDQ4J55NG3N7PX', '2025-12-24 08:48:27.791+00', '2025-12-24 08:48:27.791+00', NULL, 'https://storage.danakcorp.com/images/1766566106954-47179607.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RQNXJNRXS8MXV57R50PKN', '2025-12-24 08:48:43.443+00', '2025-12-24 08:48:43.443+00', NULL, 'https://storage.danakcorp.com/images/1766566122836-486871124.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RR9W6B9BTWJ0N2H11TWM1', '2025-12-24 08:49:03.879+00', '2025-12-24 08:49:03.879+00', NULL, 'https://storage.danakcorp.com/images/1766566143171-668309076.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RRVQWYHSHN3M7R25GNGHS', '2025-12-24 08:49:22.172+00', '2025-12-24 08:49:22.172+00', NULL, 'https://storage.danakcorp.com/images/1766566161551-844376214.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RSAKAP1TJ59GN11DEAXD9', '2025-12-24 08:49:37.386+00', '2025-12-24 08:49:37.386+00', NULL, 'https://storage.danakcorp.com/images/1766566176755-30806596.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RSV35PY1A6193H4GDW1ZW', '2025-12-24 08:49:54.277+00', '2025-12-24 08:49:54.277+00', NULL, 'https://storage.danakcorp.com/images/1766566193720-339416210.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RWX3D4ZZE35W345HDK35S', '2025-12-24 08:51:34.638+00', '2025-12-24 08:51:34.638+00', NULL, 'https://storage.danakcorp.com/images/1766566293736-981836756.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RX79BVR30WGKXAZQ3D0CM', '2025-12-24 08:51:45.068+00', '2025-12-24 08:51:45.068+00', NULL, 'https://storage.danakcorp.com/images/1766566304318-193301989.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RXY99C8PV6SAR0AJ00F16', '2025-12-24 08:52:08.618+00', '2025-12-24 08:52:08.618+00', NULL, 'https://storage.danakcorp.com/images/1766566327768-2675508.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RYBPV273KCR350ESK2FN1', '2025-12-24 08:52:22.364+00', '2025-12-24 08:52:22.364+00', NULL, 'https://storage.danakcorp.com/images/1766566341717-462491426.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RYTNTE20YS29X2XJT7GY3', '2025-12-24 08:52:37.69+00', '2025-12-24 08:52:37.69+00', NULL, 'https://storage.danakcorp.com/images/1766566357028-432111036.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RZ8K86GCJSW1E0EC5T4B2', '2025-12-24 08:52:51.944+00', '2025-12-24 08:52:51.944+00', NULL, 'https://storage.danakcorp.com/images/1766566371354-279596850.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7RZPNGASPYFP9XKMSY208B', '2025-12-24 08:53:06.352+00', '2025-12-24 08:53:06.352+00', NULL, 'https://storage.danakcorp.com/images/1766566385674-569493499.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7S0HEQZ4AY5TTFKF36HS6F', '2025-12-24 08:53:33.783+00', '2025-12-24 08:53:33.783+00', NULL, 'https://storage.danakcorp.com/images/1766566413058-975642584.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7S0ZEQ6BH163HCX0MQZHBJ', '2025-12-24 08:53:48.119+00', '2025-12-24 08:53:48.119+00', NULL, 'https://storage.danakcorp.com/images/1766566427440-982841441.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7S1EF6R6J6AMMC6HP5J0AA', '2025-12-24 08:54:03.494+00', '2025-12-24 08:54:03.494+00', NULL, 'https://storage.danakcorp.com/images/1766566442808-761588425.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7S27EFH2CDEK71GVQC839G', '2025-12-24 08:54:29.074+00', '2025-12-24 08:54:29.074+00', NULL, 'https://storage.danakcorp.com/images/1766566468108-519151895.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7S2N705Z754YS3YFQW4AGQ', '2025-12-24 08:54:43.169+00', '2025-12-24 08:54:43.169+00', NULL, 'https://storage.danakcorp.com/images/1766566482278-661272876.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7S31HNKPAAK58CX77BNJCA', '2025-12-24 08:54:55.798+00', '2025-12-24 08:54:55.798+00', NULL, 'https://storage.danakcorp.com/images/1766566494050-408184442.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
INSERT INTO public.icons (id, created_at, updated_at, deleted_at, url, group_id) VALUES ('01KD7S3AX9VW5B830MYJYGXQ0B', '2025-12-24 08:55:05.385+00', '2025-12-24 08:55:05.385+00', NULL, 'https://storage.danakcorp.com/images/1766566504760-709260995.svg', '01KD7DGBDFX76VKXMKQKR51RJK');
--
-- PostgreSQL database dump complete
--
\unrestrict 4pvnNoptyhScdLjLBpsonU6ZnOH502ap2y2am0YHcRG7WkY1NxnW43VtUD3Gq85
-138
View File
@@ -1,138 +0,0 @@
Index,Name,URL
1,bread,https://storage.danakcorp.com/images/1766554365832-411750172.svg
2,avocado,https://storage.danakcorp.com/images/1766554379149-104970938.svg
3,knife,https://storage.danakcorp.com/images/1766554389090-593863597.svg
4,baby bottle,https://storage.danakcorp.com/images/1766554404968-905984091.svg
5,baby bottle,https://storage.danakcorp.com/images/1766554415325-873800591.svg
6,baby pacifier,https://storage.danakcorp.com/images/1766554428814-77027818.svg
7,banana,https://storage.danakcorp.com/images/1766554438632-45072052.svg
8,barbecue,https://storage.danakcorp.com/images/1766554446340-463157109.svg
9,barbeque2,https://storage.danakcorp.com/images/1766554456605-280166176.svg
10,drink,https://storage.danakcorp.com/images/1766554471887-315640495.svg
11,hanburger,https://storage.danakcorp.com/images/1766554485634-242317100.svg
12,drink2,https://storage.danakcorp.com/images/1766554504553-157481346.svg
13,bottle1,https://storage.danakcorp.com/images/1766554528198-919877647.svg
14,bottle2,https://storage.danakcorp.com/images/1766554544140-886744157.svg
15,broccoli,https://storage.danakcorp.com/images/1766554565614-684869010.svg
16,cake1,https://storage.danakcorp.com/images/1766554578855-318583145.svg
17,cake2,https://storage.danakcorp.com/images/1766554593272-362758712.svg
18,cake piece,https://storage.danakcorp.com/images/1766554606166-877198688.svg
19,cup cake,https://storage.danakcorp.com/images/1766554624133-21439996.svg
20,caupcake2,https://storage.danakcorp.com/images/1766554641691-535696200.svg
21,candle,https://storage.danakcorp.com/images/1766554658481-114730426.svg
22,candy,https://storage.danakcorp.com/images/1766554671760-634916570.svg
23,carrot,https://storage.danakcorp.com/images/1766554967381-660612838.svg
24,cheese,https://storage.danakcorp.com/images/1766555106925-267924006.svg
25,cheese2,https://storage.danakcorp.com/images/1766555231674-387319393.svg
26,hat robe,https://storage.danakcorp.com/images/1766555290519-155637622.svg
27,hat robe 2,https://storage.danakcorp.com/images/1766555308301-230359494.svg
28,cherry,https://storage.danakcorp.com/images/1766555420851-186440015.svg
29,chicken,https://storage.danakcorp.com/images/1766555590828-644527730.svg
30,baken,https://storage.danakcorp.com/images/1766555606997-571682462.svg
31,lollipop,https://storage.danakcorp.com/images/1766555663659-433052581.svg
32,cookie1,https://storage.danakcorp.com/images/1766555713098-988242030.svg
33,cookie2,https://storage.danakcorp.com/images/1766555726158-680948882.svg
34,crosson,https://storage.danakcorp.com/images/1766555746650-426516324.svg
35,juice,https://storage.danakcorp.com/images/1766555765798-127083646.svg
36,juice2,https://storage.danakcorp.com/images/1766555784837-243715698.svg
37,juice3,https://storage.danakcorp.com/images/1766555799191-594035927.svg
38,spoon and fork 1,https://storage.danakcorp.com/images/1766555894624-524350777.svg
39,spoon and fork 2,https://storage.danakcorp.com/images/1766555932114-485954688.svg
40,spoon and knife,https://storage.danakcorp.com/images/1766555949650-909996041.svg
41,fork and knife,https://storage.danakcorp.com/images/1766555966861-75517122.svg
42,hot dog,https://storage.danakcorp.com/images/1766556006875-239689681.svg
43,soap,https://storage.danakcorp.com/images/1766556257163-459958715.svg
44,dish,https://storage.danakcorp.com/images/1766556293812-665835248.svg
45,donuts,https://storage.danakcorp.com/images/1766556307082-162280793.svg
46,egg plant,https://storage.danakcorp.com/images/1766556340402-744632392.svg
47,egg,https://storage.danakcorp.com/images/1766556458335-857124841.svg
48,fast-food,https://storage.danakcorp.com/images/1766556479530-161860621.svg
49,taco,https://storage.danakcorp.com/images/1766556498215-91175544.svg
50,fire,https://storage.danakcorp.com/images/1766556677355-108854669.svg
51,fish,https://storage.danakcorp.com/images/1766556736283-691587656.svg
52,fish,https://storage.danakcorp.com/images/1766556759367-58066921.svg
53,french fries,https://storage.danakcorp.com/images/1766556777353-490756125.svg
54,fried egg,https://storage.danakcorp.com/images/1766556870740-118553581.svg
55,refrigerator,https://storage.danakcorp.com/images/1766556890334-962678132.svg
56,grape,https://storage.danakcorp.com/images/1766556921029-865260745.svg
57,hat robe,https://storage.danakcorp.com/images/1766556946363-320833501.svg
58,hot dog,https://storage.danakcorp.com/images/1766556973771-832565827.svg
59,ice cream,https://storage.danakcorp.com/images/1766557056358-727862983.svg
60,ice cream,https://storage.danakcorp.com/images/1766557199259-72955190.svg
61,ice cream 3,https://storage.danakcorp.com/images/1766557252452-988016525.svg
62,jar,https://storage.danakcorp.com/images/1766557274778-439028456.svg
63,jelly,https://storage.danakcorp.com/images/1766557289094-415104854.svg
64,juice1,https://storage.danakcorp.com/images/1766557300923-302277606.svg
65,juice 2,https://storage.danakcorp.com/images/1766557317091-602116315.svg
66,kitchen stove,https://storage.danakcorp.com/images/1766557647999-47333939.svg
67,orange slash,https://storage.danakcorp.com/images/1766557669282-172512141.svg
68,loaf of bread,https://storage.danakcorp.com/images/1766557705283-692546793.svg
69,loaf of bread 2,https://storage.danakcorp.com/images/1766557729175-762576743.svg
70,meat,https://storage.danakcorp.com/images/1766557756487-665300947.svg
71,meat 2,https://storage.danakcorp.com/images/1766557776067-804149228.svg
72,mixer,https://storage.danakcorp.com/images/1766557797509-101726352.svg
73,mortar,https://storage.danakcorp.com/images/1766557816484-357699340.svg
74,noodle,https://storage.danakcorp.com/images/1766557837292-326521286.svg
75,nuts,https://storage.danakcorp.com/images/1766559083575-564721059.svg
76,olive,https://storage.danakcorp.com/images/1766559099561-720966516.svg
77,onion,https://storage.danakcorp.com/images/1766559116496-834964990.svg
78,pizza,https://storage.danakcorp.com/images/1766563021426-600579018.svg
79,rolling pin,https://storage.danakcorp.com/images/1766563038525-727531190.svg
80,solt,https://storage.danakcorp.com/images/1766563051485-824602001.svg
81,scales,https://storage.danakcorp.com/images/1766563066017-372210647.svg
82,basket,https://storage.danakcorp.com/images/1766563124296-331607800.svg
83,skewer,https://storage.danakcorp.com/images/1766563142133-359920423.svg
84,strawberry,https://storage.danakcorp.com/images/1766563164270-350101986.svg
85,toast,https://storage.danakcorp.com/images/1766563181587-86630830.svg
86,watermelon,https://storage.danakcorp.com/images/1766563204966-651499380.svg
87,whisk,https://storage.danakcorp.com/images/1766563220596-103699525.svg
88,wine glass,https://storage.danakcorp.com/images/1766563265634-373953449.svg
89,wine glass 2,https://storage.danakcorp.com/images/1766563275517-958045207.svg
90,wine glass 3,https://storage.danakcorp.com/images/1766563286526-622849562.svg
91,colored bakeries,https://storage.danakcorp.com/images/1766564695339-504553420.svg
92,colored bio,https://storage.danakcorp.com/images/1766564706032-159367016.svg
93,colored bibimbap,https://storage.danakcorp.com/images/1766564720683-887818252.svg
94,colored boba,https://storage.danakcorp.com/images/1766564734432-483528219.svg
95,colored breakfast,https://storage.danakcorp.com/images/1766564750099-854146988.svg
96,colored hamburger,https://storage.danakcorp.com/images/1766564758573-696060786.svg
97,colored hamburger 2,https://storage.danakcorp.com/images/1766564805823-829938380.svg
98,colored coffee,https://storage.danakcorp.com/images/1766564891137-468827500.svg
99,colored coca,https://storage.danakcorp.com/images/1766564907215-921380792.svg
100,colored cookies,https://storage.danakcorp.com/images/1766564926872-672612697.svg
101,colored noodle,https://storage.danakcorp.com/images/1766565459604-638026702.svg
102,colored crossan,https://storage.danakcorp.com/images/1766565476771-42527917.svg
103,colored sweet,https://storage.danakcorp.com/images/1766565491264-946731491.svg
104,colored dumpling,https://storage.danakcorp.com/images/1766565502475-288189136.svg
105,colored fish and chips,https://storage.danakcorp.com/images/1766565530628-800474580.svg
106,colored focaccia,https://storage.danakcorp.com/images/1766565547983-878658938.svg
107,colored french fries,https://storage.danakcorp.com/images/1766565563263-891688321.svg
108,colored fried chicken,https://storage.danakcorp.com/images/1766565600547-704332792.svg
109,colored fried rice,https://storage.danakcorp.com/images/1766565625437-528383713.svg
110,colored fries,https://storage.danakcorp.com/images/1766565641620-53176909.svg
111,hat robe,https://storage.danakcorp.com/images/1766565664427-433669317.svg
112,colored hot dog,https://storage.danakcorp.com/images/1766565971515-159903323.svg
113,colored hot dog,https://storage.danakcorp.com/images/1766565995424-288101561.svg
114,colored hot pot,https://storage.danakcorp.com/images/1766566026942-868807643.svg
115,colored ice cream,https://storage.danakcorp.com/images/1766566041525-973019175.svg
116,colored ice tea,https://storage.danakcorp.com/images/1766566064741-271844433.svg
117,colored instant noodle cup,https://storage.danakcorp.com/images/1766566084368-438871956.svg
118,lemon,https://storage.danakcorp.com/images/1766566106954-47179607.svg
119,colored martini,https://storage.danakcorp.com/images/1766566122836-486871124.svg
120,colored match,https://storage.danakcorp.com/images/1766566143171-668309076.svg
121,colored mochi donuts,https://storage.danakcorp.com/images/1766566161551-844376214.svg
122,colored mochi,https://storage.danakcorp.com/images/1766566176755-30806596.svg
123,colored nachos,https://storage.danakcorp.com/images/1766566193720-339416210.svg
124,colored origini,https://storage.danakcorp.com/images/1766566293736-981836756.svg
125,colored pan cake,https://storage.danakcorp.com/images/1766566304318-193301989.svg
126,colored pepperoni pizza,https://storage.danakcorp.com/images/1766566327768-2675508.svg
127,colored pizza 4,https://storage.danakcorp.com/images/1766566341717-462491426.svg
128,colored podding,https://storage.danakcorp.com/images/1766566357028-432111036.svg
129,quesadilla,https://storage.danakcorp.com/images/1766566371354-279596850.svg
130,salad,https://storage.danakcorp.com/images/1766566385674-569493499.svg
131,colored sandwich,https://storage.danakcorp.com/images/1766566413058-975642584.svg
132,colored stak,https://storage.danakcorp.com/images/1766566427440-982841441.svg
133,colored soshi,https://storage.danakcorp.com/images/1766566442808-761588425.svg
134,colored taco,https://storage.danakcorp.com/images/1766566468108-519151895.svg
135,colored tempura,https://storage.danakcorp.com/images/1766566482278-661272876.svg
136,colored tafu,https://storage.danakcorp.com/images/1766566494050-408184442.svg
137,whisk,https://storage.danakcorp.com/images/1766566504760-709260995.svg
1 Index Name URL
2 1 bread https://storage.danakcorp.com/images/1766554365832-411750172.svg
3 2 avocado https://storage.danakcorp.com/images/1766554379149-104970938.svg
4 3 knife https://storage.danakcorp.com/images/1766554389090-593863597.svg
5 4 baby bottle https://storage.danakcorp.com/images/1766554404968-905984091.svg
6 5 baby bottle https://storage.danakcorp.com/images/1766554415325-873800591.svg
7 6 baby pacifier https://storage.danakcorp.com/images/1766554428814-77027818.svg
8 7 banana https://storage.danakcorp.com/images/1766554438632-45072052.svg
9 8 barbecue https://storage.danakcorp.com/images/1766554446340-463157109.svg
10 9 barbeque2 https://storage.danakcorp.com/images/1766554456605-280166176.svg
11 10 drink https://storage.danakcorp.com/images/1766554471887-315640495.svg
12 11 hanburger https://storage.danakcorp.com/images/1766554485634-242317100.svg
13 12 drink2 https://storage.danakcorp.com/images/1766554504553-157481346.svg
14 13 bottle1 https://storage.danakcorp.com/images/1766554528198-919877647.svg
15 14 bottle2 https://storage.danakcorp.com/images/1766554544140-886744157.svg
16 15 broccoli https://storage.danakcorp.com/images/1766554565614-684869010.svg
17 16 cake1 https://storage.danakcorp.com/images/1766554578855-318583145.svg
18 17 cake2 https://storage.danakcorp.com/images/1766554593272-362758712.svg
19 18 cake piece https://storage.danakcorp.com/images/1766554606166-877198688.svg
20 19 cup cake https://storage.danakcorp.com/images/1766554624133-21439996.svg
21 20 caupcake2 https://storage.danakcorp.com/images/1766554641691-535696200.svg
22 21 candle https://storage.danakcorp.com/images/1766554658481-114730426.svg
23 22 candy https://storage.danakcorp.com/images/1766554671760-634916570.svg
24 23 carrot https://storage.danakcorp.com/images/1766554967381-660612838.svg
25 24 cheese https://storage.danakcorp.com/images/1766555106925-267924006.svg
26 25 cheese2 https://storage.danakcorp.com/images/1766555231674-387319393.svg
27 26 hat robe https://storage.danakcorp.com/images/1766555290519-155637622.svg
28 27 hat robe 2 https://storage.danakcorp.com/images/1766555308301-230359494.svg
29 28 cherry https://storage.danakcorp.com/images/1766555420851-186440015.svg
30 29 chicken https://storage.danakcorp.com/images/1766555590828-644527730.svg
31 30 baken https://storage.danakcorp.com/images/1766555606997-571682462.svg
32 31 lollipop https://storage.danakcorp.com/images/1766555663659-433052581.svg
33 32 cookie1 https://storage.danakcorp.com/images/1766555713098-988242030.svg
34 33 cookie2 https://storage.danakcorp.com/images/1766555726158-680948882.svg
35 34 crosson https://storage.danakcorp.com/images/1766555746650-426516324.svg
36 35 juice https://storage.danakcorp.com/images/1766555765798-127083646.svg
37 36 juice2 https://storage.danakcorp.com/images/1766555784837-243715698.svg
38 37 juice3 https://storage.danakcorp.com/images/1766555799191-594035927.svg
39 38 spoon and fork 1 https://storage.danakcorp.com/images/1766555894624-524350777.svg
40 39 spoon and fork 2 https://storage.danakcorp.com/images/1766555932114-485954688.svg
41 40 spoon and knife https://storage.danakcorp.com/images/1766555949650-909996041.svg
42 41 fork and knife https://storage.danakcorp.com/images/1766555966861-75517122.svg
43 42 hot dog https://storage.danakcorp.com/images/1766556006875-239689681.svg
44 43 soap https://storage.danakcorp.com/images/1766556257163-459958715.svg
45 44 dish https://storage.danakcorp.com/images/1766556293812-665835248.svg
46 45 donuts https://storage.danakcorp.com/images/1766556307082-162280793.svg
47 46 egg plant https://storage.danakcorp.com/images/1766556340402-744632392.svg
48 47 egg https://storage.danakcorp.com/images/1766556458335-857124841.svg
49 48 fast-food https://storage.danakcorp.com/images/1766556479530-161860621.svg
50 49 taco https://storage.danakcorp.com/images/1766556498215-91175544.svg
51 50 fire https://storage.danakcorp.com/images/1766556677355-108854669.svg
52 51 fish https://storage.danakcorp.com/images/1766556736283-691587656.svg
53 52 fish https://storage.danakcorp.com/images/1766556759367-58066921.svg
54 53 french fries https://storage.danakcorp.com/images/1766556777353-490756125.svg
55 54 fried egg https://storage.danakcorp.com/images/1766556870740-118553581.svg
56 55 refrigerator https://storage.danakcorp.com/images/1766556890334-962678132.svg
57 56 grape https://storage.danakcorp.com/images/1766556921029-865260745.svg
58 57 hat robe https://storage.danakcorp.com/images/1766556946363-320833501.svg
59 58 hot dog https://storage.danakcorp.com/images/1766556973771-832565827.svg
60 59 ice cream https://storage.danakcorp.com/images/1766557056358-727862983.svg
61 60 ice cream https://storage.danakcorp.com/images/1766557199259-72955190.svg
62 61 ice cream 3 https://storage.danakcorp.com/images/1766557252452-988016525.svg
63 62 jar https://storage.danakcorp.com/images/1766557274778-439028456.svg
64 63 jelly https://storage.danakcorp.com/images/1766557289094-415104854.svg
65 64 juice1 https://storage.danakcorp.com/images/1766557300923-302277606.svg
66 65 juice 2 https://storage.danakcorp.com/images/1766557317091-602116315.svg
67 66 kitchen stove https://storage.danakcorp.com/images/1766557647999-47333939.svg
68 67 orange slash https://storage.danakcorp.com/images/1766557669282-172512141.svg
69 68 loaf of bread https://storage.danakcorp.com/images/1766557705283-692546793.svg
70 69 loaf of bread 2 https://storage.danakcorp.com/images/1766557729175-762576743.svg
71 70 meat https://storage.danakcorp.com/images/1766557756487-665300947.svg
72 71 meat 2 https://storage.danakcorp.com/images/1766557776067-804149228.svg
73 72 mixer https://storage.danakcorp.com/images/1766557797509-101726352.svg
74 73 mortar https://storage.danakcorp.com/images/1766557816484-357699340.svg
75 74 noodle https://storage.danakcorp.com/images/1766557837292-326521286.svg
76 75 nuts https://storage.danakcorp.com/images/1766559083575-564721059.svg
77 76 olive https://storage.danakcorp.com/images/1766559099561-720966516.svg
78 77 onion https://storage.danakcorp.com/images/1766559116496-834964990.svg
79 78 pizza https://storage.danakcorp.com/images/1766563021426-600579018.svg
80 79 rolling pin https://storage.danakcorp.com/images/1766563038525-727531190.svg
81 80 solt https://storage.danakcorp.com/images/1766563051485-824602001.svg
82 81 scales https://storage.danakcorp.com/images/1766563066017-372210647.svg
83 82 basket https://storage.danakcorp.com/images/1766563124296-331607800.svg
84 83 skewer https://storage.danakcorp.com/images/1766563142133-359920423.svg
85 84 strawberry https://storage.danakcorp.com/images/1766563164270-350101986.svg
86 85 toast https://storage.danakcorp.com/images/1766563181587-86630830.svg
87 86 watermelon https://storage.danakcorp.com/images/1766563204966-651499380.svg
88 87 whisk https://storage.danakcorp.com/images/1766563220596-103699525.svg
89 88 wine glass https://storage.danakcorp.com/images/1766563265634-373953449.svg
90 89 wine glass 2 https://storage.danakcorp.com/images/1766563275517-958045207.svg
91 90 wine glass 3 https://storage.danakcorp.com/images/1766563286526-622849562.svg
92 91 colored bakeries https://storage.danakcorp.com/images/1766564695339-504553420.svg
93 92 colored bio https://storage.danakcorp.com/images/1766564706032-159367016.svg
94 93 colored bibimbap https://storage.danakcorp.com/images/1766564720683-887818252.svg
95 94 colored boba https://storage.danakcorp.com/images/1766564734432-483528219.svg
96 95 colored breakfast https://storage.danakcorp.com/images/1766564750099-854146988.svg
97 96 colored hamburger https://storage.danakcorp.com/images/1766564758573-696060786.svg
98 97 colored hamburger 2 https://storage.danakcorp.com/images/1766564805823-829938380.svg
99 98 colored coffee https://storage.danakcorp.com/images/1766564891137-468827500.svg
100 99 colored coca https://storage.danakcorp.com/images/1766564907215-921380792.svg
101 100 colored cookies https://storage.danakcorp.com/images/1766564926872-672612697.svg
102 101 colored noodle https://storage.danakcorp.com/images/1766565459604-638026702.svg
103 102 colored crossan https://storage.danakcorp.com/images/1766565476771-42527917.svg
104 103 colored sweet https://storage.danakcorp.com/images/1766565491264-946731491.svg
105 104 colored dumpling https://storage.danakcorp.com/images/1766565502475-288189136.svg
106 105 colored fish and chips https://storage.danakcorp.com/images/1766565530628-800474580.svg
107 106 colored focaccia https://storage.danakcorp.com/images/1766565547983-878658938.svg
108 107 colored french fries https://storage.danakcorp.com/images/1766565563263-891688321.svg
109 108 colored fried chicken https://storage.danakcorp.com/images/1766565600547-704332792.svg
110 109 colored fried rice https://storage.danakcorp.com/images/1766565625437-528383713.svg
111 110 colored fries https://storage.danakcorp.com/images/1766565641620-53176909.svg
112 111 hat robe https://storage.danakcorp.com/images/1766565664427-433669317.svg
113 112 colored hot dog https://storage.danakcorp.com/images/1766565971515-159903323.svg
114 113 colored hot dog https://storage.danakcorp.com/images/1766565995424-288101561.svg
115 114 colored hot pot https://storage.danakcorp.com/images/1766566026942-868807643.svg
116 115 colored ice cream https://storage.danakcorp.com/images/1766566041525-973019175.svg
117 116 colored ice tea https://storage.danakcorp.com/images/1766566064741-271844433.svg
118 117 colored instant noodle cup https://storage.danakcorp.com/images/1766566084368-438871956.svg
119 118 lemon https://storage.danakcorp.com/images/1766566106954-47179607.svg
120 119 colored martini https://storage.danakcorp.com/images/1766566122836-486871124.svg
121 120 colored match https://storage.danakcorp.com/images/1766566143171-668309076.svg
122 121 colored mochi donuts https://storage.danakcorp.com/images/1766566161551-844376214.svg
123 122 colored mochi https://storage.danakcorp.com/images/1766566176755-30806596.svg
124 123 colored nachos https://storage.danakcorp.com/images/1766566193720-339416210.svg
125 124 colored origini https://storage.danakcorp.com/images/1766566293736-981836756.svg
126 125 colored pan cake https://storage.danakcorp.com/images/1766566304318-193301989.svg
127 126 colored pepperoni pizza https://storage.danakcorp.com/images/1766566327768-2675508.svg
128 127 colored pizza 4 https://storage.danakcorp.com/images/1766566341717-462491426.svg
129 128 colored podding https://storage.danakcorp.com/images/1766566357028-432111036.svg
130 129 quesadilla https://storage.danakcorp.com/images/1766566371354-279596850.svg
131 130 salad https://storage.danakcorp.com/images/1766566385674-569493499.svg
132 131 colored sandwich https://storage.danakcorp.com/images/1766566413058-975642584.svg
133 132 colored stak https://storage.danakcorp.com/images/1766566427440-982841441.svg
134 133 colored soshi https://storage.danakcorp.com/images/1766566442808-761588425.svg
135 134 colored taco https://storage.danakcorp.com/images/1766566468108-519151895.svg
136 135 colored tempura https://storage.danakcorp.com/images/1766566482278-661272876.svg
137 136 colored tafu https://storage.danakcorp.com/images/1766566494050-408184442.svg
138 137 whisk https://storage.danakcorp.com/images/1766566504760-709260995.svg
-58
View File
@@ -1,58 +0,0 @@
const fs = require('fs');
const path = require('path');
// Read the CSV file
const csvPath = path.join(__dirname, 'icons.csv');
const csvContent = fs.readFileSync(csvPath, 'utf8');
// Parse CSV lines
const lines = csvContent.split('\n').filter(line => line.trim());
const header = lines[0];
const dataLines = lines.slice(1);
// Icon names - replace these with your actual icon names after reviewing them
const iconNames = [
// Add your icon names here, one for each row
// Example: "hamburger", "pizza", "drink", etc.
// For now, placeholders:
"icon_1", "icon_2", "icon_3", "icon_4", "icon_5", "icon_6", "icon_7", "icon_8", "icon_9", "icon_10",
"icon_11", "icon_12", "icon_13", "icon_14", "icon_15", "icon_16", "icon_17", "icon_18", "icon_19", "icon_20",
"icon_21", "icon_22", "icon_23", "icon_24", "icon_25", "icon_26", "icon_27", "icon_28", "icon_29", "icon_30",
"icon_31", "icon_32", "icon_33", "icon_34", "icon_35", "icon_36", "icon_37", "icon_38", "icon_39", "icon_40",
"icon_41", "icon_42", "icon_43", "icon_44", "icon_45", "icon_46", "icon_47", "icon_48", "icon_49", "icon_50",
"icon_51", "icon_52", "icon_53", "icon_54", "icon_55", "icon_56", "icon_57", "icon_58", "icon_59", "icon_60",
"icon_61", "icon_62", "icon_63", "icon_64", "icon_65", "icon_66", "icon_67", "icon_68", "icon_69", "icon_70",
"icon_71", "icon_72", "icon_73", "icon_74", "icon_75", "icon_76", "icon_77", "icon_78", "icon_79", "icon_80",
"icon_81", "icon_82", "icon_83", "icon_84", "icon_85", "icon_86", "icon_87", "icon_88", "icon_89", "icon_90",
"icon_91", "icon_92", "icon_93", "icon_94", "icon_95", "icon_96", "icon_97", "icon_98", "icon_99", "icon_100",
"icon_101", "icon_102", "icon_103", "icon_104", "icon_105", "icon_106", "icon_107", "icon_108", "icon_109", "icon_110",
"icon_111", "icon_112", "icon_113", "icon_114", "icon_115", "icon_116", "icon_117", "icon_118", "icon_119", "icon_120",
"icon_121", "icon_122", "icon_123", "icon_124", "icon_125", "icon_126", "icon_127", "icon_128", "icon_129", "icon_130",
"icon_131", "icon_132", "icon_133", "icon_134", "icon_135", "icon_136", "icon_137", "icon_138"
];
// Validate that we have the right number of names
if (iconNames.length !== dataLines.length) {
console.error(`Error: You provided ${iconNames.length} icon names but there are ${dataLines.length} data rows in the CSV.`);
process.exit(1);
}
// Create new CSV content with icon names
const newLines = [header];
dataLines.forEach((line, index) => {
// Remove trailing comma if present and add the icon name
const cleanLine = line.replace(/,$/, '');
newLines.push(`${cleanLine},"${iconNames[index]}"`);
});
// Write the updated CSV
const newCsvContent = newLines.join('\n');
fs.writeFileSync(csvPath, newCsvContent, 'utf8');
console.log(`✅ Successfully added ${iconNames.length} icon names to icons.csv`);
console.log('📁 File saved:', csvPath);
// Show summary
const namedCount = iconNames.filter(name => name && !name.startsWith('icon_')).length;
console.log(`📊 ${namedCount} custom names, ${iconNames.length - namedCount} placeholder names`);
-95
View File
@@ -1,95 +0,0 @@
#!/bin/bash
# Script to restore icon and icon_groups tables to PostgreSQL database
# Usage: ./restore-icons.sh [dump_file]
set -e
# Load environment variables if .env file exists
if [ -f .env ]; then
set -a
# Source .env file, handling comments and empty lines
while IFS= read -r line || [ -n "$line" ]; do
# Remove leading/trailing whitespace
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
# Skip empty lines and lines starting with #
[[ -z "$line" ]] && continue
[[ "$line" =~ ^# ]] && continue
# Remove inline comments (everything after # that's not in quotes)
line=$(echo "$line" | sed 's/#.*$//' | sed 's/[[:space:]]*$//')
# Skip if line is empty after removing comments
[[ -z "$line" ]] && continue
# Export the variable (only if it looks like KEY=VALUE)
if [[ "$line" =~ ^[[:alpha:]_][[:alnum:]_]*= ]]; then
export "$line" 2>/dev/null || true
fi
done < .env
set +a
fi
# Get database connection details from environment variables
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
DB_NAME="${DB_NAME:-dmenu}"
DB_USER="${DB_USER:-postgres}"
# Input file name
if [ -z "$1" ]; then
echo "Error: Please provide a dump file to restore"
echo "Usage: ./restore-icons.sh <dump_file>"
echo "Example: ./restore-icons.sh icons_dump_20240101_120000.sql"
exit 1
fi
DUMP_FILE="$1"
# Check if dump file exists
if [ ! -f "${DUMP_FILE}" ]; then
echo "Error: Dump file '${DUMP_FILE}' not found!"
exit 1
fi
echo "Restoring icon_groups and icons tables..."
echo "Database: ${DB_NAME}@${DB_HOST}:${DB_PORT}"
echo "Dump file: ${DUMP_FILE}"
echo ""
# Ask for confirmation
read -p "This will replace existing data in icon_groups and icons tables. Continue? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Restore cancelled."
exit 0
fi
# Disable foreign key checks temporarily and truncate tables
echo "Clearing existing data..."
PGPASSWORD="${DB_PASS}" psql \
-h "${DB_HOST}" \
-p "${DB_PORT}" \
-U "${DB_USER}" \
-d "${DB_NAME}" \
-c "TRUNCATE TABLE icons CASCADE;" \
-c "TRUNCATE TABLE icon_groups CASCADE;"
# Restore data from dump file
echo "Restoring data from ${DUMP_FILE}..."
PGPASSWORD="${DB_PASS}" psql \
-h "${DB_HOST}" \
-p "${DB_PORT}" \
-U "${DB_USER}" \
-d "${DB_NAME}" \
-f "${DUMP_FILE}"
echo ""
echo "Restore completed successfully!"
echo ""
# Verify the restore
echo "Verifying restore..."
ICON_GROUPS_COUNT=$(PGPASSWORD="${DB_PASS}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -t -c "SELECT COUNT(*) FROM icon_groups;")
ICONS_COUNT=$(PGPASSWORD="${DB_PASS}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -t -c "SELECT COUNT(*) FROM icons;")
echo "icon_groups records: ${ICON_GROUPS_COUNT}"
echo "icons records: ${ICONS_COUNT}"
+8 -8
View File
@@ -2,23 +2,23 @@ import { MikroOrmModule } from '@mikro-orm/nestjs';
import { Module } from '@nestjs/common';
import dataBaseConfig from './config/mikro-orm.config';
import { ConfigModule } from '@nestjs/config';
import { UserModule } from './modules/users/user.module';
import { UtilsModule } from './modules/utils/utils.module';
import { UserModule } from './modules/user/user.module';
import { UtilsModule } from './modules/util/utils.module';
import { AuthModule } from './modules/auth/auth.module';
import { UploaderModule } from './modules/uploader/uploader.module';
import { AdminModule } from './modules/admin/admin.module';
import { ThrottlerModule } from '@nestjs/throttler';
import { ScheduleModule } from '@nestjs/schedule';
import { RestaurantsModule } from './modules/restaurants/restaurants.module';
import { FoodModule } from './modules/foods/food.module';
import { productModule } from './modules/products/product.module';
import { CartModule } from './modules/cart/cart.module';
import { RolesModule } from './modules/roles/roles.module';
import { PaymentsModule } from './modules/payments/payments.module';
import { PaymentsModule } from './modules/payment/payments.module';
import { DeliveryModule } from './modules/delivery/delivery.module';
import { OrdersModule } from './modules/orders/orders.module';
import { OrdersModule } from './modules/order/orders.module';
import { CouponModule } from './modules/coupons/coupon.module';
import { ReviewModule } from './modules/review/review.module';
import { NotificationsModule } from './modules/notifications/notifications.module';
import { NotificationsModule } from './modules/notification/notifications.module';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { PagerModule } from './modules/pager/pager.module';
import { ContactModule } from './modules/contact/contact.module';
@@ -45,7 +45,7 @@ import { cacheConfig } from './config/cache.config';
]),
ScheduleModule.forRoot(),
RestaurantsModule,
FoodModule,
productModule,
CartModule,
RolesModule,
PaymentsModule,
@@ -64,4 +64,4 @@ import { cacheConfig } from './config/cache.config';
providers: [],
// exports: [CacheService],
})
export class AppModule {}
export class AppModule { }
+13 -13
View File
@@ -71,7 +71,7 @@ export const enum AuthMessage {
INVALID_SLUG = 'اسلاگ نامعتبر است',
INVALID_OR_EXPIRED_TOKEN = 'توکن نامعتبر یا منقضی شده است',
}
export const enum FoodMessage {
export const enum productMessage {
NOT_FOUND = 'غذایی با این مشخصات یافت نشد',
}
export const enum CategoryMessage {
@@ -691,8 +691,8 @@ export const enum OrderMessage {
CAR_ADDRESS_REQUIRED = 'آدرس خودرو الزامی است. لطفا قبل از ایجاد سفارش، آدرس خودرو را تنظیم کنید',
PAYMENT_METHOD_NOT_FOUND = 'روش پرداخت یافت نشد',
PAYMENT_METHOD_NOT_ENABLED = 'روش پرداخت برای این رستوران فعال نیست',
FOOD_NOT_FOUND = 'غذا یافت نشد',
FOOD_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد',
product_NOT_FOUND = 'غذا یافت نشد',
product_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد',
}
export const enum CartMessage {
@@ -701,9 +701,9 @@ export const enum CartMessage {
ADDRESS_REQUIRED = 'آدرس برای تحویل پیک الزامی است',
NOT_FOUND = 'سبد خرید یافت نشد',
COUPON_NOT_FOUND = 'کوپن یافت نشد',
FOOD_NOT_FOUND = 'غذا یافت نشد',
FOOD_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد',
FOOD_NO_INVENTORY = 'غذا موجودی ندارد',
product_NOT_FOUND = 'غذا یافت نشد',
product_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد',
product_NO_INVENTORY = 'غذا موجودی ندارد',
INSUFFICIENT_STOCK = 'موجودی کافی نیست',
USER_NOT_FOUND = 'کاربر یافت نشد',
ADDRESS_NOT_FOUND = 'آدرس یافت نشد',
@@ -721,10 +721,10 @@ export const enum CartMessage {
ITEM_NOT_FOUND = 'آیتم در سبد خرید یافت نشد',
DELIVERY_METHOD_NOT_FOUND_FOR_RESTAURANT = 'روش ارسال برای این رستوران یافت نشد',
COUPON_CANNOT_BE_APPLIED = 'این کوپن قابل اعمال بر روی آیتم‌های سبد خرید شما نیست. لطفا آیتم‌هایی از دسته‌بندی‌ها یا غذاهای مشخص شده اضافه کنید',
FOODS_MUST_HAVE_PICKUP_SERVE_FOR_COURIER = 'تمام غذاها باید قابلیت تحویل پیک داشته باشند. غذاهای زیر این قابلیت را ندارند: [foodTitles]',
FOOD_ONLY_AVAILABLE_DURING_MEAL_TIMES = 'غذا [foodTitle] فقط در ساعات وعده‌های غذایی (صبحانه، ناهار، عصرانه یا شام) در دسترس است. زمان فعلی خارج از ساعات وعده‌های غذایی است',
FOOD_ONLY_AVAILABLE_FOR_MEAL_TYPES = 'غذا [foodTitle] فقط برای [allowedMealTypes] در دسترس است. زمان فعلی [mealType] است که با این غذا سازگار نیست',
FOOD_ONLY_AVAILABLE_ON_DAYS = 'غذا [foodTitle] فقط در روزهای [allowedDays] در دسترس است. امروز [currentDay] است که این غذا در دسترس نیست',
productS_MUST_HAVE_PICKUP_SERVE_FOR_COURIER = 'تمام غذاها باید قابلیت تحویل پیک داشته باشند. غذاهای زیر این قابلیت را ندارند: [productTitles]',
product_ONLY_AVAILABLE_DURING_MEAL_TIMES = 'غذا [productTitle] فقط در ساعات وعده‌های غذایی (صبحانه، ناهار، عصرانه یا شام) در دسترس است. زمان فعلی خارج از ساعات وعده‌های غذایی است',
product_ONLY_AVAILABLE_FOR_MEAL_TYPES = 'غذا [productTitle] فقط برای [allowedMealTypes] در دسترس است. زمان فعلی [mealType] است که با این غذا سازگار نیست',
product_ONLY_AVAILABLE_ON_DAYS = 'غذا [productTitle] فقط در روزهای [allowedDays] در دسترس است. امروز [currentDay] است که این غذا در دسترس نیست',
}
export const enum PaymentMessage {
@@ -755,10 +755,10 @@ export const enum DeliveryMessage {
export const enum InventoryMessage {
AVAILABLE_STOCK_EXCEEDS_TOTAL = 'موجودی موجود نمی‌تواند از موجودی کل بیشتر باشد',
FOOD_NOT_FOUND = 'غذا یافت نشد',
FOOD_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد',
product_NOT_FOUND = 'غذا یافت نشد',
product_NOT_BELONGS_TO_RESTAURANT = 'غذا به این رستوران تعلق ندارد',
RESTAURANT_NOT_FOUND = 'رستوران یافت نشد',
FOODS_NOT_FOUND = 'غذاها یافت نشدند',
productS_NOT_FOUND = 'غذاها یافت نشدند',
}
+3 -3
View File
@@ -4,8 +4,8 @@
*/
export enum Permission {
MANAGE_PAGER = 'manage_pager',
// Food Management
MANAGE_FOODS = 'manage_foods',
// product Management
MANAGE_productS = 'manage_products',
MANAGE_CATEGORIES = 'manage_categories',
// Order Management
@@ -39,7 +39,7 @@ export enum Permission {
*/
export const PermissionTitles: Record<Permission, string> = {
[Permission.MANAGE_PAGER]: 'مدیریت پیجر',
[Permission.MANAGE_FOODS]: 'مدیریت غذاها',
[Permission.MANAGE_productS]: 'مدیریت غذاها',
[Permission.MANAGE_CATEGORIES]: 'مدیریت دسته‌بندی‌ها',
[Permission.MANAGE_ORDERS]: 'مدیریت سفارشات',
[Permission.MANAGE_ADMINS]: 'مدیریت مدیران',
+2 -2
View File
@@ -8,7 +8,7 @@ import { Role } from '../roles/entities/role.entity';
import { Permission } from '../roles/entities/permission.entity';
import { RolePermission } from '../roles/entities/rolePermission.entity';
import { AdminController } from './controllers/admin.controller';
import { UtilsModule } from '../utils/utils.module';
import { UtilsModule } from '../util/utils.module';
import { RestaurantsModule } from '../restaurants/restaurants.module';
import { AdminRole } from './entities/adminRole.entity';
@@ -23,4 +23,4 @@ import { AdminRole } from './entities/adminRole.entity';
],
exports: [AdminService, AdminRepository],
})
export class AdminModule {}
export class AdminModule { }
+1 -1
View File
@@ -1,7 +1,7 @@
import { Cascade, Collection, Entity, OneToMany, Property } from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity';
import { AdminRole } from './adminRole.entity';
import { normalizePhone } from '../../utils/phone.util';
import { normalizePhone } from '../../util/phone.util';
@Entity({ tableName: 'admins' })
export class Admin extends BaseEntity {
+3 -3
View File
@@ -5,11 +5,11 @@ import { Admin } from '../entities/admin.entity';
import { Role } from '../../roles/entities/role.entity';
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
import { EntityManager } from '@mikro-orm/postgresql';
import { CacheService } from '../../utils/cache.service';
import { CacheService } from '../../util/cache.service';
import { CreateMyRestaurantAdminDto } from '../dto/create-my-restaurant-admin.dto';
import { UpdateAdminDto } from '../dto/update-admin.dto';
import { AdminRole } from '../entities/adminRole.entity';
import { normalizePhone } from '../../utils/phone.util';
import { normalizePhone } from '../../util/phone.util';
@Injectable()
export class AdminService {
@@ -20,7 +20,7 @@ export class AdminService {
private readonly adminRoleRepository: EntityRepository<AdminRole>,
private readonly em: EntityManager,
private readonly cacheService: CacheService,
) {}
) { }
async findByPhone(phone: string): Promise<Admin | null> {
const normalizedPhone = normalizePhone(phone);
@@ -3,7 +3,7 @@ import { Admin } from '../entities/admin.entity';
import { AdminRole } from '../entities/adminRole.entity';
import { RestRepository } from '../../restaurants/repositories/rest.repository';
import { Injectable } from '@nestjs/common';
import { normalizePhone } from '../../utils/phone.util';
import { normalizePhone } from '../../util/phone.util';
@Injectable()
export class AdminRepository extends EntityRepository<Admin> {
+6 -6
View File
@@ -1,18 +1,18 @@
import { Module, forwardRef } from '@nestjs/common';
import { AuthService } from './services/auth.service';
import { AuthController } from './controllers/auth.controller';
import { UtilsModule } from '../utils/utils.module';
import { UserModule } from '../users/user.module';
import { UtilsModule } from '../util/utils.module';
import { UserModule } from '../user/user.module';
import { JwtModule } from '@nestjs/jwt';
import { ConfigService } from '@nestjs/config';
import { AdminModule } from '../admin/admin.module';
import { TokensService } from './services/tokens.service';
import { RestaurantsModule } from '../restaurants/restaurants.module';
import { MikroOrmModule } from '@mikro-orm/nestjs';
import { User } from '../users/entities/user.entity';
import { User } from '../user/entities/user.entity';
import { AdminAuthGuard } from './guards/adminAuth.guard';
import { RefreshToken } from './entities/refresh-token.entity';
import { NotificationsModule } from '../notifications/notifications.module';
import { NotificationsModule } from '../notification/notifications.module';
@Module({
imports: [
@@ -36,10 +36,10 @@ import { NotificationsModule } from '../notifications/notifications.module';
forwardRef(() => RestaurantsModule),
MikroOrmModule.forFeature([User, RefreshToken]),
forwardRef(() => NotificationsModule),
],
controllers: [AuthController],
providers: [AuthService, TokensService, AdminAuthGuard],
exports: [AdminAuthGuard],
})
export class AuthModule {}
export class AuthModule { }
+4 -4
View File
@@ -1,8 +1,8 @@
import { Injectable, BadRequestException } from '@nestjs/common';
import { RequestOtpDto } from '../dto/request-otp.dto';
import { CacheService } from '../../utils/cache.service';
import { SmsService } from '../../notifications/services/sms.service';
import { UserService } from '../../users/providers/user.service';
import { CacheService } from '../../util/cache.service';
import { SmsService } from '../../notification/services/sms.service';
import { UserService } from '../../user/providers/user.service';
import { randomInt } from 'crypto';
import { TokensService } from './tokens.service';
import { RestRepository } from 'src/modules/restaurants/repositories/rest.repository';
@@ -11,7 +11,7 @@ import { AdminRepository } from 'src/modules/admin/repositories/admin.repository
import { AdminLoginTransformer } from '../transformers/admin-login.transformer';
import { UserLoginTransformer } from '../transformers/user-login.transformer';
import { ConfigService } from '@nestjs/config';
import { normalizePhone } from '../../utils/phone.util';
import { normalizePhone } from '../../util/phone.util';
@Injectable()
export class AuthService {
@@ -1,4 +1,4 @@
import type { User } from '../../users/entities/user.entity';
import type { User } from '../../user/entities/user.entity';
import type { Restaurant } from '../../restaurants/entities/restaurant.entity';
export interface UserLoginResponse {
@@ -6,7 +6,7 @@ export interface UserLoginResponse {
firstName: string;
lastName?: string;
phone: string;
isActive?: boolean;
restaurant: {
id: string;
@@ -1,88 +0,0 @@
import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards } from '@nestjs/common';
import {
ApiTags,
ApiOperation,
ApiCreatedResponse,
ApiOkResponse,
ApiNotFoundResponse,
ApiParam,
ApiBody,
ApiBearerAuth,
ApiHeader,
} from '@nestjs/swagger';
import { DeliveryService } from '../providers/delivery.service';
import { CreateDeliveryDto } from '../dto/create-delivery.dto';
import { UpdateDeliveryDto } from '../dto/update-delivery.dto';
import { RestId } from 'src/common/decorators/rest-id.decorator';
import { AuthGuard } from 'src/modules/auth/guards/auth.guard';
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
import { Delivery } from '../entities/delivery.entity';
import { API_HEADER_SLUG } from 'src/common/constants';
import { Permission } from 'src/common/enums/permission.enum';
import { Permissions } from 'src/common/decorators/permissions.decorator';
@ApiTags('Delivery')
@Controller()
export class DeliveryController {
constructor(private readonly deliveryService: DeliveryService) {}
@UseGuards(AuthGuard)
@ApiBearerAuth()
@Get('public/delivery-methods/restaurant')
@ApiOperation({ summary: 'Get restaurant delivery methods' })
@ApiHeader(API_HEADER_SLUG)
findAllDeliveryMethods(@RestId() restId: string) {
return this.deliveryService.findAllForRestaurantId(restId);
}
/*** Admin ***/
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_DELIVERY)
@Post('admin/delivery-methods/restaurant')
@ApiOperation({ summary: 'Create a delivery method for a restaurant' })
@ApiBody({ type: CreateDeliveryDto })
create(@Body() createDto: CreateDeliveryDto, @RestId() restId: string) {
return this.deliveryService.create(restId, createDto);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_DELIVERY)
@Get('admin/delivery-methods/restaurant')
@ApiOperation({ summary: 'Get the restaurant delivery methods' })
findRestaurantDeliveryMethods(@RestId() restId: string) {
return this.deliveryService.findAllForRestaurantId(restId);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_DELIVERY)
@Get('admin/delivery-methods/restaurant/:deliveryId')
@ApiOperation({ summary: 'Get a restaurant delivery method by delivery ID' })
@ApiParam({ name: 'deliveryId', description: 'Delivery method ID' })
findOne(@Param('deliveryId') deliveryId: string, @RestId() restId: string) {
return this.deliveryService.findOne(restId, deliveryId);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_DELIVERY)
@Patch('admin/delivery-methods/restaurant/:deliveryId')
@ApiOperation({ summary: 'Update a restaurant delivery method' })
@ApiParam({ name: 'deliveryId', description: 'Delivery method ID' })
@ApiBody({ type: UpdateDeliveryDto })
update(@Param('deliveryId') deliveryId: string, @Body() updateDto: UpdateDeliveryDto, @RestId() restId: string) {
return this.deliveryService.update(restId, deliveryId, updateDto);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_DELIVERY)
@Delete('admin/delivery-methods/restaurant/:deliveryId')
@ApiOperation({ summary: 'Delete a restaurant delivery method' })
@ApiParam({ name: 'deliveryId', description: 'Delivery method ID' })
remove(@Param('deliveryId') deliveryId: string, @RestId() restId: string) {
return this.deliveryService.remove(restId, deliveryId);
}
}
-16
View File
@@ -1,16 +0,0 @@
import { Module } from '@nestjs/common';
import { MikroOrmModule } from '@mikro-orm/nestjs';
import { JwtModule } from '@nestjs/jwt';
import { DeliveryController } from './controllers/delivery.controller';
import { DeliveryService } from './providers/delivery.service';
import { RestaurantsModule } from '../restaurants/restaurants.module';
import { Delivery } from './entities/delivery.entity';
import { DeliveryRepository } from './repositories/delivery.repository';
@Module({
controllers: [DeliveryController],
providers: [DeliveryService, DeliveryRepository],
exports: [DeliveryService, DeliveryRepository],
imports: [MikroOrmModule.forFeature([Delivery]), JwtModule, RestaurantsModule],
})
export class DeliveryModule {}
@@ -1,60 +0,0 @@
import { IsNumber, IsBoolean, IsOptional, IsString, Min, IsEnum } from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { DeliveryFeeTypeEnum, DeliveryMethodEnum } from '../interface/delivery';
export class CreateDeliveryDto {
@ApiProperty({ example: 'dineIn', description: 'Delivery method name', enum: DeliveryMethodEnum })
@IsEnum(DeliveryMethodEnum)
method!: DeliveryMethodEnum;
@ApiProperty({ example: 5000, description: 'Delivery fee' })
@IsNumber()
@Min(0)
@Type(() => Number)
deliveryFee!: number;
@ApiProperty({ example: 100000, description: 'Minimum order price for free delivery' })
@IsNumber()
@Min(0)
@Type(() => Number)
minOrderPrice!: number;
@ApiPropertyOptional({ example: 'توضیحات روش ارسال', description: 'Delivery method description' })
@IsOptional()
@IsString()
description?: string;
@ApiPropertyOptional({ example: true, description: 'Is this delivery method enabled?' })
@IsOptional()
@IsBoolean()
@Type(() => Boolean)
enabled?: boolean;
@ApiPropertyOptional({ example: 0, description: 'Display order for sorting delivery methods' })
@IsOptional()
@IsNumber()
@Type(() => Number)
order?: number;
@ApiPropertyOptional({ example: 0, description: 'Kilometer number' })
@IsOptional()
@IsNumber()
@Type(() => Number)
distanceBasedMinCost?: number;
@ApiPropertyOptional({ example: 0, description: 'Delivery fee per kilometer' })
@IsOptional()
@IsNumber()
@Type(() => Number)
perKilometerFee?: number;
@ApiPropertyOptional({
example: DeliveryFeeTypeEnum.FIXED,
description: 'Delivery fee type',
enum: DeliveryFeeTypeEnum,
})
@IsOptional()
@IsEnum(DeliveryFeeTypeEnum)
deliveryFeeType!: DeliveryFeeTypeEnum;
}
@@ -1,4 +0,0 @@
import { PartialType } from '@nestjs/swagger';
import { CreateDeliveryDto } from './create-delivery.dto';
export class UpdateDeliveryDto extends PartialType(CreateDeliveryDto) {}
@@ -1,37 +0,0 @@
import { Entity, Property, Enum, ManyToOne } from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity';
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
import { DeliveryFeeTypeEnum, DeliveryMethodEnum } from '../interface/delivery';
@Entity({ tableName: 'deliveries' })
export class Delivery extends BaseEntity {
@Enum(() => DeliveryMethodEnum)
method!: DeliveryMethodEnum;
@ManyToOne(() => Restaurant)
restaurant!: Restaurant;
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
deliveryFee: number = 0;
@Enum(() => DeliveryFeeTypeEnum)
deliveryFeeType: DeliveryFeeTypeEnum = DeliveryFeeTypeEnum.FIXED;
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
perKilometerFee: number | null = null;
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
distanceBasedMinCost: number | null = null;
@Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
minOrderPrice: number = 0;
@Property({ nullable: true })
description?: string;
@Property({ default: true })
enabled: boolean = true;
@Property({ type: 'integer', default: 0 })
order: number = 0;
}
@@ -1,11 +0,0 @@
export enum DeliveryMethodEnum {
DineIn = 'dineIn',
CustomerPickup = 'customerPickup',
DeliveryCar = 'deliveryCar',
DeliveryCourier = 'deliveryCourier',
}
export enum DeliveryFeeTypeEnum {
FIXED = 'fixed',
DISTANCE_BASED = 'distanceBased',
}
@@ -1,115 +0,0 @@
import { Injectable, NotFoundException, ConflictException } from '@nestjs/common';
import { EntityManager, RequiredEntityData } from '@mikro-orm/postgresql';
import { Delivery } from '../entities/delivery.entity';
import { DeliveryRepository } from '../repositories/delivery.repository';
import { CreateDeliveryDto } from '../dto/create-delivery.dto';
import { UpdateDeliveryDto } from '../dto/update-delivery.dto';
import { RestRepository } from '../../restaurants/repositories/rest.repository';
import { DeliveryMethodEnum } from '../interface/delivery';
import { DeliveryMessage } from 'src/common/enums/message.enum';
@Injectable()
export class DeliveryService {
constructor(
private readonly deliveryRepository: DeliveryRepository,
private readonly restRepository: RestRepository,
private readonly em: EntityManager,
) {}
async create(restId: string, createDto: CreateDeliveryDto): Promise<Delivery> {
const restaurant = await this.restRepository.findOne({ id: restId });
if (!restaurant) {
throw new NotFoundException(DeliveryMessage.RESTAURANT_NOT_FOUND);
}
// Check if the delivery method with the same name already exists for this restaurant
const existing = await this.deliveryRepository.findOne({
restaurant: { id: restId },
method: createDto.method,
});
if (existing) {
throw new ConflictException('این روش ارسال قبلاً برای این رستوران ثبت شده است.');
}
const data: RequiredEntityData<Delivery> = {
restaurant,
method: createDto.method,
deliveryFee: createDto.deliveryFee,
minOrderPrice: createDto.minOrderPrice,
description: createDto.description,
enabled: createDto.enabled ?? true,
order: createDto.order ?? 0,
deliveryFeeType: createDto.deliveryFeeType,
perKilometerFee: createDto.perKilometerFee ?? null,
distanceBasedMinCost: createDto.distanceBasedMinCost ?? null,
};
const delivery = this.deliveryRepository.create(data);
await this.em.persistAndFlush(delivery);
return delivery;
}
async findAllForRestaurantId(restId: string): Promise<Delivery[]> {
return this.deliveryRepository.find({ restaurant: { id: restId } }, { orderBy: { order: 'asc' } });
}
async findOne(restId: string, deliveryId: string): Promise<Delivery> {
const delivery = await this.deliveryRepository.findOne({
id: deliveryId,
restaurant: { id: restId },
});
if (!delivery) {
throw new NotFoundException(DeliveryMessage.DELIVERY_METHOD_NOT_FOUND);
}
return delivery;
}
async update(restId: string, deliveryId: string, updateDto: UpdateDeliveryDto): Promise<Delivery> {
const delivery = await this.deliveryRepository.findOne({
restaurant: { id: restId },
id: deliveryId,
});
if (!delivery) {
throw new NotFoundException(DeliveryMessage.DELIVERY_METHOD_NOT_FOUND);
}
// If method is being updated, check for conflicts
if (updateDto.method !== undefined && updateDto.method !== delivery.method) {
const existing = await this.deliveryRepository.findOne({
restaurant: { id: restId },
method: updateDto.method,
id: { $ne: deliveryId },
});
if (existing) {
throw new ConflictException('این روش ارسال قبلاً برای این رستوران ثبت شده است.');
}
}
this.em.assign(delivery, updateDto);
await this.em.persistAndFlush(delivery);
return delivery;
}
async remove(restId: string, deliveryId: string): Promise<void> {
const delivery = await this.deliveryRepository.findOne({
restaurant: { id: restId },
id: deliveryId,
});
if (!delivery) {
throw new NotFoundException(DeliveryMessage.DELIVERY_METHOD_NOT_FOUND);
}
await this.em.removeAndFlush(delivery);
}
findAll(): DeliveryMethodEnum[] {
return Object.values(DeliveryMethodEnum);
}
}
@@ -1,10 +0,0 @@
import { Injectable } from '@nestjs/common';
import { EntityManager, EntityRepository } from '@mikro-orm/postgresql';
import { Delivery } from '../entities/delivery.entity';
@Injectable()
export class DeliveryRepository extends EntityRepository<Delivery> {
constructor(readonly em: EntityManager) {
super(em, Delivery);
}
}
@@ -1,126 +0,0 @@
import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UseGuards } from '@nestjs/common';
import { FoodService } from '../providers/food.service';
import { CreateFoodDto } from '../dto/create-food.dto';
import { UpdateFoodDto } from '../dto/update-food.dto';
import { FindFoodsDto } from '../dto/find-foods.dto';
import {
ApiTags,
ApiOperation,
ApiCreatedResponse,
ApiOkResponse,
ApiNotFoundResponse,
ApiQuery,
ApiBody,
ApiParam,
ApiBearerAuth,
ApiHeader,
} from '@nestjs/swagger';
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
import { RestId, UserId } from 'src/common/decorators';
import { AuthGuard } from 'src/modules/auth/guards/auth.guard';
import { OptionalAuthGuard } from 'src/modules/auth/guards/optinalAuth.guard';
import { API_HEADER_SLUG } from 'src/common/constants';
import { Permission } from 'src/common/enums/permission.enum';
import { Permissions } from 'src/common/decorators/permissions.decorator';
@ApiTags('foods')
@Controller()
export class FoodController {
constructor(private readonly foodsService: FoodService) { }
@Get('public/foods/restaurant/:slug')
@ApiOperation({ summary: 'Get all foods by restaurant slug' })
@ApiHeader(API_HEADER_SLUG)
@ApiParam({ name: 'slug', required: true, description: 'Restaurant Slug' })
findAllByRestaurant(@Param('slug') slug: string) {
return this.foodsService.findByWeekDateAndMealType(slug);
}
@Get('public/foods/:foodId')
@UseGuards(OptionalAuthGuard)
@ApiHeader(API_HEADER_SLUG)
@ApiBearerAuth()
@ApiOperation({ summary: 'Get a food by id' })
@ApiParam({ name: 'foodId', required: true })
findPublicFoodById(@Param('foodId') foodId: string, @UserId() userId?: string): Promise<any> {
const a = this.foodsService.findPublicById(foodId, userId);
return a;
}
@Post('public/foods/favorite/:foodId')
@UseGuards(AuthGuard)
@ApiHeader(API_HEADER_SLUG)
@ApiBearerAuth()
@ApiOperation({ summary: 'toggle a food as favorite' })
@ApiParam({ name: 'foodId', required: true })
setAsFavorute(@Param('foodId') foodId: string, @UserId() userId: string) {
return this.foodsService.toggleFavorite(userId, foodId);
}
@Get('public/foods/favorite')
@UseGuards(AuthGuard)
@ApiHeader(API_HEADER_SLUG)
@ApiBearerAuth()
@ApiOperation({ summary: 'get my favorites' })
getMyFavorites(@UserId() userId: string, @RestId() restId: string) {
return this.foodsService.getMyFavorites(userId, restId);
}
/* ---------------------------------- Admin ---------------------------------- */
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_FOODS)
@Post('admin/foods')
@ApiOperation({ summary: 'Create a new food' })
@ApiBody({ type: CreateFoodDto })
create(@Body() createFoodDto: CreateFoodDto, @RestId() restId: string) {
return this.foodsService.create(restId, createFoodDto);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_FOODS)
@Get('admin/foods')
@ApiOperation({ summary: 'Get a paginated list of foods' })
@ApiQuery({ name: 'page', required: false, type: Number })
@ApiQuery({ name: 'limit', required: false, type: Number })
@ApiQuery({ name: 'search', required: false, type: String })
@ApiQuery({ name: 'orderBy', required: false, type: String })
@ApiQuery({ name: 'order', required: false, enum: ['asc', 'desc'] })
@ApiQuery({ name: 'categoryId', required: false, type: String })
@ApiQuery({ name: 'isActive', required: false, type: Boolean })
async findAll(@Query() dto: FindFoodsDto, @RestId() restId: string) {
const result = await this.foodsService.findAll(restId, dto);
return result;
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_FOODS)
@Get('admin/foods/:id')
@ApiOperation({ summary: 'Get a food by id' })
@ApiParam({ name: 'id', required: true })
findById(@Param('id') id: string, @RestId() restId: string) {
return this.foodsService.findAdminById(restId, id);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_FOODS)
@Patch('admin/foods/:id')
@ApiOperation({ summary: 'Update a food' })
@ApiParam({ name: 'id', required: true })
@ApiBody({ type: UpdateFoodDto })
update(@Param('id') id: string, @Body() updateFoodDto: UpdateFoodDto, @RestId() restId: string) {
return this.foodsService.update(restId, id, updateFoodDto);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_FOODS)
@Delete('admin/foods/:id')
@ApiOperation({ summary: 'Delete (soft) a food' })
@ApiParam({ name: 'id', required: true })
remove(@Param('id') id: string, @RestId() restId: string) {
return this.foodsService.remove(restId, id);
}
}
-4
View File
@@ -1,4 +0,0 @@
import { PartialType } from '@nestjs/swagger';
import { CreateFoodDto } from './create-food.dto';
export class UpdateFoodDto extends PartialType(CreateFoodDto) {}
@@ -1,7 +1,7 @@
import { Entity, Property, ManyToOne, Enum } from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity';
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
import { User } from '../../users/entities/user.entity';
import { User } from '../../user/entities/user.entity';
import { NotifTitleEnum } from '../interfaces/notification.interface';
import { Admin } from 'src/modules/admin/entities/admin.entity';
@@ -11,17 +11,17 @@ import { PushNotificationService } from './services/push-notification.service';
import { SmsProcessor } from './processors/sms.processor';
import { PushProcessor } from './processors/push.processor';
import { NotificationsController } from './controllers/notifications.controller';
import { User } from '../users/entities/user.entity';
import { User } from '../user/entities/user.entity';
import { Restaurant } from '../restaurants/entities/restaurant.entity';
import { AuthModule } from '../auth/auth.module';
import { ConfigService } from '@nestjs/config';
import { NotificationQueueNameEnum } from './constants/queue';
import { UtilsModule } from '../utils/utils.module';
import { UtilsModule } from '../util/utils.module';
import { NotificationsGateway } from './notifications.gateway';
import { WsAdminAuthGuard } from './guards/ws-admin-auth.guard';
import { InAppProcessor } from './processors/in-app.processor';
import { AdminModule } from '../admin/admin.module';
import { UserModule } from '../users/user.module';
import { UserModule } from '../user/user.module';
import { NotificationCrone } from './crone/notification.crone';
import { SmsService } from './services/sms.service';
import { SmsLog } from './entities/smsLogs.entity';
@@ -1,7 +1,7 @@
import { Processor, WorkerHost, OnWorkerEvent } from '@nestjs/bullmq';
import { Logger } from '@nestjs/common';
import { Job } from 'bullmq';
import { UserRepository } from 'src/modules/users/repositories/user.repository';
import { UserRepository } from 'src/modules/user/repositories/user.repository';
import { SmsNotificationQueueJob } from '../interfaces/jobs-queue.interface';
import { AdminRepository } from 'src/modules/admin/repositories/admin.repository';
import { NotificationQueueNameEnum } from '../constants/queue';
@@ -59,7 +59,7 @@ export class SmsProcessor extends WorkerHost {
this.logger.log(`SMS notification sent successfully to ${phone}`);
this.eventEmitter.emit(SmsSentEvent.name, new SmsSentEvent(phone, restaurantId));
return {
success: true,
};
@@ -111,10 +111,10 @@ export class OrdersController {
@UseGuards(AdminAuthGuard)
@Permissions(Permission.VIEW_REPORTS)
@ApiOperation({ summary: 'Get food sales pie chart data for last month' })
@ApiOperation({ summary: 'Get product sales pie chart data for last month' })
@ApiHeader(API_HEADER_SLUG)
@Get('admin/orders/food-sales-pie-chart')
getFoodSalesPieChart(@RestId() restId: string) {
return this.ordersService.getFoodSalesPieChart(restId);
@Get('admin/orders/product-sales-pie-chart')
getproductSalesPieChart(@RestId() restId: string) {
return this.ordersService.getproductSalesPieChart(restId);
}
}
@@ -2,8 +2,8 @@ import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import { EntityManager } from '@mikro-orm/postgresql';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { Payment } from '../../payments/entities/payment.entity';
import { PaymentMethodEnum, PaymentStatusEnum } from '../../payments/interface/payment';
import { Payment } from '../../payment/entities/payment.entity';
import { PaymentMethodEnum, PaymentStatusEnum } from '../../payment/interface/payment';
import { InventoryService } from '../../inventory/inventory.service';
import { OrderStatus } from '../interface/order.interface';
import { Order } from '../entities/order.entity';
@@ -37,7 +37,7 @@ export class OrdersCrone {
status: PaymentStatusEnum.Pending,
createdAt: { $lte: cutoff },
},
{ populate: ['order', 'order.items', 'order.items.food'] },
{ populate: ['order', 'order.items', 'order.items.product'] },
);
if (!payments || payments.length === 0) {
@@ -53,7 +53,7 @@ export class OrdersCrone {
const payment = await em.findOne(
Payment,
{ id: p.id },
{ populate: ['order', 'order.items', 'order.items.food'] },
{ populate: ['order', 'order.items', 'order.items.product'] },
);
if (!payment) return;
if (payment.status !== PaymentStatusEnum.Pending) return;
@@ -67,7 +67,7 @@ export class OrdersCrone {
// prepare restore payload
const items = (payment.order as any).items || [];
const restorePayload = {
items: items.map((it: any) => ({ foodId: it.food.id, quantity: it.quantity })),
items: items.map((it: any) => ({ productId: it.product.id, quantity: it.quantity })),
};
if (restorePayload.items.length > 0) {
@@ -11,7 +11,7 @@ import {
import { Type, Transform } from 'class-transformer';
import { ApiPropertyOptional } from '@nestjs/swagger';
import { OrderStatus } from '../interface/order.interface';
import { PaymentStatusEnum } from '../../payments/interface/payment';
import { PaymentStatusEnum } from '../../payment/interface/payment';
const sortOrderOptions = ['asc', 'desc'] as const;
type SortOrder = (typeof sortOrderOptions)[number];
@@ -1,17 +1,17 @@
import { Entity, Index, ManyToOne, Property } from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity';
import { Order } from './order.entity';
import { Food } from '../../foods/entities/food.entity';
import { product } from '../../products/entities/product.entity';
@Entity({ tableName: 'order_items' })
@Index({ properties: ['order'] })
@Index({ properties: ['food'] })
@Index({ properties: ['product'] })
export class OrderItem extends BaseEntity {
@ManyToOne(() => Order)
order!: Order;
@ManyToOne(() => Food)
food!: Food;
@ManyToOne(() => product)
product!: product;
@Property({ type: 'int' })
quantity!: number;
@@ -13,13 +13,13 @@ import {
} from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity';
import { OrderCouponDetail, OrderStatus } from '../interface/order.interface';
import { User } from '../../users/entities/user.entity';
import { User } from '../../user/entities/user.entity';
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
import { PaymentMethod } from '../../payments/entities/payment-method.entity';
import { PaymentMethod } from '../../payment/entities/payment-method.entity';
import { OrderItem } from './order-item.entity';
import { Delivery } from '../../delivery/entities/delivery.entity';
import { OrderUserAddress, OrderCarAddress } from '../interface/order.interface';
import { Payment } from 'src/modules/payments/entities/payment.entity';
import { Payment } from 'src/modules/payment/entities/payment.entity';
@Entity({ tableName: 'orders' })
@Unique({ properties: ['restaurant', 'orderNumber'] })
@@ -3,14 +3,14 @@ import { OnEvent } from '@nestjs/event-emitter';
import { AdminRepository } from 'src/modules/admin/repositories/admin.repository';
import { OrderCreatedEvent, OrderStatusChangedEvent } from '../events/order.events';
import { Permission } from 'src/common/enums/permission.enum';
import { NotifTitleEnum } from 'src/modules/notifications/interfaces/notification.interface';
import { NotificationService } from 'src/modules/notifications/services/notification.service';
import { NotifTitleEnum } from 'src/modules/notification/interfaces/notification.interface';
import { NotificationService } from 'src/modules/notification/services/notification.service';
import { ConfigService } from '@nestjs/config';
import { OrderRepository } from '../repositories/order.repository';
import { OrderStatus } from '../interface/order.interface';
import { PaymentMethodEnum } from 'src/modules/payments/interface/payment';
import { UserService } from 'src/modules/users/providers/user.service';
import { WalletTransactionReason, WalletTransactionType } from 'src/modules/users/interface/wallet';
import { PaymentMethodEnum } from 'src/modules/payment/interface/payment';
import { UserService } from 'src/modules/user/providers/user.service';
import { WalletTransactionReason, WalletTransactionType } from 'src/modules/user/interface/wallet';
@Injectable()
export class OrderListeners {
@@ -4,27 +4,27 @@ import { OrdersService } from './providers/orders.service';
import { OrdersController } from './controllers/orders.controller';
import { Order } from './entities/order.entity';
import { OrderItem } from './entities/order-item.entity';
import { User } from '../users/entities/user.entity';
import { User } from '../user/entities/user.entity';
import { Restaurant } from '../restaurants/entities/restaurant.entity';
import { Food } from '../foods/entities/food.entity';
import { UserAddress } from '../users/entities/user-address.entity';
import { PaymentMethod } from '../payments/entities/payment-method.entity';
import { product } from '../products/entities/product.entity';
import { UserAddress } from '../user/entities/user-address.entity';
import { PaymentMethod } from '../payment/entities/payment-method.entity';
import { CartModule } from '../cart/cart.module';
import { UtilsModule } from '../utils/utils.module';
import { UtilsModule } from '../util/utils.module';
import { AuthModule } from '../auth/auth.module';
import { PaymentsModule } from '../payments/payments.module';
import { PaymentsModule } from '../payment/payments.module';
import { JwtModule } from '@nestjs/jwt';
import { OrderRepository } from './repositories/order.repository';
import { OrderListeners } from './listeners/order.listeners';
import { OrdersCrone } from './crone/order.crone';
import { AdminModule } from '../admin/admin.module';
import { NotificationsModule } from '../notifications/notifications.module';
import { NotificationsModule } from '../notification/notifications.module';
import { InventoryModule } from '../inventory/inventory.module';
import { UserModule } from '../users/user.module';
import { UserModule } from '../user/user.module';
@Module({
imports: [
MikroOrmModule.forFeature([Order, OrderItem, User, Restaurant, Food, UserAddress, PaymentMethod]),
MikroOrmModule.forFeature([Order, OrderItem, User, Restaurant, product, UserAddress, PaymentMethod]),
CartModule,
UtilsModule,
AuthModule,
@@ -2,28 +2,28 @@ import { Injectable, NotFoundException, BadRequestException, Logger } from '@nes
import { EntityManager } from '@mikro-orm/postgresql';
import { Order } from '../entities/order.entity';
import { OrderItem } from '../entities/order-item.entity';
import { User } from '../../users/entities/user.entity';
import { User } from '../../user/entities/user.entity';
import { Restaurant } from '../../restaurants/entities/restaurant.entity';
import { Food } from '../../foods/entities/food.entity';
import { product } from '../../products/entities/product.entity';
import { CartService } from '../../cart/providers/cart.service';
import { OrderStatus, OrderUserAddress, OrderCarAddress } from '../interface/order.interface';
import { PaymentMethodEnum, PaymentStatusEnum } from '../../payments/interface/payment';
import { PaymentMethodEnum, PaymentStatusEnum } from '../../payment/interface/payment';
import { Cart } from '../../cart/interfaces/cart.interface';
import { PaymentMethod } from '../../payments/entities/payment-method.entity';
import { PaymentsService } from '../../payments/services/payments.service';
import { PaymentMethod } from '../../payment/entities/payment-method.entity';
import { PaymentsService } from '../../payment/services/payments.service';
import { DeliveryMethodEnum } from '../../delivery/interface/delivery';
import { Delivery } from '../../delivery/entities/delivery.entity';
import { OrderRepository } from '../repositories/order.repository';
import { FindOrdersDto } from '../dto/find-orders.dto';
import { PaginatedResult } from 'src/common/interfaces/pagination.interface';
import { Payment } from 'src/modules/payments/entities/payment.entity';
import { Payment } from 'src/modules/payment/entities/payment.entity';
import { InventoryService } from 'src/modules/inventory/inventory.service';
import { BulkReserveFoodDto } from 'src/modules/inventory/dto/bulk-reserve-food.dto';
import { BulkReserveproductDto } from 'src/modules/inventory/dto/bulk-reserve-product.dto';
import { StatusTransitionRef } from '../interface/order.interface';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { OrderCreatedEvent, OrderStatusChangedEvent } from '../events/order.events';
import { OrderMessage } from 'src/common/enums/message.enum';
type OrderItemData = { food: Food; quantity: number; unitPrice: number; discount: number };
type OrderItemData = { product: product; quantity: number; unitPrice: number; discount: number };
type ValidatedCartForOrder = {
user: User;
@@ -89,15 +89,15 @@ export class OrdersService {
em.persist(order);
for (const itemData of validated.orderItemsData) {
const { food, quantity, unitPrice, discount } = itemData;
const { product, quantity, unitPrice, discount } = itemData;
this.assertFoodHasSufficientStock(food, quantity);
this.assertproductHasSufficientStock(product, quantity);
const totalPrice = (unitPrice - discount) * quantity;
const orderItem = em.create(OrderItem, {
order,
food,
product,
quantity,
unitPrice,
discount,
@@ -117,13 +117,13 @@ export class OrdersService {
em.persist(payment);
// reserve stock based on payment method.
const bulkReserveFoodDto: BulkReserveFoodDto = {
const bulkReserveproductDto: BulkReserveproductDto = {
items: validated.orderItemsData.map(item => ({
foodId: item.food.id,
productId: item.product.id,
quantity: item.quantity,
})),
};
await this.inventoryService.deductFromInventory(em, bulkReserveFoodDto);
await this.inventoryService.deductFromInventory(em, bulkReserveproductDto);
await em.flush();
this.logger.debug(`Order ${order.id} created for user ${userId} (restaurant ${restaurantId})`);
return order;
@@ -220,7 +220,7 @@ export class OrdersService {
'paymentMethod',
'payments',
'items',
'items.food',
'items.product',
],
},
);
@@ -426,30 +426,30 @@ export class OrdersService {
const orderItemsData: OrderItemData[] = [];
for (const cartItem of cart.items) {
const food = await this.em.findOne(Food, { id: cartItem.foodId }, { populate: ['restaurant', 'inventory'] });
if (!food) throw new NotFoundException(OrderMessage.FOOD_NOT_FOUND);
const product = await this.em.findOne(product, { id: cartItem.productId }, { populate: ['restaurant', 'inventory'] });
if (!product) throw new NotFoundException(OrderMessage.product_NOT_FOUND);
if (food.restaurant.id !== restaurantId) {
throw new BadRequestException(OrderMessage.FOOD_NOT_BELONGS_TO_RESTAURANT);
if (product.restaurant.id !== restaurantId) {
throw new BadRequestException(OrderMessage.product_NOT_BELONGS_TO_RESTAURANT);
}
this.assertFoodHasSufficientStock(food, cartItem.quantity);
this.assertproductHasSufficientStock(product, cartItem.quantity);
orderItemsData.push({
food,
product,
quantity: cartItem.quantity,
unitPrice: food.price || 0,
discount: food.discount || 0,
unitPrice: product.price || 0,
discount: product.discount || 0,
});
}
return orderItemsData;
}
private assertFoodHasSufficientStock(food: Food, quantity: number) {
const availableStock = food.inventory?.availableStock ?? 0;
private assertproductHasSufficientStock(product: product, quantity: number) {
const availableStock = product.inventory?.availableStock ?? 0;
if (availableStock < quantity) {
throw new BadRequestException(OrderMessage.FOOD_NOT_FOUND);
throw new BadRequestException(OrderMessage.product_NOT_FOUND);
}
}
@@ -471,8 +471,8 @@ export class OrdersService {
},
});
// 2. Active foods count
const activeFoods = await em.count(Food, {
// 2. Active products count
const activeproducts = await em.count(product, {
restaurant: { id: restId },
isActive: true,
});
@@ -502,14 +502,14 @@ export class OrdersService {
return {
totalOrders,
activeFoods,
activeproducts,
totalClients,
totalRevenue,
};
});
}
async getFoodSalesPieChart(restId: string) {
async getproductSalesPieChart(restId: string) {
return this.em.transactional(async em => {
// Use last 30 days instead of just last month to be more inclusive
const now = new Date();
@@ -525,7 +525,7 @@ export class OrdersService {
const lastDayOfLastMonth = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 999);
this.logger.debug(
`Food sales pie chart query params: restId=${restId}, startDate=${startDate.toISOString()}, endDate=${endDate.toISOString()}`,
`product sales pie chart query params: restId=${restId}, startDate=${startDate.toISOString()}, endDate=${endDate.toISOString()}`,
);
// Diagnostic query to check what orders exist
@@ -555,13 +555,13 @@ export class OrdersService {
const result = await em.execute(
`
SELECT
f.id as food_id,
f.title as food_title,
f.id as product_id,
f.title as product_title,
COALESCE(SUM(oi.quantity), 0)::int as total_quantity,
COALESCE(SUM(oi.total_price), 0)::numeric as total_revenue
FROM order_items oi
INNER JOIN orders o ON oi.order_id = o.id
INNER JOIN foods f ON oi.food_id = f.id
INNER JOIN products f ON oi.product_id = f.id
WHERE o.restaurant_id = ?
AND o.created_at >= ?
AND o.created_at <= ?
@@ -572,7 +572,7 @@ export class OrdersService {
[restId, startDate, endDate],
);
this.logger.debug(`Food sales pie chart query returned ${result.length} rows`);
this.logger.debug(`product sales pie chart query returned ${result.length} rows`);
// Calculate total revenue for percentage calculation
const totalRevenue = result.reduce((sum: number, item: any) => {
@@ -581,8 +581,8 @@ export class OrdersService {
// Format data for pie chart and calculate percentages
const chartData = result.map((item: any) => ({
foodId: item.food_id,
foodTitle: item.food_title || 'Unknown',
productId: item.product_id,
productTitle: item.product_title || 'Unknown',
quantity: Number(item.total_quantity || 0),
revenue: Number(item.total_revenue || 0),
percentage: totalRevenue > 0 ? Number(((Number(item.total_revenue || 0) / totalRevenue) * 100).toFixed(2)) : 0,
@@ -4,7 +4,7 @@ import { FilterQuery } from '@mikro-orm/core';
import { Order } from '../entities/order.entity';
import { PaginatedResult } from 'src/common/interfaces/pagination.interface';
import { OrderStatus } from '../interface/order.interface';
import { PaymentMethodEnum, PaymentStatusEnum } from '../../payments/interface/payment';
import { PaymentMethodEnum, PaymentStatusEnum } from '../../payment/interface/payment';
import { Review } from '../../review/entities/review.entity';
type FindOrdersOpts = {
@@ -118,53 +118,53 @@ export class OrderRepository extends EntityRepository<Order> {
limit,
offset,
orderBy: { [orderBy]: order.toLowerCase() as 'asc' | 'desc' },
populate: ['user', 'restaurant', 'deliveryMethod', 'paymentMethod', 'items', 'items.food'] as never,
populate: ['user', 'restaurant', 'deliveryMethod', 'paymentMethod', 'items', 'items.product'] as never,
});
// Collect all (orderId, foodId) pairs for efficient review lookup
const orderFoodPairs: Array<{ orderId: string; foodId: string }> = [];
// Collect all (orderId, productId) pairs for efficient review lookup
const orderproductPairs: Array<{ orderId: string; productId: string }> = [];
for (const order of data) {
for (const item of order.items.getItems()) {
if (item.food?.id) {
orderFoodPairs.push({ orderId: order.id, foodId: item.food.id });
if (item.product?.id) {
orderproductPairs.push({ orderId: order.id, productId: item.product.id });
}
}
}
// Fetch all relevant reviews in a single query
const reviewsMap: Map<string, string> = new Map();
if (orderFoodPairs.length > 0) {
const orderIds = [...new Set(orderFoodPairs.map(p => p.orderId))];
const foodIds = [...new Set(orderFoodPairs.map(p => p.foodId))];
if (orderproductPairs.length > 0) {
const orderIds = [...new Set(orderproductPairs.map(p => p.orderId))];
const productIds = [...new Set(orderproductPairs.map(p => p.productId))];
const reviews = await this.em.find(
Review,
{
order: { id: { $in: orderIds } },
food: { id: { $in: foodIds } },
product: { id: { $in: productIds } },
},
{
fields: ['id', 'order', 'food'],
populate: ['order', 'food'],
fields: ['id', 'order', 'product'],
populate: ['order', 'product'],
},
);
// Create a map: key = `${orderId}-${foodId}`, value = reviewId
// Create a map: key = `${orderId}-${productId}`, value = reviewId
for (const review of reviews) {
const key = `${review.order.id}-${review.food.id}`;
const key = `${review.order.id}-${review.product.id}`;
reviewsMap.set(key, review.id);
}
}
// Map reviewIds to foods
// Map reviewIds to products
for (const order of data) {
for (const item of order.items.getItems()) {
if (item.food) {
const key = `${order.id}-${item.food.id}`;
if (item.product) {
const key = `${order.id}-${item.product.id}`;
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const food = item.food as any;
const product = item.product as any;
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
food.reviewId = reviewsMap.get(key) || null;
product.reviewId = reviewsMap.get(key) || null;
}
}
}
@@ -1,6 +1,6 @@
import { Entity, ManyToOne, Property, Enum, Index } from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity';
import { Order } from '../../orders/entities/order.entity';
import { Order } from '../../order/entities/order.entity';
import { PaymentGatewayEnum, PaymentMethodEnum, PaymentStatusEnum } from '../interface/payment';
@Entity({ tableName: 'payments' })
@@ -1,4 +1,4 @@
import type { Order } from 'src/modules/orders/entities/order.entity';
import type { Order } from 'src/modules/order/entities/order.entity';
export enum PaymentMethodEnum {
Online = 'Online',
@@ -3,10 +3,10 @@ import { OnEvent } from '@nestjs/event-emitter';
import { AdminRepository } from 'src/modules/admin/repositories/admin.repository';
import { onlinePaymentSucceedEvent, paymentSucceedEvent } from '../events/payment.events';
import { Permission } from 'src/common/enums/permission.enum';
import { NotifTitleEnum } from 'src/modules/notifications/interfaces/notification.interface';
import { NotificationService } from 'src/modules/notifications/services/notification.service';
import { NotifTitleEnum } from 'src/modules/notification/interfaces/notification.interface';
import { NotificationService } from 'src/modules/notification/services/notification.service';
import { ConfigService } from '@nestjs/config';
import { OrdersService } from 'src/modules/orders/providers/orders.service';
import { OrdersService } from 'src/modules/order/providers/orders.service';
@Injectable()
export class PaymentListeners {
@@ -15,8 +15,8 @@ import { PaymentRepository } from './repositories/payment.repository';
import { InventoryModule } from '../inventory/inventory.module';
import { PaymentListeners } from './listeners/payment.listeners';
import { AdminModule } from '../admin/admin.module';
import { NotificationsModule } from '../notifications/notifications.module';
import { OrdersModule } from '../orders/orders.module';
import { NotificationsModule } from '../notification/notifications.module';
import { OrdersModule } from '../order/orders.module';
@Module({
imports: [MikroOrmModule.forFeature([PaymentMethod, Payment, Restaurant]),
@@ -2,17 +2,17 @@ import { BadRequestException, Injectable, NotFoundException } from '@nestjs/comm
import { PaymentGatewayEnum, PaymentMethodEnum, PaymentStatusEnum } from '../interface/payment';
import { Payment } from '../entities/payment.entity';
import { EntityManager } from '@mikro-orm/postgresql';
import { Order } from '../../orders/entities/order.entity';
import { Order } from '../../order/entities/order.entity';
import { Logger } from '@nestjs/common';
import { GatewayManager } from '../gateways/gateway.manager';
import { WalletTransaction } from 'src/modules/users/entities/wallet-transaction.entity';
import { WalletTransaction } from 'src/modules/user/entities/wallet-transaction.entity';
import { OrderPaymentContext } from '../interface/payment';
import { OrderStatus } from 'src/modules/orders/interface/order.interface';
import { OrderStatus } from 'src/modules/order/interface/order.interface';
import { ChartPeriodEnum, PaymentChartDto } from '../dto/payment-chart.dto';
import { PaymentMessage, OrderMessage } from 'src/common/enums/message.enum';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { onlinePaymentSucceedEvent, paymentSucceedEvent } from '../events/payment.events';
import { WalletTransactionReason, WalletTransactionType } from 'src/modules/users/interface/wallet';
import { WalletTransactionReason, WalletTransactionType } from 'src/modules/user/interface/wallet';
@Injectable()
export class PaymentsService {
@@ -141,7 +141,7 @@ export class PaymentsService {
payment.paidAt = new Date();
order.status = OrderStatus.PAID;
em.persist([ payment, order, newWalletTransaction]);
em.persist([payment, order, newWalletTransaction]);
await em.flush();
});
this.eventEmitter.emit(
@@ -0,0 +1,126 @@
import { Controller, Get, Post, Body, Patch, Param, Delete, Query, UseGuards } from '@nestjs/common';
import { productService } from '../providers/product.service';
import { CreateproductDto } from '../dto/create-product.dto';
import { UpdateproductDto } from '../dto/update-product.dto';
import { FindproductsDto } from '../dto/find-products.dto';
import {
ApiTags,
ApiOperation,
ApiCreatedResponse,
ApiOkResponse,
ApiNotFoundResponse,
ApiQuery,
ApiBody,
ApiParam,
ApiBearerAuth,
ApiHeader,
} from '@nestjs/swagger';
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
import { RestId, UserId } from 'src/common/decorators';
import { AuthGuard } from 'src/modules/auth/guards/auth.guard';
import { OptionalAuthGuard } from 'src/modules/auth/guards/optinalAuth.guard';
import { API_HEADER_SLUG } from 'src/common/constants';
import { Permission } from 'src/common/enums/permission.enum';
import { Permissions } from 'src/common/decorators/permissions.decorator';
@ApiTags('products')
@Controller()
export class productController {
constructor(private readonly productsService: productService) { }
@Get('public/products/restaurant/:slug')
@ApiOperation({ summary: 'Get all products by restaurant slug' })
@ApiHeader(API_HEADER_SLUG)
@ApiParam({ name: 'slug', required: true, description: 'Restaurant Slug' })
findAllByRestaurant(@Param('slug') slug: string) {
return this.productsService.findByWeekDateAndMealType(slug);
}
@Get('public/products/:productId')
@UseGuards(OptionalAuthGuard)
@ApiHeader(API_HEADER_SLUG)
@ApiBearerAuth()
@ApiOperation({ summary: 'Get a product by id' })
@ApiParam({ name: 'productId', required: true })
findPublicproductById(@Param('productId') productId: string, @UserId() userId?: string): Promise<any> {
const a = this.productsService.findPublicById(productId, userId);
return a;
}
@Post('public/products/favorite/:productId')
@UseGuards(AuthGuard)
@ApiHeader(API_HEADER_SLUG)
@ApiBearerAuth()
@ApiOperation({ summary: 'toggle a product as favorite' })
@ApiParam({ name: 'productId', required: true })
setAsFavorute(@Param('productId') productId: string, @UserId() userId: string) {
return this.productsService.toggleFavorite(userId, productId);
}
@Get('public/products/favorite')
@UseGuards(AuthGuard)
@ApiHeader(API_HEADER_SLUG)
@ApiBearerAuth()
@ApiOperation({ summary: 'get my favorites' })
getMyFavorites(@UserId() userId: string, @RestId() restId: string) {
return this.productsService.getMyFavorites(userId, restId);
}
/* ---------------------------------- Admin ---------------------------------- */
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_productS)
@Post('admin/products')
@ApiOperation({ summary: 'Create a new product' })
@ApiBody({ type: CreateproductDto })
create(@Body() createproductDto: CreateproductDto, @RestId() restId: string) {
return this.productsService.create(restId, createproductDto);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_productS)
@Get('admin/products')
@ApiOperation({ summary: 'Get a paginated list of products' })
@ApiQuery({ name: 'page', required: false, type: Number })
@ApiQuery({ name: 'limit', required: false, type: Number })
@ApiQuery({ name: 'search', required: false, type: String })
@ApiQuery({ name: 'orderBy', required: false, type: String })
@ApiQuery({ name: 'order', required: false, enum: ['asc', 'desc'] })
@ApiQuery({ name: 'categoryId', required: false, type: String })
@ApiQuery({ name: 'isActive', required: false, type: Boolean })
async findAll(@Query() dto: FindproductsDto, @RestId() restId: string) {
const result = await this.productsService.findAll(restId, dto);
return result;
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_productS)
@Get('admin/products/:id')
@ApiOperation({ summary: 'Get a product by id' })
@ApiParam({ name: 'id', required: true })
findById(@Param('id') id: string, @RestId() restId: string) {
return this.productsService.findAdminById(restId, id);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_productS)
@Patch('admin/products/:id')
@ApiOperation({ summary: 'Update a product' })
@ApiParam({ name: 'id', required: true })
@ApiBody({ type: UpdateproductDto })
update(@Param('id') id: string, @Body() updateproductDto: UpdateproductDto, @RestId() restId: string) {
return this.productsService.update(restId, id, updateproductDto);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Permissions(Permission.MANAGE_productS)
@Delete('admin/products/:id')
@ApiOperation({ summary: 'Delete (soft) a product' })
@ApiParam({ name: 'id', required: true })
remove(@Param('id') id: string, @RestId() restId: string) {
return this.productsService.remove(restId, id);
}
}
@@ -4,10 +4,10 @@ import { EntityManager } from '@mikro-orm/postgresql';
import { Inventory } from '../../inventory/entities/inventory.entity';
@Injectable()
export class FoodStockCrone {
private readonly logger = new Logger(FoodStockCrone.name);
export class productStockCrone {
private readonly logger = new Logger(productStockCrone.name);
constructor(private readonly em: EntityManager) {}
constructor(private readonly em: EntityManager) { }
// run every day at 00:03
@Cron('3 0 * * *', {
@@ -39,7 +39,7 @@ export class FoodStockCrone {
this.logger.log('Daily inventory reset completed');
} catch (err) {
this.logger.error(`FoodStockCrone failed: ${err?.message}`, err);
this.logger.error(`productStockCrone failed: ${err?.message}`, err);
}
}
}
@@ -13,9 +13,9 @@ import {
Min,
} from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { MealType } from '../interface/food.interface';
import { MealType } from '../interface/product.interface';
export class CreateFoodDto {
export class CreateproductDto {
@IsNotEmpty()
@IsString()
@ApiProperty()
@@ -2,7 +2,7 @@ import { IsOptional, IsNumber, IsString, IsIn, IsBoolean } from 'class-validator
import { ApiPropertyOptional } from '@nestjs/swagger';
import { Type } from 'class-transformer';
export class FindFoodsDto {
export class FindproductsDto {
@IsOptional()
@IsNumber()
@Type(() => Number)
@@ -0,0 +1,4 @@
import { PartialType } from '@nestjs/swagger';
import { CreateproductDto } from './create-product.dto';
export class UpdateproductDto extends PartialType(CreateproductDto) { }

Some files were not shown because too many files have changed in this diff Show More