105 lines
2.5 KiB
Dart
105 lines
2.5 KiB
Dart
import 'package:sqflite/sqflite.dart';
|
|
import 'package:path/path.dart';
|
|
|
|
class LocalDatabase {
|
|
static final LocalDatabase _instance = LocalDatabase._internal();
|
|
factory LocalDatabase() => _instance;
|
|
LocalDatabase._internal();
|
|
|
|
static Database? _database;
|
|
|
|
Future<Database> get database async {
|
|
if (_database != null) return _database!;
|
|
_database = await _initDB();
|
|
return _database!;
|
|
}
|
|
|
|
Future<Database> _initDB() async {
|
|
final dbPath = await getDatabasesPath();
|
|
final path = join(dbPath, 'app_database.db');
|
|
|
|
return await openDatabase(
|
|
path,
|
|
version: 1,
|
|
onCreate: (db, version) async {
|
|
/// ONBOARDING TABLE
|
|
await db.execute('''
|
|
CREATE TABLE onboarding_state (
|
|
id INTEGER PRIMARY KEY,
|
|
is_first_time INTEGER NOT NULL,
|
|
page INTEGER NOT NULL
|
|
)
|
|
''');
|
|
|
|
/// LOGIN TABLE
|
|
await db.execute('''
|
|
CREATE TABLE login_state (
|
|
id INTEGER PRIMARY KEY,
|
|
is_logged_in INTEGER NOT NULL
|
|
)
|
|
''');
|
|
|
|
/// USER TOKENS TABLE
|
|
await db.execute('''
|
|
CREATE TABLE user_tokens (
|
|
id INTEGER PRIMARY KEY,
|
|
access_token TEXT NOT NULL,
|
|
refresh_token TEXT NOT NULL,
|
|
refresh_token_max_age INTEGER NOT NULL
|
|
)
|
|
''');
|
|
|
|
/// USER DETAILS TABLE
|
|
await db.execute('''
|
|
CREATE TABLE user_details (
|
|
id INTEGER PRIMARY KEY,
|
|
user_id INTEGER NOT NULL,
|
|
first_name TEXT NOT NULL,
|
|
last_name TEXT NOT NULL,
|
|
full_name TEXT NOT NULL,
|
|
email_address TEXT NOT NULL,
|
|
role TEXT NOT NULL,
|
|
role_id INTEGER NOT NULL,
|
|
profile_image TEXT
|
|
)
|
|
''');
|
|
|
|
/// PASS CART TABLE
|
|
await db.execute('''
|
|
CREATE TABLE pass_cart (
|
|
id INTEGER PRIMARY KEY,
|
|
city_name TEXT NOT NULL,
|
|
hero_image TEXT NOT NULL,
|
|
card_type_name TEXT NOT NULL,
|
|
card_display_name TEXT NOT NULL,
|
|
theme_color INTEGER NOT NULL,
|
|
adult_count INTEGER NOT NULL,
|
|
child_count INTEGER NOT NULL,
|
|
adult_price REAL NOT NULL,
|
|
child_price REAL NOT NULL,
|
|
validity_duration INTEGER NOT NULL,
|
|
total_price REAL NOT NULL,
|
|
description TEXT
|
|
)
|
|
''');
|
|
|
|
/// CITY TABLE (with city_logo field)
|
|
await db.execute('''
|
|
CREATE TABLE selected_city (
|
|
id INTEGER PRIMARY KEY,
|
|
city_id INTEGER,
|
|
city_logo TEXT
|
|
)
|
|
''');
|
|
/// LANGUAGE TABLE
|
|
await db.execute('''
|
|
CREATE TABLE selected_language (
|
|
id INTEGER PRIMARY KEY,
|
|
language_code TEXT NOT NULL
|
|
)
|
|
''');
|
|
|
|
},
|
|
);
|
|
}
|
|
} |