Compare commits
No commits in common. "247fe61d9ec055c51fe20cc861ebe82fd8ec5c25" and "5c2284ff793c2564bc411ba6fbacf0c133d6f393" have entirely different histories.
247fe61d9e
...
5c2284ff79
@ -1,208 +0,0 @@
|
|||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 1,
|
|
||||||
"identityHash": "fd664bd9d0a27511fb20675444548276",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "users",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `user_login` TEXT NOT NULL, `user_password` TEXT NOT NULL, `user_role` TEXT NOT NULL)",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "login",
|
|
||||||
"columnName": "user_login",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "password",
|
|
||||||
"columnName": "user_password",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "role",
|
|
||||||
"columnName": "user_role",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [],
|
|
||||||
"foreignKeys": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "orders",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `order_status` TEXT NOT NULL, `user_id` INTEGER, `date` INTEGER NOT NULL, FOREIGN KEY(`user_id`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "status",
|
|
||||||
"columnName": "order_status",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "userId",
|
|
||||||
"columnName": "user_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "date",
|
|
||||||
"columnName": "date",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_orders_user_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"user_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_orders_user_id` ON `${TABLE_NAME}` (`user_id`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "users",
|
|
||||||
"onDelete": "NO ACTION",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"user_id"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "products",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `product_title` TEXT NOT NULL, `product_price` INTEGER NOT NULL, `product_old_price` INTEGER)",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "title",
|
|
||||||
"columnName": "product_title",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "price",
|
|
||||||
"columnName": "product_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "oldPrice",
|
|
||||||
"columnName": "product_old_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [],
|
|
||||||
"foreignKeys": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "order_product",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`order_id` INTEGER NOT NULL, `product_id` INTEGER NOT NULL, `quantity` INTEGER NOT NULL, `total_price` INTEGER NOT NULL, PRIMARY KEY(`order_id`, `product_id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "orderId",
|
|
||||||
"columnName": "order_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "productId",
|
|
||||||
"columnName": "product_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "quantity",
|
|
||||||
"columnName": "quantity",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "totalPrice",
|
|
||||||
"columnName": "total_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"order_id",
|
|
||||||
"product_id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_order_product_order_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"order_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_order_product_order_id` ON `${TABLE_NAME}` (`order_id`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_order_product_product_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"product_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_order_product_product_id` ON `${TABLE_NAME}` (`product_id`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"views": [],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'fd664bd9d0a27511fb20675444548276')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,208 +0,0 @@
|
|||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 2,
|
|
||||||
"identityHash": "1ce8ad5b9b5decfebb42bc2f3c33393d",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "users",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `user_login` TEXT NOT NULL, `user_password` TEXT NOT NULL, `user_role` TEXT NOT NULL)",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "login",
|
|
||||||
"columnName": "user_login",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "password",
|
|
||||||
"columnName": "user_password",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "role",
|
|
||||||
"columnName": "user_role",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [],
|
|
||||||
"foreignKeys": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "orders",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `order_status` TEXT NOT NULL, `user_id` INTEGER, `date` TEXT NOT NULL, FOREIGN KEY(`user_id`) REFERENCES `users`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION )",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "status",
|
|
||||||
"columnName": "order_status",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "userId",
|
|
||||||
"columnName": "user_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "date",
|
|
||||||
"columnName": "date",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_orders_user_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"user_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_orders_user_id` ON `${TABLE_NAME}` (`user_id`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": [
|
|
||||||
{
|
|
||||||
"table": "users",
|
|
||||||
"onDelete": "NO ACTION",
|
|
||||||
"onUpdate": "NO ACTION",
|
|
||||||
"columns": [
|
|
||||||
"user_id"
|
|
||||||
],
|
|
||||||
"referencedColumns": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "products",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `product_title` TEXT NOT NULL, `product_price` INTEGER NOT NULL, `product_old_price` INTEGER)",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "title",
|
|
||||||
"columnName": "product_title",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "price",
|
|
||||||
"columnName": "product_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "oldPrice",
|
|
||||||
"columnName": "product_old_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [],
|
|
||||||
"foreignKeys": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "order_product",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`order_id` INTEGER NOT NULL, `product_id` INTEGER NOT NULL, `quantity` INTEGER NOT NULL, `total_price` INTEGER NOT NULL, PRIMARY KEY(`order_id`, `product_id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "orderId",
|
|
||||||
"columnName": "order_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "productId",
|
|
||||||
"columnName": "product_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "quantity",
|
|
||||||
"columnName": "quantity",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "totalPrice",
|
|
||||||
"columnName": "total_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"order_id",
|
|
||||||
"product_id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_order_product_order_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"order_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_order_product_order_id` ON `${TABLE_NAME}` (`order_id`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_order_product_product_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"product_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_order_product_product_id` ON `${TABLE_NAME}` (`product_id`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"views": [],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1ce8ad5b9b5decfebb42bc2f3c33393d')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,196 +0,0 @@
|
|||||||
{
|
|
||||||
"formatVersion": 1,
|
|
||||||
"database": {
|
|
||||||
"version": 3,
|
|
||||||
"identityHash": "12eb76256f54b2c513a3073a2e582c4c",
|
|
||||||
"entities": [
|
|
||||||
{
|
|
||||||
"tableName": "users",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `user_login` TEXT NOT NULL, `user_password` TEXT NOT NULL, `user_role` TEXT NOT NULL)",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "login",
|
|
||||||
"columnName": "user_login",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "password",
|
|
||||||
"columnName": "user_password",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "role",
|
|
||||||
"columnName": "user_role",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [],
|
|
||||||
"foreignKeys": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "orders",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `order_status` TEXT NOT NULL, `user_id` INTEGER, `date` TEXT NOT NULL)",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "status",
|
|
||||||
"columnName": "order_status",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "userId",
|
|
||||||
"columnName": "user_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "date",
|
|
||||||
"columnName": "date",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_orders_user_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"user_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_orders_user_id` ON `${TABLE_NAME}` (`user_id`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "products",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `product_title` TEXT NOT NULL, `product_price` INTEGER NOT NULL, `product_old_price` INTEGER)",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "id",
|
|
||||||
"columnName": "id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "title",
|
|
||||||
"columnName": "product_title",
|
|
||||||
"affinity": "TEXT",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "price",
|
|
||||||
"columnName": "product_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "oldPrice",
|
|
||||||
"columnName": "product_old_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": true,
|
|
||||||
"columnNames": [
|
|
||||||
"id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [],
|
|
||||||
"foreignKeys": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tableName": "order_product",
|
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`order_id` INTEGER NOT NULL, `product_id` INTEGER NOT NULL, `quantity` INTEGER NOT NULL, `total_price` INTEGER NOT NULL, PRIMARY KEY(`order_id`, `product_id`))",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "orderId",
|
|
||||||
"columnName": "order_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "productId",
|
|
||||||
"columnName": "product_id",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "quantity",
|
|
||||||
"columnName": "quantity",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "totalPrice",
|
|
||||||
"columnName": "total_price",
|
|
||||||
"affinity": "INTEGER",
|
|
||||||
"notNull": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primaryKey": {
|
|
||||||
"autoGenerate": false,
|
|
||||||
"columnNames": [
|
|
||||||
"order_id",
|
|
||||||
"product_id"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"indices": [
|
|
||||||
{
|
|
||||||
"name": "index_order_product_order_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"order_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_order_product_order_id` ON `${TABLE_NAME}` (`order_id`)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "index_order_product_product_id",
|
|
||||||
"unique": false,
|
|
||||||
"columnNames": [
|
|
||||||
"product_id"
|
|
||||||
],
|
|
||||||
"orders": [],
|
|
||||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_order_product_product_id` ON `${TABLE_NAME}` (`product_id`)"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"foreignKeys": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"views": [],
|
|
||||||
"setupQueries": [
|
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '12eb76256f54b2c513a3073a2e582c4c')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,8 +3,6 @@ package com.example.shawarma
|
|||||||
import android.app.Application
|
import android.app.Application
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
import com.example.shawarma.data.api.MyServerService
|
import com.example.shawarma.data.api.MyServerService
|
||||||
import com.example.shawarma.data.api.repos.RestOrderProductRepository
|
|
||||||
import com.example.shawarma.data.api.repos.RestOrderRepository
|
|
||||||
import com.example.shawarma.data.api.repos.RestProductRepository
|
import com.example.shawarma.data.api.repos.RestProductRepository
|
||||||
import com.example.shawarma.data.api.repos.RestUserRepository
|
import com.example.shawarma.data.api.repos.RestUserRepository
|
||||||
import com.example.shawarma.data.db.AppDatabase
|
import com.example.shawarma.data.db.AppDatabase
|
||||||
@ -51,8 +49,8 @@ object AppModule {
|
|||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideProductRepository(db: AppDatabase, restProductRepository: RestProductRepository) : ProductRepository {
|
fun provideProductRepository(db: AppDatabase) : ProductRepository {
|
||||||
return ProductRepository(database = db, db.productDao(), db.orderProductDao(), restProductRepository)
|
return ProductRepository(database = db, db.productDao(), db.orderProductDao())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@ -63,26 +61,14 @@ object AppModule {
|
|||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideOrderRepository(db: AppDatabase, restOrderRepository: RestOrderRepository) : OrderRepository {
|
fun provideOrderRepository(db: AppDatabase) : OrderRepository {
|
||||||
return OrderRepository(db.orderDao(), db.productDao(), db.orderProductDao(), restOrderRepository)
|
return OrderRepository(db.orderDao())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideRestOrderRepository(service: MyServerService) : RestOrderRepository {
|
fun provideOrderProductRepository(db: AppDatabase) : OrderProductRepository {
|
||||||
return RestOrderRepository(service)
|
return OrderProductRepository(db.orderProductDao())
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun provideOrderProductRepository(db: AppDatabase, restOrderProductRepository: RestOrderProductRepository) : OrderProductRepository {
|
|
||||||
return OrderProductRepository(db.orderProductDao(), restOrderProductRepository)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun provideRestOrderProductRepository(service: MyServerService) : RestOrderProductRepository {
|
|
||||||
return RestOrderProductRepository(service)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package com.example.shawarma.data.api
|
package com.example.shawarma.data.api
|
||||||
|
|
||||||
import com.example.shawarma.data.api.models.OrderModelRemote
|
|
||||||
import com.example.shawarma.data.api.models.OrderProductRemote
|
|
||||||
import com.example.shawarma.data.api.models.ProductListResponse
|
import com.example.shawarma.data.api.models.ProductListResponse
|
||||||
import com.example.shawarma.data.api.models.ProductModelRemote
|
|
||||||
import com.example.shawarma.data.api.models.TokenModelRemote
|
import com.example.shawarma.data.api.models.TokenModelRemote
|
||||||
import com.example.shawarma.data.api.models.UserModelRemote
|
import com.example.shawarma.data.api.models.UserModelRemote
|
||||||
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
||||||
@ -12,18 +9,13 @@ import okhttp3.MediaType.Companion.toMediaType
|
|||||||
import okhttp3.logging.HttpLoggingInterceptor
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
import retrofit2.http.DELETE
|
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import retrofit2.http.Header
|
import retrofit2.http.Header
|
||||||
import retrofit2.http.POST
|
import retrofit2.http.POST
|
||||||
import retrofit2.http.PUT
|
|
||||||
import retrofit2.http.Path
|
import retrofit2.http.Path
|
||||||
|
|
||||||
|
|
||||||
interface MyServerService {
|
interface MyServerService {
|
||||||
//
|
|
||||||
// USER
|
|
||||||
//
|
|
||||||
@POST("register")
|
@POST("register")
|
||||||
suspend fun createUser(
|
suspend fun createUser(
|
||||||
@Body user: UserModelRemote,
|
@Body user: UserModelRemote,
|
||||||
@ -39,13 +31,6 @@ interface MyServerService {
|
|||||||
@Body user: UserModelRemote
|
@Body user: UserModelRemote
|
||||||
) :UserModelRemote?
|
) :UserModelRemote?
|
||||||
|
|
||||||
@GET("user")
|
|
||||||
suspend fun getUser(@Header("Authorization") token: String) : UserModelRemote?
|
|
||||||
|
|
||||||
//
|
|
||||||
// PRODUCTS
|
|
||||||
//
|
|
||||||
|
|
||||||
@GET("user/products/{after}")
|
@GET("user/products/{after}")
|
||||||
suspend fun getProductsList(@Path("after") after: Int, @Header("Authorization") token: String) : ProductListResponse
|
suspend fun getProductsList(@Path("after") after: Int, @Header("Authorization") token: String) : ProductListResponse
|
||||||
|
|
||||||
@ -55,40 +40,6 @@ interface MyServerService {
|
|||||||
@GET("user/items/{after}")
|
@GET("user/items/{after}")
|
||||||
suspend fun getItemsList(@Path("after") after: Int, @Header("Authorization") token: String) : ProductListResponse
|
suspend fun getItemsList(@Path("after") after: Int, @Header("Authorization") token: String) : ProductListResponse
|
||||||
|
|
||||||
@POST("product")
|
|
||||||
suspend fun insertProduct(
|
|
||||||
@Body product: ProductModelRemote,
|
|
||||||
@Header("Authorization") token: String
|
|
||||||
) : ProductModelRemote
|
|
||||||
|
|
||||||
@PUT("product")
|
|
||||||
suspend fun updateProduct(
|
|
||||||
@Body product: ProductModelRemote,
|
|
||||||
@Header("Authorization") token: String
|
|
||||||
): ProductModelRemote
|
|
||||||
|
|
||||||
@DELETE("product/{id}")
|
|
||||||
suspend fun deleteProduct(@Path("id") id: Int, @Header("Authorization") token: String)
|
|
||||||
|
|
||||||
//
|
|
||||||
// ORDERS
|
|
||||||
//
|
|
||||||
|
|
||||||
@GET("order/unpaid")
|
|
||||||
suspend fun getUnpaidOrder(@Header("Authorization") token: String) : OrderModelRemote
|
|
||||||
|
|
||||||
@POST("order")
|
|
||||||
suspend fun insertOrder(@Body order: OrderModelRemote, @Header("Authorization") token: String) : OrderModelRemote?
|
|
||||||
|
|
||||||
//
|
|
||||||
// ORDER PRODUCTS
|
|
||||||
//
|
|
||||||
|
|
||||||
@POST("order/product")
|
|
||||||
suspend fun insertOrderProduct(@Body orderProduct: OrderProductRemote, @Header("Authorization") token: String)
|
|
||||||
|
|
||||||
@PUT("order/product")
|
|
||||||
suspend fun updateOrderProduct(@Body orderProduct: OrderProductRemote, @Header("Authorization") token: String)
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val BASE_URL = "https://10.0.2.2:80/api/"
|
private const val BASE_URL = "https://10.0.2.2:80/api/"
|
||||||
|
@ -27,16 +27,30 @@ class ProductRemoteMediator (
|
|||||||
state: PagingState<Int, ProductModel>
|
state: PagingState<Int, ProductModel>
|
||||||
): MediatorResult {
|
): MediatorResult {
|
||||||
return try {
|
return try {
|
||||||
|
// The network load method takes an optional `after=<user.id>` parameter. For every
|
||||||
|
// page after the first, we pass the last user ID to let it continue from where it
|
||||||
|
// left off. For REFRESH, pass `null` to load the first page.
|
||||||
var loadKey = when (loadType) {
|
var loadKey = when (loadType) {
|
||||||
LoadType.REFRESH -> null
|
LoadType.REFRESH -> null
|
||||||
|
// In this example, we never need to prepend, since REFRESH will always load the
|
||||||
|
// first page in the list. Immediately return, reporting end of pagination.
|
||||||
LoadType.PREPEND -> return MediatorResult.Success(endOfPaginationReached = true)
|
LoadType.PREPEND -> return MediatorResult.Success(endOfPaginationReached = true)
|
||||||
LoadType.APPEND -> {
|
LoadType.APPEND -> {
|
||||||
val lastItem = state.lastItemOrNull()
|
val lastItem = state.lastItemOrNull()
|
||||||
?: return MediatorResult.Success(endOfPaginationReached = true)
|
?: return MediatorResult.Success(endOfPaginationReached = true)
|
||||||
|
|
||||||
|
// We must explicitly check if the last item is `null` when appending,
|
||||||
|
// since passing `null` to networkService is only valid for initial load.
|
||||||
|
// If lastItem is `null` it means no items were loaded after the initial
|
||||||
|
// REFRESH and there are no more items to load.
|
||||||
|
|
||||||
lastItem.id
|
lastItem.id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Suspending network load via Retrofit. This doesn't need to be wrapped in a
|
||||||
|
// withContext(Dispatcher.IO) { ... } block since Retrofit's Coroutine CallAdapter
|
||||||
|
// dispatches on a worker thread.
|
||||||
if (loadKey == null) {
|
if (loadKey == null) {
|
||||||
loadKey = 0
|
loadKey = 0
|
||||||
}
|
}
|
||||||
@ -60,6 +74,8 @@ class ProductRemoteMediator (
|
|||||||
productDao.deleteByQuery(query)
|
productDao.deleteByQuery(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Insert new users into database, which invalidates the current
|
||||||
|
// PagingData, allowing Paging to present the updates in the DB.
|
||||||
val products = mutableListOf<ProductModel>()
|
val products = mutableListOf<ProductModel>()
|
||||||
for (prod in response.products) {
|
for (prod in response.products) {
|
||||||
products.add(prod.toProductModel())
|
products.add(prod.toProductModel())
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
package com.example.shawarma.data.api.models
|
|
||||||
|
|
||||||
import com.example.shawarma.data.models.OrderModel
|
|
||||||
import com.example.shawarma.data.models.OrderProductModel
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class OrderModelRemote(
|
|
||||||
val id: Int? = null,
|
|
||||||
val status: String = "",
|
|
||||||
val user_id: Int? = -1,
|
|
||||||
val date: String = "",
|
|
||||||
val order_products: List<OrderProductRemote> = listOf()
|
|
||||||
)
|
|
||||||
|
|
||||||
fun OrderModelRemote.toOrderModel() : OrderModel = OrderModel(
|
|
||||||
id, status, user_id, date = date
|
|
||||||
)
|
|
||||||
|
|
||||||
fun OrderModel.toOrderModelRemote() : OrderModelRemote = OrderModelRemote(
|
|
||||||
id, status, userId, date.toString()
|
|
||||||
)
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class OrderProductRemote(
|
|
||||||
val id: Int? = null,
|
|
||||||
val order_id: Int = -1,
|
|
||||||
val product_id: Int = -1,
|
|
||||||
val quantity: Int = 0,
|
|
||||||
val total_price: Int = 0,
|
|
||||||
|
|
||||||
val order: OrderModelRemote? = null,
|
|
||||||
val product: ProductModelRemote? = null
|
|
||||||
)
|
|
||||||
|
|
||||||
fun OrderProductRemote.toOrderProductModel() : OrderProductModel = OrderProductModel(
|
|
||||||
order_id, product_id, quantity, total_price
|
|
||||||
)
|
|
||||||
|
|
||||||
fun OrderProductModel.toOrderProductRemote() : OrderProductRemote = OrderProductRemote(
|
|
||||||
order_id = orderId, product_id = productId, quantity = quantity, total_price = totalPrice
|
|
||||||
)
|
|
@ -5,12 +5,10 @@ import kotlinx.serialization.Serializable
|
|||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class ProductModelRemote(
|
data class ProductModelRemote(
|
||||||
val id: Int? = null,
|
val id: Int = 0,
|
||||||
val title: String = "",
|
val title: String = "",
|
||||||
val price: Int = 0,
|
val price: Int = 0,
|
||||||
val old_price: Int? = null,
|
val old_price: Int? = null
|
||||||
|
|
||||||
val order_products: List<OrderProductRemote> = listOf()
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -24,5 +22,5 @@ fun ProductModelRemote.toProductModel(): ProductModel = ProductModel(
|
|||||||
)
|
)
|
||||||
|
|
||||||
fun ProductModel.toProductModelRemote(): ProductModelRemote = ProductModelRemote(
|
fun ProductModel.toProductModelRemote(): ProductModelRemote = ProductModelRemote(
|
||||||
title = title, price = price, old_price = oldPrice, id = id
|
title = title, price = price, old_price = oldPrice
|
||||||
)
|
)
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
package com.example.shawarma.data.api.repos
|
|
||||||
|
|
||||||
import com.example.shawarma.data.api.MyServerService
|
|
||||||
import com.example.shawarma.data.api.models.OrderProductRemote
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
class RestOrderProductRepository @Inject constructor(
|
|
||||||
private val service: MyServerService
|
|
||||||
) {
|
|
||||||
suspend fun insertOrderProduct(token: String, orderProduct: OrderProductRemote) {
|
|
||||||
service.insertOrderProduct(orderProduct, token)
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun updateOrderProduct(token: String, orderProduct: OrderProductRemote) {
|
|
||||||
service.updateOrderProduct(orderProduct, token)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
package com.example.shawarma.data.api.repos
|
|
||||||
|
|
||||||
import com.example.shawarma.data.api.MyServerService
|
|
||||||
import com.example.shawarma.data.api.models.OrderModelRemote
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
class RestOrderRepository@Inject constructor(
|
|
||||||
private val service: MyServerService
|
|
||||||
) {
|
|
||||||
suspend fun getUnpaidOrder(token:String) : OrderModelRemote {
|
|
||||||
return service.getUnpaidOrder(token)
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun insertOrder(token: String, order: OrderModelRemote): OrderModelRemote? {
|
|
||||||
return service.insertOrder(order, token)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,22 +1,10 @@
|
|||||||
package com.example.shawarma.data.api.repos
|
package com.example.shawarma.data.api.repos
|
||||||
|
|
||||||
import com.example.shawarma.data.api.MyServerService
|
import com.example.shawarma.data.api.MyServerService
|
||||||
import com.example.shawarma.data.api.models.toProductModelRemote
|
|
||||||
import com.example.shawarma.data.models.ProductModel
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class RestProductRepository @Inject constructor(
|
class RestProductRepository @Inject constructor(
|
||||||
private val service: MyServerService
|
private val service: MyServerService
|
||||||
) {
|
) {
|
||||||
suspend fun insert(product: ProductModel, token: String) {
|
|
||||||
service.insertProduct(product.toProductModelRemote(), token)
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun update(product: ProductModel, token: String) {
|
|
||||||
service.updateProduct((product.toProductModelRemote()), token)
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun delete(id: Int, token: String) {
|
|
||||||
service.deleteProduct(id, token)
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -21,8 +21,4 @@ class RestUserRepository @Inject constructor(
|
|||||||
suspend fun checkLogin(user: UserModel): UserModelRemote? {
|
suspend fun checkLogin(user: UserModel): UserModelRemote? {
|
||||||
return service.checkLogin(user.toUserModelRemote())
|
return service.checkLogin(user.toUserModelRemote())
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getUser(token: String) : UserModelRemote? {
|
|
||||||
return service.getUser(token)
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package com.example.shawarma.data.db
|
package com.example.shawarma.data.db
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.room.AutoMigration
|
|
||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
import androidx.room.RoomDatabase
|
import androidx.room.RoomDatabase
|
||||||
@ -27,9 +26,8 @@ import kotlinx.coroutines.launch
|
|||||||
ProductModel::class,
|
ProductModel::class,
|
||||||
OrderProductModel::class,
|
OrderProductModel::class,
|
||||||
],
|
],
|
||||||
version = 3,
|
version = 1,
|
||||||
autoMigrations = [AutoMigration (from = 1, to = 2), AutoMigration (from = 2, to = 3)],
|
exportSchema = false
|
||||||
exportSchema = true
|
|
||||||
)
|
)
|
||||||
@TypeConverters(Converter::class)
|
@TypeConverters(Converter::class)
|
||||||
abstract class AppDatabase : RoomDatabase() {
|
abstract class AppDatabase : RoomDatabase() {
|
||||||
|
@ -2,10 +2,19 @@ package com.example.shawarma.data.models
|
|||||||
|
|
||||||
import androidx.room.ColumnInfo
|
import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
|
import androidx.room.ForeignKey
|
||||||
import androidx.room.PrimaryKey
|
import androidx.room.PrimaryKey
|
||||||
|
import java.util.Date
|
||||||
|
|
||||||
@Entity(
|
@Entity(
|
||||||
tableName = "orders"
|
tableName = "orders",
|
||||||
|
foreignKeys = [
|
||||||
|
ForeignKey(
|
||||||
|
entity = UserModel::class,
|
||||||
|
parentColumns = ["id"],
|
||||||
|
childColumns = ["user_id"],
|
||||||
|
)
|
||||||
|
]
|
||||||
)
|
)
|
||||||
data class OrderModel(
|
data class OrderModel(
|
||||||
@PrimaryKey(autoGenerate = true)
|
@PrimaryKey(autoGenerate = true)
|
||||||
@ -16,7 +25,7 @@ data class OrderModel(
|
|||||||
@ColumnInfo(name = "user_id", index = true)
|
@ColumnInfo(name = "user_id", index = true)
|
||||||
val userId: Int?,
|
val userId: Int?,
|
||||||
@ColumnInfo(name = "date")
|
@ColumnInfo(name = "date")
|
||||||
val date: String
|
val date: Date
|
||||||
)
|
)
|
||||||
|
|
||||||
fun getOrdersByUserId() : List<OrderModel> {
|
fun getOrdersByUserId() : List<OrderModel> {
|
||||||
|
@ -1,22 +1,17 @@
|
|||||||
package com.example.shawarma.data.repos
|
package com.example.shawarma.data.repos
|
||||||
|
|
||||||
import com.example.shawarma.data.api.models.toOrderProductRemote
|
|
||||||
import com.example.shawarma.data.api.repos.RestOrderProductRepository
|
|
||||||
import com.example.shawarma.data.interfaces.dao.OrderProductDao
|
import com.example.shawarma.data.interfaces.dao.OrderProductDao
|
||||||
import com.example.shawarma.data.models.OrderProductModel
|
import com.example.shawarma.data.models.OrderProductModel
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class OrderProductRepository @Inject constructor(
|
class OrderProductRepository @Inject constructor(
|
||||||
private val orderProductDao: OrderProductDao,
|
private val orderProductDao: OrderProductDao
|
||||||
private val restOrderProductRepository: RestOrderProductRepository
|
|
||||||
) {
|
) {
|
||||||
suspend fun insert(token: String, orderProduct: OrderProductModel) {
|
suspend fun insert(order: OrderProductModel) {
|
||||||
orderProductDao.insert(orderProduct)
|
return orderProductDao.insert(order)
|
||||||
return restOrderProductRepository.insertOrderProduct(token, orderProduct.toOrderProductRemote())
|
|
||||||
}
|
}
|
||||||
suspend fun update(token: String, orderProduct: OrderProductModel) {
|
suspend fun update(order: OrderProductModel) {
|
||||||
orderProductDao.update(orderProduct)
|
return orderProductDao.update(order)
|
||||||
return restOrderProductRepository.updateOrderProduct(token, orderProduct.toOrderProductRemote())
|
|
||||||
}
|
}
|
||||||
suspend fun delete(order: OrderProductModel) {
|
suspend fun delete(order: OrderProductModel) {
|
||||||
return orderProductDao.delete(order)
|
return orderProductDao.delete(order)
|
||||||
|
@ -1,31 +1,16 @@
|
|||||||
package com.example.shawarma.data.repos
|
package com.example.shawarma.data.repos
|
||||||
|
|
||||||
import com.example.shawarma.data.api.models.toOrderModel
|
|
||||||
import com.example.shawarma.data.api.models.toOrderModelRemote
|
|
||||||
import com.example.shawarma.data.api.models.toOrderProductModel
|
|
||||||
import com.example.shawarma.data.api.models.toProductModel
|
|
||||||
import com.example.shawarma.data.api.repos.RestOrderRepository
|
|
||||||
import com.example.shawarma.data.interfaces.dao.OrderDao
|
import com.example.shawarma.data.interfaces.dao.OrderDao
|
||||||
import com.example.shawarma.data.interfaces.dao.OrderProductDao
|
|
||||||
import com.example.shawarma.data.interfaces.dao.ProductDao
|
|
||||||
import com.example.shawarma.data.models.OrderModel
|
import com.example.shawarma.data.models.OrderModel
|
||||||
import com.example.shawarma.data.models.OrderWithProducts
|
import com.example.shawarma.data.models.OrderWithProducts
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.first
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class OrderRepository @Inject constructor(
|
class OrderRepository @Inject constructor(
|
||||||
private val orderDao: OrderDao,
|
private val orderDao: OrderDao
|
||||||
private val productDao: ProductDao,
|
|
||||||
private val orderProductDao: OrderProductDao,
|
|
||||||
private val restRepository: RestOrderRepository
|
|
||||||
){
|
){
|
||||||
suspend fun insert(token: String, order: OrderModel): OrderModel? {
|
suspend fun insert(order: OrderModel): Long {
|
||||||
val result = restRepository.insertOrder(token, order.toOrderModelRemote())
|
return orderDao.insert(order)
|
||||||
if (result == null) {
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
return result.toOrderModel()
|
|
||||||
}
|
}
|
||||||
suspend fun update(order:OrderModel) {
|
suspend fun update(order:OrderModel) {
|
||||||
return orderDao.update(order)
|
return orderDao.update(order)
|
||||||
@ -42,20 +27,8 @@ class OrderRepository @Inject constructor(
|
|||||||
fun getByUserId(userId: Int): Flow<List<OrderWithProducts>> {
|
fun getByUserId(userId: Int): Flow<List<OrderWithProducts>> {
|
||||||
return orderDao.getByUserId(userId)
|
return orderDao.getByUserId(userId)
|
||||||
}
|
}
|
||||||
suspend fun getUnpaidByUser(token: String) : OrderWithProducts? {
|
fun getUnpaidByUser(userId: Int) : Flow<OrderWithProducts?> {
|
||||||
val order = restRepository.getUnpaidOrder(token)
|
return orderDao.getUnpaidByUser(userId)
|
||||||
if (orderDao.getUnpaidByUser(order.user_id!!).first() != null) {
|
|
||||||
return orderDao.getUnpaidByUser(order.user_id!!).first()
|
|
||||||
}
|
|
||||||
if (order!!.id != null) {
|
|
||||||
orderDao.insert(order.toOrderModel())
|
|
||||||
for (product in order.order_products) {
|
|
||||||
orderProductDao.insert(product.toOrderProductModel())
|
|
||||||
productDao.insert(product.product!!.toProductModel())
|
|
||||||
}
|
|
||||||
return orderDao.getUnpaidByUser(order.user_id!!).first()
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
fun getPaidByUser(userId: Int) : Flow<List<OrderWithProducts>> {
|
fun getPaidByUser(userId: Int) : Flow<List<OrderWithProducts>> {
|
||||||
return orderDao.getPaidByUser(userId)
|
return orderDao.getPaidByUser(userId)
|
||||||
|
@ -6,7 +6,6 @@ import androidx.paging.PagingConfig
|
|||||||
import androidx.paging.PagingData
|
import androidx.paging.PagingData
|
||||||
import com.example.shawarma.data.api.MyServerService
|
import com.example.shawarma.data.api.MyServerService
|
||||||
import com.example.shawarma.data.api.mediators.ProductRemoteMediator
|
import com.example.shawarma.data.api.mediators.ProductRemoteMediator
|
||||||
import com.example.shawarma.data.api.repos.RestProductRepository
|
|
||||||
import com.example.shawarma.data.db.AppDatabase
|
import com.example.shawarma.data.db.AppDatabase
|
||||||
import com.example.shawarma.data.interfaces.dao.OrderProductDao
|
import com.example.shawarma.data.interfaces.dao.OrderProductDao
|
||||||
import com.example.shawarma.data.interfaces.dao.ProductDao
|
import com.example.shawarma.data.interfaces.dao.ProductDao
|
||||||
@ -17,19 +16,17 @@ import javax.inject.Inject
|
|||||||
class ProductRepository @Inject constructor(
|
class ProductRepository @Inject constructor(
|
||||||
private val database: AppDatabase,
|
private val database: AppDatabase,
|
||||||
private val productDao: ProductDao,
|
private val productDao: ProductDao,
|
||||||
private val orderProductDao: OrderProductDao,
|
private val orderProductDao: OrderProductDao
|
||||||
private val restRepository: RestProductRepository
|
|
||||||
) {
|
) {
|
||||||
suspend fun insert(product: ProductModel, token: String) {
|
suspend fun insert(product: ProductModel) {
|
||||||
return restRepository.insert(product, token)
|
return productDao.insert(product)
|
||||||
}
|
}
|
||||||
suspend fun update(product: ProductModel, token: String) {
|
suspend fun update(product: ProductModel) {
|
||||||
return restRepository.update(product, token)
|
return productDao.update(product)
|
||||||
}
|
}
|
||||||
suspend fun delete(product: ProductModel, token: String) {
|
suspend fun delete(product: ProductModel) {
|
||||||
//orderProductDao.deleteByProductId(product.id!!)
|
orderProductDao.deleteByProductId(product.id!!)
|
||||||
productDao.delete(product)
|
return productDao.delete(product)
|
||||||
return restRepository.delete(product.id!!, token)
|
|
||||||
}
|
}
|
||||||
fun getById(id: Int): Flow<ProductModel> {
|
fun getById(id: Int): Flow<ProductModel> {
|
||||||
return productDao.getById(id)
|
return productDao.getById(id)
|
||||||
@ -54,14 +51,12 @@ class ProductRepository @Inject constructor(
|
|||||||
remoteMediator = ProductRemoteMediator(database = database, serverService = MyServerService.getInstance(), query = "discounts", token = token)
|
remoteMediator = ProductRemoteMediator(database = database, serverService = MyServerService.getInstance(), query = "discounts", token = token)
|
||||||
).flow
|
).flow
|
||||||
|
|
||||||
@OptIn(ExperimentalPagingApi::class)
|
fun getAllItemsPaged(): Flow<PagingData<ProductModel>> = Pager(
|
||||||
fun getAllItemsPaged(token: String): Flow<PagingData<ProductModel>> = Pager(
|
|
||||||
config = PagingConfig(
|
config = PagingConfig(
|
||||||
pageSize = 6,
|
pageSize = 6,
|
||||||
enablePlaceholders = false
|
enablePlaceholders = false
|
||||||
),
|
),
|
||||||
pagingSourceFactory = productDao::getPagedItems,
|
pagingSourceFactory = productDao::getPagedItems
|
||||||
remoteMediator = ProductRemoteMediator(database = database, serverService = MyServerService.getInstance(), query = "items", token = token)
|
|
||||||
).flow
|
).flow
|
||||||
|
|
||||||
}
|
}
|
@ -167,7 +167,7 @@ fun ProductCard(product: ProductModel){
|
|||||||
)
|
)
|
||||||
Button(
|
Button(
|
||||||
onClick = {
|
onClick = {
|
||||||
product.id?.let { homeViewModel.addProductToCart(it, preferencesManager.getData("token", "null")) }
|
product.id?.let { homeViewModel.addProductToCart(it, preferencesManager.getData("user_id", "null")) }
|
||||||
},
|
},
|
||||||
colors = ButtonDefaults.buttonColors(
|
colors = ButtonDefaults.buttonColors(
|
||||||
backgroundColor = MyLightYellow,
|
backgroundColor = MyLightYellow,
|
||||||
|
@ -20,7 +20,6 @@ import androidx.compose.runtime.remember
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.input.TextFieldValue
|
import androidx.compose.ui.text.input.TextFieldValue
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
@ -28,7 +27,6 @@ import androidx.compose.ui.unit.sp
|
|||||||
import androidx.compose.ui.zIndex
|
import androidx.compose.ui.zIndex
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import androidx.navigation.NavHostController
|
import androidx.navigation.NavHostController
|
||||||
import com.example.shawarma.data.sharedpref.PreferencesManager
|
|
||||||
import com.example.shawarma.ui.theme.MarckFamily
|
import com.example.shawarma.ui.theme.MarckFamily
|
||||||
import com.example.shawarma.ui.theme.MyLightYellow
|
import com.example.shawarma.ui.theme.MyLightYellow
|
||||||
import com.example.shawarma.ui.theme.MyMainBackground
|
import com.example.shawarma.ui.theme.MyMainBackground
|
||||||
@ -51,9 +49,6 @@ fun ProductScreen(navHostController: NavHostController, productId: Int?) {
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ProductWidget(navHostController: NavHostController, productId: Int?) {
|
fun ProductWidget(navHostController: NavHostController, productId: Int?) {
|
||||||
val preferencesManager = PreferencesManager(LocalContext.current)
|
|
||||||
val searchToken = preferencesManager.getData("token", "")
|
|
||||||
|
|
||||||
val title = remember { mutableStateOf(TextFieldValue(""))}
|
val title = remember { mutableStateOf(TextFieldValue(""))}
|
||||||
val price = remember { mutableStateOf(TextFieldValue(""))}
|
val price = remember { mutableStateOf(TextFieldValue(""))}
|
||||||
val oldPrice = remember { mutableStateOf(TextFieldValue(""))}
|
val oldPrice = remember { mutableStateOf(TextFieldValue(""))}
|
||||||
@ -76,9 +71,7 @@ fun ProductWidget(navHostController: NavHostController, productId: Int?) {
|
|||||||
if (product != null) {
|
if (product != null) {
|
||||||
title.value = TextFieldValue(text = product.title)
|
title.value = TextFieldValue(text = product.title)
|
||||||
price.value = TextFieldValue(text = product.price.toString())
|
price.value = TextFieldValue(text = product.price.toString())
|
||||||
if (product.oldPrice != null) {
|
oldPrice.value = TextFieldValue(text = product.oldPrice.toString())
|
||||||
oldPrice.value = TextFieldValue(text = product.oldPrice.toString())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Box(
|
Box(
|
||||||
@ -147,9 +140,9 @@ fun ProductWidget(navHostController: NavHostController, productId: Int?) {
|
|||||||
shape = RoundedCornerShape(20.dp),
|
shape = RoundedCornerShape(20.dp),
|
||||||
onClick = {
|
onClick = {
|
||||||
if (product == null)
|
if (product == null)
|
||||||
productViewModel.addProduct(title.value.text, price.value.text.toInt(), if (!oldPrice.value.text.isNullOrEmpty()) oldPrice.value.text.toInt() else null, searchToken)
|
productViewModel.addProduct(title.value.text, price.value.text.toInt(), if (!oldPrice.value.text.isNullOrEmpty()) oldPrice.value.text.toInt() else null)
|
||||||
else
|
else
|
||||||
productViewModel.updateProduct(title.value.text, price.value.text.toInt(), if (!oldPrice.value.text.isNullOrEmpty()) oldPrice.value.text.toInt() else null, searchToken)
|
productViewModel.updateProduct(title.value.text, price.value.text.toInt(), if (!oldPrice.value.text.isNullOrEmpty()) oldPrice.value.text.toInt() else null)
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
|
@ -24,7 +24,6 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
@ -36,7 +35,6 @@ import androidx.paging.compose.collectAsLazyPagingItems
|
|||||||
import androidx.paging.compose.itemKey
|
import androidx.paging.compose.itemKey
|
||||||
import com.example.shawarma.R
|
import com.example.shawarma.R
|
||||||
import com.example.shawarma.data.models.ProductModel
|
import com.example.shawarma.data.models.ProductModel
|
||||||
import com.example.shawarma.data.sharedpref.PreferencesManager
|
|
||||||
import com.example.shawarma.ui.theme.MarckFamily
|
import com.example.shawarma.ui.theme.MarckFamily
|
||||||
import com.example.shawarma.ui.theme.MyLightRed
|
import com.example.shawarma.ui.theme.MyLightRed
|
||||||
import com.example.shawarma.ui.theme.MyLightYellow
|
import com.example.shawarma.ui.theme.MyLightYellow
|
||||||
@ -61,12 +59,9 @@ fun ProductsScreen(navHostController: NavHostController) {
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ProductsList(navHostController: NavHostController){
|
fun ProductsList(navHostController: NavHostController){
|
||||||
val preferencesManager = PreferencesManager(LocalContext.current)
|
|
||||||
val searchToken = preferencesManager.getData("token", "")
|
|
||||||
|
|
||||||
val productsViewModel: ProductsViewModel = hiltViewModel<ProductsViewModel>()
|
val productsViewModel: ProductsViewModel = hiltViewModel<ProductsViewModel>()
|
||||||
|
|
||||||
val products = productsViewModel.getItemsList(searchToken).collectAsLazyPagingItems()
|
val products = productsViewModel.productListUiState.collectAsLazyPagingItems()
|
||||||
|
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
@ -113,7 +108,7 @@ fun ProductsList(navHostController: NavHostController){
|
|||||||
products.itemCount,
|
products.itemCount,
|
||||||
key = products.itemKey()
|
key = products.itemKey()
|
||||||
) { index ->
|
) { index ->
|
||||||
ProductItem(products[index]!!, navHostController, productsViewModel, searchToken)
|
ProductItem(products[index]!!, navHostController)
|
||||||
Spacer(modifier = Modifier.height(20.dp))
|
Spacer(modifier = Modifier.height(20.dp))
|
||||||
if (index == products.itemCount - 1) {
|
if (index == products.itemCount - 1) {
|
||||||
Spacer(modifier = Modifier.height(70.dp))
|
Spacer(modifier = Modifier.height(70.dp))
|
||||||
@ -125,7 +120,9 @@ fun ProductsList(navHostController: NavHostController){
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ProductItem(product: ProductModel, navHostController: NavHostController, productsViewModel: ProductsViewModel, token: String){
|
fun ProductItem(product: ProductModel, navHostController: NavHostController){
|
||||||
|
val productsViewModel: ProductsViewModel = hiltViewModel<ProductsViewModel>()
|
||||||
|
|
||||||
Card(
|
Card(
|
||||||
border = BorderStroke(width = 2.dp, color = MyOrange),
|
border = BorderStroke(width = 2.dp, color = MyOrange),
|
||||||
shape = RoundedCornerShape(size = 20.dp),
|
shape = RoundedCornerShape(size = 20.dp),
|
||||||
@ -192,7 +189,7 @@ fun ProductItem(product: ProductModel, navHostController: NavHostController, pro
|
|||||||
backgroundColor = MyLightRed
|
backgroundColor = MyLightRed
|
||||||
),
|
),
|
||||||
onClick = {
|
onClick = {
|
||||||
productsViewModel.deleteProduct(product, token)
|
productsViewModel.deleteProduct(product)
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
|
@ -25,17 +25,17 @@ class CartViewModel @Inject constructor(
|
|||||||
get() = _paidOrders
|
get() = _paidOrders
|
||||||
|
|
||||||
fun getOrders(userId: String) {
|
fun getOrders(userId: String) {
|
||||||
// if (userId == "null") return
|
if (userId == "null") return
|
||||||
// viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
// orderRepository.getUnpaidByUser(userId.toInt()).collect {
|
orderRepository.getUnpaidByUser(userId.toInt()).collect {
|
||||||
// _unpaidOrder.postValue(it)
|
_unpaidOrder.postValue(it)
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
// orderRepository.getPaidByUser(userId.toInt()).collect {
|
orderRepository.getPaidByUser(userId.toInt()).collect {
|
||||||
// _paidOrders.postValue(it)
|
_paidOrders.postValue(it)
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
fun payForOrder(order: OrderWithProducts) {
|
fun payForOrder(order: OrderWithProducts) {
|
||||||
val model = order.order
|
val model = order.order
|
||||||
@ -46,28 +46,28 @@ class CartViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun removeProductFromOrder(order: OrderWithProducts, productId: Int) {
|
fun removeProductFromOrder(order: OrderWithProducts, productId: Int) {
|
||||||
// val model = order.orderWithProducts[productId].orderProductModel
|
val model = order.orderWithProducts[productId].orderProductModel
|
||||||
// if(model.quantity == 1) {
|
if(model.quantity == 1) {
|
||||||
// // delete
|
// delete
|
||||||
// viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
// orderProductRepository.delete(model)
|
orderProductRepository.delete(model)
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// else{
|
else{
|
||||||
// // update
|
// update
|
||||||
// model.quantity -= 1
|
model.quantity -= 1
|
||||||
// viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
// orderProductRepository.update(model)
|
orderProductRepository.update(model)
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
fun addProductToOrder(order: OrderWithProducts, productId: Int) {
|
fun addProductToOrder(order: OrderWithProducts, productId: Int) {
|
||||||
// val model = order.orderWithProducts[productId].orderProductModel
|
val model = order.orderWithProducts[productId].orderProductModel
|
||||||
// // update
|
// update
|
||||||
// model.quantity += 1
|
model.quantity += 1
|
||||||
// viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
// orderProductRepository.update(model)
|
orderProductRepository.update(model)
|
||||||
// }
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -34,18 +34,18 @@ class HomeViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun addProductToCart(productId: Int, token: String) {
|
fun addProductToCart(productId: Int, userId: String) {
|
||||||
|
if (userId == "null") return
|
||||||
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
val product = productRepository.getById(productId).first()
|
val product = productRepository.getById(productId).first()
|
||||||
val order = orderRepository.getUnpaidByUser(token)
|
val order = orderRepository.getUnpaidByUser(userId.toInt()).first()
|
||||||
if (order == null) {
|
if (order == null) {
|
||||||
val calendar: Calendar = Calendar.getInstance()
|
val calendar: Calendar = Calendar.getInstance()
|
||||||
calendar.time = Date()
|
calendar.time = Date()
|
||||||
calendar.add(Calendar.HOUR_OF_DAY, 4)
|
calendar.add(Calendar.HOUR_OF_DAY, 4)
|
||||||
val newOrder = orderRepository.insert(token, OrderModel(null, OrderStatus.Неоплачено.name, null, calendar.time.toString()))
|
val newOrderId = orderRepository.insert(OrderModel(null, OrderStatus.Неоплачено.name, userId.toInt(),calendar.time))
|
||||||
if (newOrder != null) {
|
orderProductRepository.insert(OrderProductModel(newOrderId.toInt(), productId, 1, product.price))
|
||||||
orderProductRepository.insert(token, OrderProductModel(newOrder.id!!, productId, 1, product.price))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var isAlreadyAdded = false
|
var isAlreadyAdded = false
|
||||||
@ -54,12 +54,12 @@ class HomeViewModel @Inject constructor(
|
|||||||
val model = prod.orderProductModel
|
val model = prod.orderProductModel
|
||||||
model.quantity += 1
|
model.quantity += 1
|
||||||
model.totalPrice += prod.product.price
|
model.totalPrice += prod.product.price
|
||||||
orderProductRepository.update(token, model)
|
orderProductRepository.update(model)
|
||||||
isAlreadyAdded = true
|
isAlreadyAdded = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!isAlreadyAdded) {
|
if (!isAlreadyAdded) {
|
||||||
orderProductRepository.insert(token, OrderProductModel(order.order.id!!, productId, 1, product.price))
|
orderProductRepository.insert(OrderProductModel(order.order.id!!, productId, 1, product.price))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,9 @@ class ProductViewModel @Inject constructor(
|
|||||||
val product: LiveData<ProductModel>
|
val product: LiveData<ProductModel>
|
||||||
get() = _product
|
get() = _product
|
||||||
|
|
||||||
fun addProduct(name: String, price: Int, oldPrice: Int? = null, token: String) {
|
fun addProduct(name: String, price: Int, oldPrice: Int? = null) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
productRepository.insert(ProductModel(null, name, price, oldPrice), token)
|
productRepository.insert(ProductModel(null, name, price, oldPrice))
|
||||||
_addingProductState.postValue(true)
|
_addingProductState.postValue(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -37,9 +37,9 @@ class ProductViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateProduct(name: String, price: Int, oldPrice: Int? = null, token: String) {
|
fun updateProduct(name: String, price: Int, oldPrice: Int? = null) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
productRepository.update(ProductModel(product.value?.id, name, price, oldPrice), token)
|
productRepository.update(ProductModel(product.value?.id, name, price, oldPrice))
|
||||||
_addingProductState.postValue(true)
|
_addingProductState.postValue(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package com.example.shawarma.viewmodels
|
package com.example.shawarma.viewmodels
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData
|
||||||
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import androidx.paging.PagingData
|
import androidx.paging.PagingData
|
||||||
@ -14,14 +16,15 @@ import javax.inject.Inject
|
|||||||
class ProductsViewModel @Inject constructor(
|
class ProductsViewModel @Inject constructor(
|
||||||
private val productRepository: ProductRepository
|
private val productRepository: ProductRepository
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
private val _products = MutableLiveData<List<ProductModel>>()
|
||||||
|
val products: LiveData<List<ProductModel>>
|
||||||
|
get() = _products
|
||||||
|
|
||||||
fun getItemsList(token:String): Flow<PagingData<ProductModel>> {
|
val productListUiState: Flow<PagingData<ProductModel>> = productRepository.getAllItemsPaged()
|
||||||
return productRepository.getAllItemsPaged(token)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun deleteProduct(product: ProductModel, token: String) {
|
fun deleteProduct(product: ProductModel) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
productRepository.delete(product, token)
|
productRepository.delete(product)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user