Как сгенерировать уникальный номер заказа примерно как у Бургер кинга?
Интересует вопрос как сгенерировать уникальный номер заказа к примеру YA-50. Первая буква отвечает за филиал, вторая о типе заказа и уникальный числовой номер самого заказа.
При этом нужно учитывать порядок уникальности в базе postgresql и спустя день обнулять и начинать с нуля, на следующий день.
Может у кого то есть пример таких генераций, так как в инете не могу ничего найти по этому вопросу. Только обычные uuid.
1. Создай функцию для генерации уникального номера заказа. Эта функция будет принимать две буквы (филиал и тип заказа) и числовой номер заказа.
function generateOrderNumber(branch, orderType, number) {
return `${branch}-${orderType}-${number}`;
}
2. Для работы с базой данных PostgreSQL используй библиотеку node-postgres Установи её
npm install pg
3. Создай таблицу в базе данных PostgreSQL для хранения информации о заказах, включая уникальный номер заказа, филиал, тип заказа и дату создания заказа.
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
order_number VARCHAR(255) UNIQUE NOT NULL,
branch CHAR(1) NOT NULL,
order_type CHAR(1) NOT NULL,
created_at TIMESTAMP NOT NULL
);
4. Создай функцию для добавления нового заказа в базу данных. Эта функция будет использовать функцию генерации уникального номера заказа и добавлять запись в таблицу orders
const { Pool } = require('pg');
const pool = new Pool({
// Ваши настройки подключения к базе данных
});
async function addOrder(branch, orderType) {
const client = await pool.connect();
try {
await client.query('BEGIN');
const { rows } = await client.query('SELECT COUNT(*) as count FROM orders WHERE created_at >= CURRENT_DATE');
const orderNumber = generateOrderNumber(branch, orderType, parseInt(rows[0].count) + 1);
await client.query('INSERT INTO orders (order_number, branch, order_type, created_at) VALUES ($1, $2, $3, NOW())', [orderNumber, branch, orderType]);
await client.query('COMMIT');
return orderNumber;
} catch (error) {
await client.query('ROLLBACK');
throw error;
} finally {
client.release();
}
}
5. Используй функцию addOrder для добавления новых заказов в базу данных. Уникальный номер заказа будет сгенерирован автоматически, и счетчик числового номера заказа будет сбрасываться каждый день.
Это создаст уникальный номер заказа в формате YA-50, Счетчик числового номера заказа будет сбрасываться каждый день автоматически благодаря условию WHERE created_at >= CURRENT_DATE в запросе к базе данных.
На вопрос «как сделать» отвечает документация и поиск в интернет.
Тут отвечают на вопросы «почему я сделал, как в документации, а оно не работает. Поискал в интернет, вот запросы, в ответах не нашел. Что я делаю не так?»
Покажите, как вы пробовали решить проблему, приведите код попытки (пусть неудачной), опишите, как запускали, что ожидали и что получилось.
За готовыми решениями - на фриланс. В текущем виде это не вопрос, а задание. Нарушен п.5.12 Регламента.
На уровне таблицы заказа:
обычный ид
филиал ид (Возможно буквенный)
тип заказа ид (возможно буквенный)
ид добавочный (вторая часть примера вашего)
дата заказа
По необходимости - сохраняете полный "Ya-50", если необходимости нет - создаете геттер на модели.
На уровне алгоритма -
Запрашиваете последнюю строку (или максимальный ид сразу) по дате, и добавляете плюс 1. Так вы получите Ид этого дня.
Учтите часовые поясы.
Самое смешное, что это правда простейшая задача, и ее нужно просто словесно решить.