Feature/mesenko
Изменения:
Изменения в запросах:
Таблица User:
- Добавлено поле deleted_at
- Реализованы запросы:
- Выборка всех пользователей, которые не удалены
- Удаление пользователя и удаление всех заказов этого пользователя(Изменение поля deleted_at, сделано чтобы сохранить данные в БД)
- Изменение пользователя, имя и возраст
- Выборка всех заказов пользователя по id, если он не удалён
select o.* from users u join orders o on u.id = o.userid where u.id = ? and o.deleted_at is null
Реализована таблица Orders(заказы):
- Поля таблицы:
id serial primary key,
userId int references users(id) not null,
amount int not null,
status order_status default 'Создан',
deleted_at timestamp
- Реализован дополнительный тип(Enum):
create type order_status as enum('Создан', 'В работе', 'Закрыт');
- Реализованы запросы:
- Создание заказа
- Выборка всех заказов, если он не удалён
- Изменение статуса заказа
- Удаление заказа (Изменение поля deleted_at, сделано чтобы сохранить данные в БД)
- Выборка товаров в заказе по id, если заказ не удалён
select i.name, io.cost, io.amountitems
from orders o
join items_orders io on o.id = io.orderid
join items i on i.id = io.itemid
where o.id = ? and o.deleted_at is null
Реализована таблица Items(Товары):
- Поля таблицы:
id serial primary key,
name varchar(100) not null,
cost int not null,
deleted_at timestamp
- Реализованы запросы:
- Сохранение товара
- Выборка всего товара, если он не удалён
- Выборка товара по id, он не удалён
- Изменение товара(Наименование, цена)
- Удаление в товара(Изменение поля deleted_at, сделано чтобы сохранить данные в БД)
Реализована таблица ItemsOrders(Техническая таблица для реализации связи многие ко многим):
- Поля таблицы:
id serial primary key,
orderId int references orders(id),
itemId int references items(id),
cost int not null,
amountItems int not null
- Реализован запрос на вставку
Изменения в DatabaseManager
- Добавлена функция executeQuery с параметрами
fun <T> executeQueryWithParams(
query: String,
params: List<Any> = emptyList(),
blockToExecute: (ResultSet) -> T,
): T =
getConnection()
.prepareStatement(query)
.use { ps ->
params.forEachIndexed { index, param ->
ps.setObject(index + 1, param)
}
ps.executeQuery().use { blockToExecute(it) }
}
Изменения в репозиториях
- Добавлены репозитории ко всем новым таблицам и прописана реализация всех запросов
- Функция создания заказа:
fun insertData(
order: Order,
items: Map<Int, Pair<Item, Int>>,
) {
DatabaseManager.transaction { con ->
val orderQuery = OrdersQuery.insertData
val itemsOrderQuery = ItemsOrdersQuery.insertQuery
val id: Int =
DatabaseManager.executeQueryWithParams(orderQuery, listOf(order.userId, order.amount)) {
it.next()
return@executeQueryWithParams it.getInt("id")
}
items.forEach { (itemId, item) ->
DatabaseManager.executeUpdate(itemsOrderQuery) {
it.setInt(1, id)
it.setInt(2, itemId)
it.setInt(3, item.first.cost)
it.setInt(4, item.second)
}
}
}
}
Изменения в сервисах
- Добавлены сервисы ко всем репозиториям и прописана реализация всех функций
- Добавлен ServiceManager для удобного обращения ко всем сервисам и инициализации всех репозиториев и сервисов
Меню
- Реализовано меню для более удобного ввода и просмотра данных
Плохая реализация
Из-за отсутствия знаний о стейтмашине меню реализовано путём замкнутого вызова объектов